进阶
稍微复杂一些的BASH命令,掌握后可加快Linux使用效率。
以下命令的更多用法可以参考:菜鸟教程-Linux命令大全
关于Linux系统知识可以参考:鸟哥的Linux私房菜
相关书籍分享:百度云盘(密码:u34s)
通配符
通配符常用于模糊匹配文件或目录名,个人常用于for
循环、grep
查找等等场景,详细说明和用法可参考。常见通配符包括:
-
*
:匹配任意长度的任意字符 -
{string1,string2}
:匹配string1或string2
常见用法:
# 打印所有以.py结尾的文件
$ ls *.py
# 对dirname目录所有文件进行查找
$ grep -r "hello" dirname/*
# 用VIM编辑器同时打开多个以.data结尾的文件
$ vim -p *.data
# 对当前目录的每个文件进行循环
$ for i in *;do echo $i;done
# 同时复制多个文件到当前目录
$ cp dirname/{INCAR,POSCAR,KPOINTS,POTCAR} .
管道
重定向
重定向分为输入重定向和输出重定向,详细内容可参考菜鸟教程-Shell 输入/输出重定向。
标准文件描述符
文件描述符 | 缩写 | 描述 |
---|---|---|
0 | STDIN | 标准输入 |
1 | STDOUT | 标准输出 |
2 | STDERR | 标准错误 |
对于终端界面来说,标准输入是键盘,标准输出是屏幕。所谓的输入/输出重定向就是将标准输入/输出/错误从键盘/屏幕转移至文件。
输入重定向
一个命令通常从标准输入(默认为终端)读取输入,使用command < file
可将文件内容重定向到命令,即从文件读取输入。这种重定向个人使用的不多,另一种输入重定向称为内联输入重定向,符号为<<
。这种方法无需使用文件进行重定向,只需要在命令行中指定用于输入重定向的数据就可以了。个人只使用cat
写入文件:
# bash script
cat > hello.sh << !
string="Hello, this is a test."
echo \$\{string\}
!
Note:
- 必须指定一个文本标记来划分输入数据的开始和结尾。如本例
!
,其他常用EOF
- 注意特殊字符用
\
转义
输出重定向
输出重定向将命令产生的屏幕输出重定向至另一个位置(通常为文件),常用的重定向操作包括,>
,>>
,1>
,2>
,&>
,1>>
,2>>
,&>>
,tee
。
>
和>>
>
和>>
是最基本也最常用的输出重定向命令,输出重定向至文件后屏幕将不会打印命令运行结果,二者的区别是> file
将新建或覆盖(当file已存在时)file文件,而>> file
将新建(当file不存在时)或追加内容到file文件。
# 打印所有的模块到文件
$ module avail > out.log
# 追加当前目录文件详细信息到文件
$ ls -l >> out.log
1>
,2>
,&>
,1>>
,2>>
和&>>
在>
或>>
前添加特殊文件描述符1
、2
,可指定将标准输出和标准错误输出至文件,而&
分别表示将正确输出、错误输出、所有输出进行重定向,常用操作为:
# 只重定向正确输出
$ command 1> right.log
# 将错误输出丢弃
$ command 2>> /dev/null
# 将正确输出和错误输出分别重定向
$ command 1>> right.out 2>> wrong.out
# 将正确输出和错误输出同时输出至一个文件
$ command &> out
$ command > out 2>&1
Note:
-
>
和>>
默认重定向正确输出,等价于1>
和1>>
-
&>
等价于>&
和2>&1
,一般用&>
即可 -
/dev/null
是Linux系统的特殊文件(可理解为垃圾桶),重定向至该文件的输出将全部消失
tee
前述的输出重定向都不会在屏幕显示输出,而tee
命令配合管道可同时将正确和错误输出在屏幕并重定向至文件。tee
命令用于读取标准输入的数据,并将其内容输出成文件。其一般使用如下:
$ vasp_std | tee out.log
Note:-a
选项,附加到既有文件后面,而非覆盖它。
查找
grep
命令用于查找文件里符合条件的字符串,详细使用请参考菜鸟教程-Linux grep命令,常用选项包括:
-
-n
:打印行号 -
-r
或-d
:对目录递归查找 -
-e
或-E
:根据正则表达式查找
其它查找命令还包括:
-
egrep
:使用扩展的正则表达式匹配文本,详见菜鸟教程-Linux egrep命令 -
rgrep
:递归查找目录及文件中的文本,详见菜鸟教程-Linux rgrep命令 -
fgrep
:相当于grep -F
压缩和归档
Linux中的文件压缩工具有bzip2(.bz2
)、compress(.Z
)、gzip(.gz
)、zip(.zip),但Linux系统中使用最广泛的归档工具是tar
命令,常见用法包括:
# 创建压缩/归档文件
$ zip
$ tar -cvf file.tar file1 file2 dir1 dir2 ...
# 从常见压缩/归档文件提取内容
$ unzip file.zip
$ tar -xvf file.tar
$ tar -zxvf file.tgz
$ tar -zxvf file.tar.gz
Note:可以将多个文件目录归档,通过一次性从远程服务器下载至本地
链接
Linux中的链接可分为软链接和硬链接,软链接相当于Windows系统中的快捷方式。硬链接可理解为创建一个新的指向源文件地址(inode)的文件名。硬链接和源文件可理解为同一个地址映射为两个文件名,而软链接可理解为指向源文件名的映射。二者具有以下特点:
- 硬链接与源文件共享内存地址,删除源文件后,硬链接仍有效;而软链接会开辟新的内存地址,删除源文件后,软链接将失效
- 不论删除软链接还是硬链接,都不会删除源文件
- 硬链接只能对文件创建,而软链接对于文件和目录均可
- 硬链接不能给不同文件系统的文件创建,而软链接可对任何文件系统创建
- 移动源文件路径后,软链接将失效,而硬链接不会
硬链接的作用在于备份,可为重要文件创建硬链接,如果误删该文件,则仍可使用硬链接访问。而软链接的作用与Windows快捷方式相同,为目录层级比较深的目录或文件创建软链接至常用的目录位置,类似于Windows下为软件创建桌面快捷方式。ln
命令用于创建软、硬链接,常用命令如下:
# 为文件创建硬链接
$ ln file file.hard # .hard后缀名仅作为标识
# 为文件或目录创建软链接
$ ln -s file file.soft
$ ln -s dirname dirname.soft
Note:目录软链接删除时,不需要-rf
选项,目录名后不要带/
,如果带/
很容易将源目录删除。
环境变量
目录切换
当需要在多个复杂层级目录来回切换时,使用cd
命令进行切换就会比较麻烦,此时可以使用pushd
和dirs
命令,常见用法如下:
# 进入dirname目录,并将dirname压入目录栈中
$ pushd dirname
# 查看目录栈,第一列为编号
$ dirs -v
# 切换到编号为n的目录
$ pushd +n
目录栈是保存目录名的一个栈结构,编号0表示当前目录。日常使用只需要将目录压入栈中,通过dirs -v
查看目录编号,再使用pushd +n
切换到编号n对应的目录即可。
Note:pushd
如果不跟任何参数则栈顶层的两个目录进行切换,相当于cd -
网友评论