我正在尝试创建一个 Makefile 来自动重新制作 Knoppix 发行版。
我正在尝试将文件系统从只读压缩循环设备复制到普通文件系统,以便能够修改它,然后压缩它以替换旧的文件系统。这就是 Knoppix 重新制作的意义所在。我必须保留有关文件系统的所有详细信息,从一个文件系统到另一个文件系统重新创建硬链接结构。我粘贴的 ls -li 是两个不同文件系统中的同一文件,以显示源具有硬链接而目标已丢失它们。
$ ls -li */bin/dnsdomainname
10419 -rwxr-xr-x 4 root root 12992 2010-01-19 10:40 KNOPPIX_V6.2.1CD-2010-01-31-EN.cloop/bin/dnsdomainname
10641687 -rwxr-xr-x 1 root root 12992 2010-01-19 10:40 KNOPPIX_V6.2.1CD-2010-01-31-EN.tree/bin/dnsdomainname
Run Code Online (Sandbox Code Playgroud)
这显然是可能的——如果 rsync 能够保留不同主机之间的硬链接,那么它应该能够在同一主机上的文件干之间执行此操作。
由于某种奇怪的原因,使用我知道应该完成这项工作的三种方法都不起作用,我很困惑出了什么问题。我花了几乎一个工作日来创建脚本、测试它,这似乎是阻止它完全工作的最后一部分。
方法有:
sudo nice tar -C $(NAME).cloop -cf - . | sudo nice tar -C $(NAME).tree -xvpf -
sudo cp -av --preserve=all $(NAME).cloop $(NAME).tree
sudo rsync -x -a -H --progress --delete $(NAME).cloop/ $(NAME).tree
Run Code Online (Sandbox Code Playgroud)
我有一个集成的测试套件(make changes),其中一部分正在计算两个文件系统的 md5sum,并且 diff 为空 - 这意味着文件系统之间每个文件的内容完全相同。但是,权限和硬链接号之间的差异表明,引用共享(硬链接)inode 的每个文件现在都是一个单独的inode,这不是我想要的。所有三种方法都做同样的事情错误,这真的很可疑,我已经没有想法了。
为了供您查看,这里有完整的 …
我\xe2\x80\x99m是tcsh的长期用户,但现在所有的酷孩子似乎都在使用bash或zsh(也就是说,git或其他东西的完成模式可用于bash和zsh,很少用于tcsh)。
\n\n我的问题是,两个 shell 都有关于路径制表符补全的行为,这让我发疯,而且 I\xe2\x80\x99m 很难找到如何将它们更改为我喜欢的方式。
\n\n这里\xe2\x80\x99s 是我\xe2\x80\x99m 过去在 tcsh 中所做的一些与其他人不同的操作的示例:
\n\n/u<TAB>完成到/usr/ /usr/ /usr/li<TAB>完成/usr/lib并列出lib/和libexec/ /usr/lib/ /usr/lib/在 bash 中,无论我点击多少次 tab,它都不会过去/usr/lib,需要我输入斜杠,而我不想这样做。
在 zsh 中,/usr/li<TAB>首先完成 to /usr/lib,然后另一个选项卡列出lib/和libexec/,第三次选项卡完成 to /usr/lib/,所有后续选项卡在/usr/lib/和 之间循环/usr/libexec/。我不知道如何度过这一点。我只想从/usr/li到/usr/lib,然后/usr/lib/,然后列出其内容。
对于Python来说也是如此。在 tcsh 中,我输入pyt<TAB>,它完成 …
我尝试在 Bash 脚本中执行以下操作:运行命令(例如tail -f log_file),等待特定输出到达,然后停止命令,并继续执行脚本。
我尝试了以下方法,但没有成功:
tail -f log_file | grep some_text | head -n1
Run Code Online (Sandbox Code Playgroud)
我这样没有输出。
现在,我尝试诊断问题。当我简单地运行tail -n1,然后在终端中输入一些内容时,它会在第一行之后退出。但是,如果我运行以下命令:
grep some_text | head -n1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在按 CTRL+D 之前我不会得到任何输出,然后它会打印包含 的输入的第一行some_text。
我的问题是,这是为什么?如果head在第一种情况下立即输出第一行,为什么当它从管道获取输入时不输出呢?难道它不应该输出前n行的所有内容,然后退出,向管道的另一端发送 SIGPIPE 信号吗?
ls -l在 *nix(或dirWindows)上运行时是否可以更改显示列的顺序?
例如,我想查看修改日期,然后是名称,然后是其他字段(或者仅选择我想要的字段及其顺序。
如何在不使用cut和修剪不需要的字段的情况下完成此操作(因为这不能解决重新排序的问题)?
如何在 vim 中将字符显示为正方形?字符本身不需要是方形的,但如果您要通过字符的所有中心点绘制网格,它应该形成方形网格。
我想这样做是因为我正在为Dwarf Fortress设计堡垒布局。游戏在正方形/立方体网格上进行。
为什么我不能echo $1 > /sys/class/backlight/acpi_video0/brightness在简单的 bash 脚本中使用?
它给了我错误:echo: write error: Invalid argument。
我set -e经常在脚本中使用,但有时,脚本在某些命令中失败是可以的。
我尝试检查是否set -e打开,但找不到方法 - 没有选项(我知道)set可以提供当前值。
也尝试过这样的:
set | grep errexit(errexit是选项名称-e)和set | grep "-e",没有运气。
我想检查是否errexit设置了该选项,以便我可以在我随着时间的推移构建的一些库函数中暂时禁用它(如果需要,可以使用set +e和重新应用set -e)。就像是:
if [ errexit is set ]; then
ERR_EXIT=1
set +e
fi
...
run some code that may fail
...
if [ "${ERR_EXIT}" = 1 ]; then
set -e
fi
Run Code Online (Sandbox Code Playgroud) 我有一个 Zip 文件,其名称开头带有一个连字符,比方说 '- stuff.zip'
如果我需要移动或复制文件,这意味着我需要使用双连字符,这样文件名就不会被解释为一个选项:
cp -- '- stuff.zip' '- stuff2.zip'
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试对这个文件使用解压缩,那是行不通的:
unzip -l -- '- stuff.zip'
error: -fn or any combination of -c, -l, -p, -t, -u and -v options invalid
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有我能想到的简单和双引号、反斜杠、变量中的文件名的组合,但我无法让它工作。我无法重命名文件,因为脚本将在只读文件系统上运行。
有效的一件事是使用 find :
find -maxdepth 1 -name '- stuff.zip' -exec unzip -l {} \;
Run Code Online (Sandbox Code Playgroud)
但是非常不方便。
cat <(shuf my_ordered_playlist.m3u)echo <(shuf my_ordered_playlist.m3u)vlc my_ordered_playlist.m3uvlc <(shuf my_ordered_playlist.m3u)--random提供了较差的支持)。<<<吗?我有一系列使用佳能 Powershot拍摄的 JPEG 图像到 JPEG。如何将它们转换/转换为 RAW 图像?
不是使用图形工具,而是来自命令行!