我正在阅读 Sobell 的《Linux 命令、编辑器和 Shell 编程实用指南》,4e。早些时候,他谈到了.和..,并说它们是工作目录和工作目录父目录的“路径名的同义词”。我的问题是我是否应该将它们视为相对路径名或绝对路径名的同义词。最后,我认为我的误解与不了解 Linux 系统如何解析路径名有关。
举个例子:假设我输入如下命令
cd ..
我是否应该将 shell 视为用 .. 替换当前工作目录的父目录的绝对路径名?或者,当我给出相对路径名时,“分辨率”的行为是否有所不同(这里似乎是这种情况,因为我没有以斜杠 / 开始我的路径)?在某种程度上,我想这个问题可以表述为“相对路径命名是绝对路径命名的特殊情况吗?因为每个相对路径名都替换为适当的绝对路径?”
为什么以下脚本显示“意外操作员”消息并在使用 运行时失败sh,但使用bash.
#!/bin/sh
if [ $UID -ne 0 ]
then
echo "You must be root."
exit 1
else
echo "Open sesame."
exit 0
fi
Run Code Online (Sandbox Code Playgroud) 我想找到单个目录中的所有子目录。我需要按名称长度进行过滤。我想出了以下几点:
find ./directory -maxdepth 1 -type d
Run Code Online (Sandbox Code Playgroud)
如何按名称长度过滤结果——例如,仅过滤超过 4 个字符的子目录?
column有封装形式util-linux和bsdmainutils。这两个软件包都安装在 Linux Mint 20.2 中
$ type column
column is /usr/bin/column
column is /bin/column
Run Code Online (Sandbox Code Playgroud)
这两个列都指向 bsd 列工具。我如何从 访问该工具util-linux?
当我跑步时egrep,它显示warning: egrep is obsolescent; using grep -E
但我将它用作我经常使用的 shell 自动完成脚本的一部分,并且我不想重写它们。
我正在寻找抑制这些警告的方法,因为我的自动完成变得“丑陋”,例如:在输入时mycmd myargum<TAB>,我期望自动完成能够做到这一点mycmd myargument,但它却写道:
mycmd myargum<TAB>grep: warning: egrep is obsolescent; using grep -E
grep: warning: egrep is obsolescent; using grep -E
ent
Run Code Online (Sandbox Code Playgroud)
目前我尝试这样做:
mv /usr/bin/egrep /usr/bin/egrep.backup
echo 'grep -E $@' > /usr/bin/egrep
chmod a+x /usr/bin/egrep
Run Code Online (Sandbox Code Playgroud)
它的工作原理是将 grep 二进制文件更改为调用“grep -E”的脚本。
附加信息:
$ egrep.backup --version
egrep.backup: warning: egrep.backup is obsolescent; using grep -E
grep (GNU grep) 3.8
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: …Run Code Online (Sandbox Code Playgroud) 我希望按照与列表中显示的顺序相反的顺序连接目录中的文件列表。
tac这与以tac相反的行顺序连接文件不同。
基本上我有一个包含 3 个文件的文件夹file1,file2和file3.
cat f* > newfile将像这样合并这些文件:
file1
file2
file3
Run Code Online (Sandbox Code Playgroud)
但是,我想像这样合并文件
file3
file2
file1
Run Code Online (Sandbox Code Playgroud)
同时保持正确的线路顺序。
尝试在 shell 命令下使用 pfsense 2.7.0 live disk(pfsense 基于 freebsd)清理磁盘上的 mbr 代码部分。
/dev/da0我的驱动器遵循建议的清洁代码,仅保留分区的 mbr 代码,命令应该是:
dd if=/dev/zero of=/dev/da0 bs=446 count=1
Run Code Online (Sandbox Code Playgroud)
然而......结果是:
dd: /dev/da0: Invalid argument
1+0 records in
0+0 records out
0 bytes transferred in 0.000089 secs (0 bytes/sec)
Run Code Online (Sandbox Code Playgroud)
相反...如果我仅使用它作为代码,dd if=/dev/zero of=/dev/da0它只会删除所有内容而不会出现错误:(
我正在虚拟机中进行此测试,以便我可以多次恢复高清来测试这段文字...但是这件事让我头疼...
编辑:似乎如果我使用bs=512或bs=1M它不会给出错误。但是这样做也会删除分区表部分......
EDIT2:我尝试使用该命令dd if=/dev/da0 of=/tmp/mbr_file bs=512 count=1,它为我创建一个带有 mbr 的文件,我想知道我可以使用哪些命令以二进制模式编辑该文件,将前 446 个字节填充为 0,然后用于dd if=/tmp/mbr_file of=/dev/da0 bs=512 count=1恢复它。
我可以用什么?六?
linux ×3
autocomplete ×1
cat ×1
columns ×1
dd ×1
disk ×1
find ×1
freebsd ×1
grep ×1
linux-mint ×1
mbr ×1
partition ×1
path ×1
resolution ×1
shell-script ×1
tac ×1
terminal ×1
util-linux ×1