Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。

4
链接命令是原子的吗?
如果有一个过程不断地写入文件,而我想用root来控制文件,则可以执行以下操作: sudo rm somefile; sudo touch somefile 追加过程是否有可能在这两个命令之间追加到文件?如果是这样,是否有办法确保在这两个命令之间不运行其他命令?
8 bash 

1
如何最好地跟踪新手管理员的冒险经历
我有此用户,但其sudo权限有限,但是他设法不时搞砸。我想密切注意他的冒险历程,以便我能以更少的挖掘力来弥补任何损失。理想情况下,我希望具有以下功能的服务可以很好地集成和呈现 曲目外壳输入和输出一样ttyrec(或者script或者sudo如果日志记录设置),并可以重放像ttyplay(或会话scriptreplay或sudoreplay)兼容性与ncurses的程序将是很好的,但不是必需的,ttyrec显然可以做到这一点。 跟踪文件访问,创建和修改。理想情况下,每次更改或删除文件时,它也可以备份文件。 到目前为止,我已经找到了一些我必须设置的工具才能获得大多数所需的功能,但是我还没有遇到能够很好地集成它们的OSS产品(Lynis社区版在功能上还不清楚) 。 我可以把ttyrec $(mktemp),script $(mktemp)或sudo -u $USER -i(使用sudo的日志记录设置)在其.bashrc登录的外壳IO。 建立审计跟踪一些目录的文件访问,像/usr,/etc,/var。 他登录时创建LVM快照,但这有点过头了,并且可能会降低系统性能。 编辑: ttyrec似乎是一个更好的选择script,它将满足我所有的IO日志记录要求。现在,我需要找到一种记录文件操作的好方法。 如有任何建议或最佳做法的建议,我将不胜感激。

3
在命令行提示之间插入空行
使用命令行时,通常会很混乱。例如,检查过去的命令及其输出变得很不方便。 我希望每次在显示命令提示符之前都添加一个换行符。像这样: <clutter> <blank line> name@machine:~$ 我使用bash外壳。如何做到这一点?

1
用通配符分配的变量中的参数扩展
我的当前文件夹(MA502)中有两个文件,它们的名称是- MA502_TAAGGCGA-TCGCAGG_L001_R1_001.at.fastq MA502_TAAGGCGA-TCGCAGG_L001_R2_001.at.fastq 我有很多这样的文件夹-例如MA503,MA504等,我想遍历这些文件夹。 我使用通配符分配变量名- Forward=*R1*.at.fastq Reverse=*R2*.at.fastq 我想在脚本中处理这些文件,并希望将输出替换.at为.atqt,以便最终名称看起来像- MA502_TAAGGCGA-TCGCAGG_L001_R1_001.atqt.fastq MA502_TAAGGCGA-TCGCAGG_L001_R2_001.atqt.fastq 我试过了 awk 'script' $Forward > ${Forward/.at/.atqt} 我的最终文件名看起来像- *R1*.atqt.fastq 而不是我的期望 MA502_TAAGGCGA-TCGCAGG_L001_R1_001.atqt.fastq 我已经根据需要在UNIX上学到了所有东西,所以我不确定如何处理变量名。任何帮助表示赞赏!

3
如何用另一个文件中的一部分文本替换文件中两个标记之间的文本?
假设我在中有一段文字~/.bashrc: #~/.bashrc # ...some commands... # aliases alias suicide='sudo rm -rf /' # end aliases # other commands 我希望将该文本块替换为另一个文件中两个标记之间包含的一些其他文本: stuff-to-place-in-bashrc.txt # stuff-to-place-in-bashrc.txt # ...stuff... # aliases alias ldir='ls * -d' alias ithinklifeisworthliving='echo all good' # end aliases # ...more stuff... 我试过了 sed -ne 's/# aliases\s+\(.*\)\s+# end aliases/\1/' stuff-to-place-in-bashrc.txt 但是我真的在黑暗中摇摆。有人可以帮我吗? 如何从中提取文本stuff-to-place-in-bashrc.txt? …

2
一个bash文件中有多个shebang
我有一个别人看过的脚本(注意:这是一个文件): #!/bin/bash some commands some commands #!/bin/bash some commands some commands #!/bin/bash some commands some commands 我想知道第二和第三次爆炸的目的是什么?是由于错误还是故意?

