Linux shell 常用指令
重定向和管道
重定向
>:覆盖输出
>>:追加输出
标准输入 (stdin): 代码为0,使用<或<<;
标准输出 (stdout): 代码为1,使用>或>>;
标准错误输出(stderr): 代码为2,使用2>或2>>;
ls *.txt >> /dev/null
if (! $status) then
echo "file exist"
else
echo "file not exist"
endif
管道
管道是将前一个命令的stdout作为后一个命令的stdin
命令1 | 命令2 | 命令3 | …
command1 | command2 | command3 | ...
tee
tee [OPTION] FILE...
tee读取stdin并将其写到stdout和文件中
选项 | 功能 |
---|---|
-a | 附加到已有文件后面 |
ls /usr/bin | tee ls.txt | grep zip
xargs
command | xargs [OPTION] command
Xargs从标准输入中读取由空格或换行符分隔的项,并使用从标准输入中读取的项后面的任何初始参数执行一次或多次命令。标准输入上的空行将被忽略。
选项 | 功能 |
---|---|
-a file | 从文件中读入作为stdin |
-I {} | 将xargs的每项赋值给{} |
-n num | 命令执行的时候一次用的argument数量 |
-d | 分隔符 |
find
find [path...] -name [expression]
cp
\cp -rf FILE
强制复制,不进行询问
rm
rm [OPTION] FILE...
选项 | 功能 |
---|---|
-d | 删除空文件夹 |
-f | 强制删除,不进行确认 |
–i | 对每个文件的删除进行确认 |
-r | 删除文件夹及其子文件 |
- find+rm:
find . -name “*.v” | xarg rm -rf
ln
ln [OPTION] TARGET DIRECTORY
选项 | 功能 |
---|---|
-s | 建立软链接 |
说明一下软链接和硬链接的区别
硬链接的特点如下:
- 不论是修改源文件,还是修改硬链接文件,另一个文件中的数据都会发生改变。
- 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件都可以被访问。
- 硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。
- 硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。
- 硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。
软链接类似于快捷方式,特点如下:
- 不论是修改源文件(check),还是修改硬链接文件(check-soft),另一个文件中的数据都会发生改变。
- 删除软链接文件,源文件不受影响。而删除原文件,软链接文件将找不到实际的数据,从而显示文件不存在。
- 软链接会新建自己的 inode 信息和 block,只是在 block 中不存储实际文件数据,而存储的是源文件的文件名及 inode 号。
- 软链接可以链接目录。
- 软链接可以跨分区。
symlinks
用于管理链接的一个指令
symlinks [OPTION] dirlist
选项 | 功能 |
---|---|
d | 删除无效链接 |
sort
sort [OPTION]... [FILE]...
选项 | 功能 |
---|---|
-b | 忽略空格 |
-f | 忽略大小写 |
-k n,m[OPTION] | 按照域优先级进行排序,先n后m;n.m意味着第n个域的第m个字符;可以结合sort的其余OPTION进行排序 |
-n | 按照字符串数字大小排列 |
-r | 逆序排列 |
-t [symbol] | 设置分隔符 |
-u | 输出唯一的结果 |
查看文件命令
- cat
- more
- less
- head
- tail
文本处理三剑客
grep
grep [OPTION] PATTERN [FILE ...]
grep "xxx" */*.v
选项 | 功能 |
---|---|
-c | 查找匹配的行数 |
–i | 查找时不区分大小写 |
-l | 列出带有匹配行的文件名 |
-n | 列出行号 |
-v | 从文件内容查找不匹配指定字符串的行 |
-A n | 显示匹配行的后n行 |
-B n | 显示匹配行的前n行 |
-C n | 显示匹配行的前后共计n行 |
- find+grep:
find . -name "*.in" | xargs grep "thermcontact"
sed
sed [OPTION]... {script-only-if-no-other-script} [input-FILE]...
sed "xxx" */*.v
选项 | 功能 |
---|---|
-n | 显示script处理相关的结果 |
-e | 直接增加脚本 |
-f | 通过文件增加脚本 |
-i | 直接替换源文件内容 |
awk
awk 'BEGIN{flag1=0;flag2=0} {if(/conditonA/)flag1=1;if(/conditionB/)flag2=0;if(flag1&&/conditionC/)flag2=1;if(flag1&&flag2&&/conditionD/) print $0}' temp.log;
diff
diff -rq dir1 dir2
打包和压缩
压缩命令不能直接压缩目录,必须先用 tar 命令将目录打包,然后才能对打包文件进行压缩
tar
tar [OPTION] -f name.tar[.gz] [FILE/DIR]...
主要功能选项
选项 | 功能 |
---|---|
-A | 追加tar文件到档案 |
-c | 创建一个新的档案 |
–delete | 删除档案中的文件 |
-r | 向档案结尾中添加文件或者目录 |
-t | 只看档案中有什么内容 |
-x | 从档案提取文件 |
辅助功能选项
选项 | 功能 |
---|---|
-f name | 指定档案名,需要自行加上后缀,名称必须指定 |
-C 目录 | 指定文件提取位置 |
-k | 不覆盖已存在的同名文件 |
-p | 不改变文件原来的属性 |
-v | 显示打包过程 |
-z | 解压或压缩成.tar.gz |
zip
zip [OPTION] zipfile file(s) ...
zip命令会打包并压缩文件
选项 | 功能 |
---|---|
-m | 将文件压缩之后,删除原始文件 |
-q | 在压缩的时候不显示命令的执行过程 |
-r | 递归压缩目录,及将制定目录下的所有文件以及子目录全部压缩 |
-s splitsize | 指定归档文件的最大大小 |
-u | 更新压缩文件,即往压缩文件中添加新文件 |
-v | 显示详细的压缩过程信息 |
-[0-9] | -1 压缩速度更快,-9 压缩效果更好,默认为-6 |
unzip
unzip [OPTION] file.zip [zips ...] [-x xfile(s) ...] [-d exdir]
选项 | 功能 |
---|---|
-d exdir | 将压缩文件解压到指定目录下 |
-n | 解压时不覆盖已经存在的文件 |
-o | 解压时覆盖已经存在的文件 |
-t | 测试压缩文件有无损坏,但并不解压 |
-v | 查看压缩文件的详细信息。包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作 |
-x xfile(s) | 解压不包含文件列表中的文件 |
gzip
gzip [OPTION] name ...
该命令可以用于压缩文件,也可以用于对压缩后的档案进行操作。gzip和tar不同,gzip只进行压缩,不提供打包功能,因此对多个文件进行操作的时候会得到各自的.gz文件。
选项 | 功能 |
---|---|
-c | 将压缩数据输出到标准输出中,并保留源文件 |
-d | 解压档案 |
-l | 显示档案内的信息 |
-r | 递归压缩指定目录下以及子目录下的所有文件 |
-v | 对于每个文件和档案,显示相应的文件名和压缩比 |
-[0-9] | -1 压缩速度更快,-9 压缩效果更好,默认为-6 |
在使用 gzip 命令压缩文件时,源文件会消失,转变为压缩文件。
因此会用到下列用法:
gzip -c file > foo.gz
cat file1 file2 | gzip > foo.gz
gzip -cd old.gz | gzip > new.gz
gunzip
gunzip [OPTION] name ...
选项 | 功能 |
---|---|
-c | 将解压文件输出到标准输出中,并保留源文件 |
-f | 强制解压档案 |
-l | 显示档案内的信息 |
-r | 递归解压指定目录下以及子目录下的所有文件 |
-t | 测试档案是否正常,但不解压 |
-v | 显示命令执行过程 |