Unix & Linux

Linux,FreeBSD和其他类似Un * x的操作系统用户的问答

3
在POSIX sh中执行-nt / -ot测试
即使大多数外壳程序在“ POSIX模式”下运行,内置的test和[实用程序在大多数外壳程序中都具有-nt(“比...更新”)和-ot(“比...更旧”)测试(对于在外壳上使用相同名称的外部实用程序也是如此)我可以访问的系统)。这些测试用于比较两个文件上的修改时间戳。它们的文档化语义在不同的实现中略有不同(关于一个或另一个文件不存在的情况),但是它们不包含在POSIX规范中。为test实用。 他们不结转到test时,从[KornShell]壳去除有条件的命令,因为他们没有被列入工具test内置于历史实现实用sh工具。 假设我想比较/bin/shshell脚本中文件之间的修改时间戳,然后根据一个文件是否比另一个文件新来采取措施,如 if [ "$sigfile" -nt "$timestamp" ] || [ "$sigfile.tmp" -nt "$timestamp" ] then return fi ...除了make(这至少会使脚本的其余部分难以理解)之外,我还可以使用其他什么实用程序?还是我应该假设没有人会在“的历史实现sh” 上运行脚本,或者辞职以编写像这样的特定 shell bash?
11 files  timestamps  posix  test 


8
通过cat命令显示空白行
我在下面有一个files.txt列表: -rw-rw-r-- 1 root dev 11 May 16 12:18 20_SumActive.txt -rw-rw-r-- 1 root dev 11 May 16 12:18 22_SumActive.txt -rw-rw-r-- 1 root dev 7 May 16 12:18 24_SumActive.txt -rw-rw-r-- 1 root dev 0 May 16 12:18 26_SumActive.txt -rw-rw-r-- 1 root dev 0 May 16 12:18 28_SumActive.txt 输出: kpgmeddev01> cat 2[0-8]_SumActive.txt …

8
基于if条件的案例失败
我正在寻找一种方法来根据bash中的case条件中的if条件发生失败。例如: input="foo" VAR="1" case $input in foo) if [ $VAR = "1" ]; then # perform fallthrough else # do not perform fallthrough fi ;; *) echo "fallthrough worked!" ;; esac 在上面的代码中,如果变量VAR是1,我希望条件条件执行失败。

3
为什么我不能从/ dev目录以外的设备文件创建硬链接?
当我想以root模式在/home目录中创建硬链接时,Linux显示以下错误消息: ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link 上面的错误信息如下所示: # cd /home/user/ # ln /dev/sda1 my_sdb 但是我只能在/dev目录中创建一个硬链接,而在其他目录中则不可能。 现在,我想知道如何从目录(或其他目录)中的现有设备文件(如sdb1)创建硬链接/home?
11 linux  hard-link  ln 

2
用作路径前缀的〜(波浪号)是什么?
编辑:这是/programming/998626/含义-tilde-in-linux-bash-not-home-directory /的副本。我没有以重复形式结束此问题的声誉。 我指的不是~主目录,而是这样的: $ ls ~foo/bar /some/mount/point/foo/bar 但是,如果我尝试使用不同的挂载点,例如: $ mount | ag "/dev " devfs on /dev (devfs, local, nobrowse) $ ls /dev/stdin /dev/stdin $ ls ~stdin zsh: no such user or named directory: stdin . # bash has a similar error message: ls: ~stdin: No such file or directory …
11 command-line  osx 

4
为什么heredoc中的JSON内容不可解析?
我有一个JSON片段。 以下内容不起作用: VALUE=<<PERSON { "type": "account", "customer_id": "1234", "customer_email": "jim@gmail.com" } PERSON echo -n "$VALUE" | python -m json.tool 结果是: JSON对象无法解码 对进行相同的操作jq,即 echo -n "$VALUE" | jq '.' 没有输出。 对于以下情况,存在相同的行为: VALUE=<<PERSON '{ "type": "account", "customer_id": "1234", "customer_email": "jim@gmail.com" }' PERSON echo -n "$VALUE" | python -m json.tool 响应: JSON对象无法解码 但是以下工作原理: …


3
如何使用grep搜索带有两个单词之一而不是两个单词的行?
我想在文本文件中搜索带有'word1'XOR'word2'的行。因此,它应该输出带有word1,word2的行,但不输出带有这两个单词的行。我想使用XOR,但是我不知道如何在linux命令行中编写它。 我试过了: grep 'word1\|word2' text.txt grep word1 word2 text.txt grep word1 text.txt | grep word2 grep 'word1\^word2' text.txt 还有更多,但没有成功。