1
我可以更改选择选项的显示方式吗?
我正在使用bash中的select和case。我目前有9个选项,可以很好地整理整齐的3x3网格选项,但显示如下: 1) show all elements 4) write to file 7) clear elements 2) add elements 5) generate lines 8) choose file 3) load file 6) clear file 9) exit 我希望它显示在列之前的行中: 1) show all elements 2) add elements 3) load file 4) write to file 5) generate lines 6) clear file …


4
如何将字符串的一部分提取到变量中?
我有一些这样的文件中的一行: attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks... 我想提取的512^3,16^3,32^3并800从它的四个数字分别为它们分配到四个变量level,grid,boxes和tasks用于其他用途。 我怎样才能做到这一点?

3
测试postfix是否正在运行
我正在寻找一种可靠的方法来测试postfixbash脚本中是否正在运行。 我的第一次尝试只是尝试pidof postfix,它不起作用。 然后我试图得到postfix status: POSTFIX_LOCATION=/var/packages/MailServer/target/sbin/postfix # location of postfix result=`$POSTFIX_LOCATION status` if [ -z $result ]; then echo "Error: No status output from postfix" elif [[ "$result" == *"is running"* ]]; then echo "postfix is running!" else echo "postfix is not running!" fi 但是,即使将状态报告给控制台,该result变量仍为空。这是控制台输出: postfix/postfix-script: the Postfix mail system …
8 linux  bash  postfix 

4
分割不同命令的输入并合并结果
我知道如何合并不同命令的结果 paste -t',' <(commanda) <(commandb) 我知道将相同的输入传递给不同的命令 cat myfile | tee >(commanda) >(commandb) 现在如何结合这些命令?这样我就可以 cat myfile | tee >(commanda) >(commandb) | paste -t',' resulta resultb 说我有一个文件 myfile: 1 2 3 4 我想制作一个新文件 1 4 2 2 3 4 3 2 6 4 1 8 我用了 cat myfile | tee >(tac) >(awk …

3
使用| $ variable中的竖线字符使它成为bash中的另一个参数;如何逃脱呢?
我有一个这样的bash脚本 export pipedargument="| sort -n" ls $pipedargument 但是它给出了错误 ls: |: No such file or directory ls: sort: No such file or directory 似乎将的内容"| sort -n"视为传递给的参数ls。 我如何才能将其转义,以便将其视为常规管道命令? 我试图有条件地设置$pipedargument。我想我可以有条件地执行命令的不同版本,但仍然想知道是否有办法使上述工作正常进行?

4
展平文件夹结构
我有这个文件夹结构: ├── foo1 │ ├── bar1.txt │ └── bar2.txt ├── foo2 │ ├── bar3.txt │ └── bar4 with a space.txt └── foo3 └── qux1 ├── bar5.txt └── bar6.txt 我想在每个文件夹级别之间加一个下划线: ├── foo1_bar1.txt ├── foo1_bar2.txt ├── foo2_bar3.txt ├── foo2_bar4 with a space.txt ├── foo3_qux1.bar6.txt └── foo3_qux1_bar5.txt 我四处张望,没有找到任何可行的解决方案,主要是因为我的问题有两个特殊之处:根目录中可能存在多个文件夹级别,而且某些文件可能包含空格。 任何想法如何在bash中完成此操作?谢谢! 编辑:运行格连杰克曼建议答案我得到这个: 一级文件夹有两个下划线。知道如何避免这种情况或只是对其重命名,以便仅使用一个下划线吗?谢谢。

3
awk +从第一行开始打印行,直到匹配单词
我想从文件中打印所有行,直到匹配单词,然后建议如何使用awk进行打印 例如 我想打印所有行直到PPP字 备注第一行应与AAA区分(任何字) cat file.txt AAA ( the first line/word chuld be any word !!!!! ) BBB JJJ OOO 345 211 BBB OOO OOO PPP MMM ((( &&& 所以我需要得到这个 AAA BBB JJJ OOO 345 211 BBB OOO OOO PPP 其他示例(要打印到KJGFGHJ) cat file.txt1 HG KJGFGHJ KKKK 所以我需要 HG KJGFGHJ
8 linux  bash  awk  ksh 

6
如何使用Linux seq命令打印IP地址范围
如何使用“ seq”命令在linux命令行上打印一系列IP地址?例如:我需要seq打印从10.0.0.1到10.0.0.23的ip范围。好像八位字节之间的句点使数字表现得像浮点数。我收到“无效的浮点参数错误”。我尝试使用-f选项。可能是我没有正确使用它。但这仍然给我一个错误。我正在尝试类似 seq 10.0.0.2 10.0.0.23 除了切换到excel以外,还有其他方法可以打印Linux范围内的IP地址吗?

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.