1
为什么strace不显示该过程正在等待某些东西?
强大的力量strace让我失望了。这怎么可能? time foo显示foo运行需要几秒钟(“真实”),但在用户空间(“用户”)和内核(“ sys”)中使用的CPU时间都可以忽略不计。对于好奇,foo定义如下。 因此,它花费大部分时间等待其他事情,而不是执行CPU指令。正常情况下,我可以看到它的等待状态strace-即哪个系统调用长时间处于阻塞状态。不幸的是,这种方法行不通。 strace -ttt -T -C -w foo显示系统调用,时间戳和系统调用所花费的(实际)时间的摘要。但是,此特定过程显示出在系统调用内花费的总(实际)时间微不足道。 foo实际上是journalctl -b -u dev-hugepages.mount。除非我每次都必须将最后一个参数更改为一个不同的systemd单元,以便重现此参数。换句话说,我正在调查的延迟是在我第一次尝试获取任何一个systemd单元的日志时发生的。 编辑:在回答了主要问题之后,我还意识到我遇到这个问题会导致延迟的原因。 此过程花费的时间是一个特定的问题,显然并非在所有系统上都发生。https://github.com/systemd/systemd/issues/7963


5
如何反转二进制文件的内容?
我正在解决一个难题,即找到了没有文件扩展名的数据文件。该file命令表明它是一个data file (application/octet-stream)。该hd命令显示GNP。在最后一行。因此,如果我反转此文件,则将得到.PNG格式的文件,我在各处搜索了内容,但没有找到解决方案来解释如何反转二进制文件的内容。
11 binary 

13
如何用数字对一行分隔的项目进行排序?
我有一行(或多行)数字,这些数字由任意字符定界。我可以使用哪些UNIX工具对每一行的项目进行数字排序,并保留定界符? 示例包括: 数字列表;输入:10 50 23 42; 排序:10 23 42 50 IP地址; 输入:10.1.200.42; 排序:1.10.42.200 CSV; 输入:1,100,330,42; 排序:1,42,100,330 竖线分隔;输入:400|500|404; 排序:400|404|500 由于定界符是任意的,因此可以使用选择的单字符定界符随意提供(或扩展)答案。

3
ssh远程命令行参数如何解析
我已经看到了有关需要对远程ssh命令的参数进行两次转义的问题和解答。我的问题是:第二次解析究竟在何时何地完成? 如果我运行以下命令: $ ssh otherhost pstree -a -p 我在输出中看到以下内容: |-sshd,3736 | `-sshd,1102 | `-sshd,1109 | `-pstree,1112 -a -p 远程命令(pstree)的父进程是sshd,似乎没有任何shell可以解析远程命令的命令行参数,因此似乎没有必要使用双引号或转义(但绝对是)。相反,如果我先在那儿ssh并获得一个登录shell,然后运行,pstree -a -p我会在输出中看到以下内容: ├─sshd,3736 │ └─sshd,3733 │ └─sshd,3735 │ └─bash,3737 │ └─pstree,4130 -a -p 很明显,bash在这种情况下,有一个外壳可以进行命令行解析。但是,在我直接使用远程命令的情况下,似乎没有外壳,那么为什么需要双引号?
11 bash  shell  ssh  process  quoting 

3
当“ / bin / sh”指向“ / bin / bash”时运行shell脚本
我已经在这个问题中阅读以下内容: bash支持--posix开关,这使其更符合POSIX。如果以sh调用,它也会尝试模仿POSIX 。 上面的引用假设这/bin/sh是指向的链接/bin/bash。 但是我不太了解“ sh调用”的含义。 假设我有以下脚本,称为“ script.sh”: #!/bin/bash echo "Hello World" 在以下每种情况下,请告诉我该脚本是在普通bash模式下还是在POSIX模式下运行(假设我已经在运行的终端中执行了以下命令bash): sh script.sh bash script.sh ./script.sh 现在说我有以下脚本,称为“ script.sh”(类似于上面的脚本,但没有shebang): echo "Hello World" 在以下每种情况下,请告诉我该脚本是在普通bash模式下还是在POSIX模式下运行(假设我已经在运行的终端中执行了以下命令bash): sh script2.sh bash script2.sh ./script2.sh
11 linux  bash  shell 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.