目录/文件

  • ls - list directory contents

    1
    2
    3
    4
    ls [选项]... [文件]...
    选项(常用):
    -a 不隐藏任何以"."开始的项目
    -l 每行只列出一个文件
  • tree

    1
    2
    3
    4
    tree [选项] [目录名]
    选项(常用):
    -a 列出全部文件
    -d 只列出目录
  • cat - concatenate files and print

    1
    2
    3
    cat [选项]... [文件]...
    选项(常用):
    -n 对输出的所有行编号

  • mkdir - make directories
    1
    mkdir [选项]... 目录...

  • rmdir - remove empty directories

    1
    rmdir [选项]... 目录...

    只有空目录才可以使用 rmdir 命令删除。

  • rm - remove files or directories

    1
    2
    3
    4
    5
    rm [选项]... 文件...
    选项(常用):
    -r 递归删除目录及其内容
    -f 强制删除。忽略不存在的文件,不提示确认
    -i 需要确认,在使用文件扩展名删除多文件时有用

处理文件

  • sed
1
2
3
4
5
6
7
8
9
10
11
12
13
sed [选项] 命令 输入文本      
选项(常用):
-n:使用安静模式。在一般sed的用法中,输入文本的所有内容都会被输出。加上-n参数后,则只有经过sed 处理的内容才会被显示。
-e: 进行多项编辑,即对输入行应用多条sed命令时使用。
-i:直接修改读取的档案内容,而不是输出到屏幕。使用时应小心。

命令(常用):
a :新增,a后紧接着\,在当前行的后面添加一行文本
c :取代,c后紧接着\,用新的文本取代本行的文本
i :插入,i后紧接着\,在当前行的上面插入一行文本
d :删除,删除当前行的内容
p :显示,把选择的内容输出。通常 p 会与参数 sed -n 一起使用。
s :取代,格式为s/re/string,re表示正则表达式,string为字符串,功能为将正则表达式替换为字符串。

例:

输出my.txt的第三行。

1
sed -n '3p' my.txt 

删除my.txt文件的第二行到最后一行。

1
sed '2,$d' my.txt 

在整行范围内把str1替换为str2。如果没有g标记,则只有每行第一个匹配的str1被替换成str2。

1
sed 's/str1/str2/g' my.txt

-e选项允许在同一行里执行多条命令。例子的第一条是第四行后添加一个str,第二个命令是将str替换为aaa。命令的执行顺序对结果有影响。

1
sed -e '4a\str ' -e 's/str/aaa/' my.txt 

双引号内可以使用变量:

1
2
#!bin/bash
sed -i "s/$2/$3/g" $1
  • awk : 文本分析工具
1
2
3
awk 'pattern action' file
- pattern为条件,action为命令
- $n代表每一行中用分隔符分隔后的第n项,默认分隔符为' '

例:

所有第一项大于2的行,输出第一项和第三项:

1
awk '$1>2 {print $1,$3}' my.txt

-F指定分割的字符,则输出用,分隔的第二项:

1
awk -F, '{print $2}'  my.txt

复制

  • cp - copy files and directories
    1
    2
    3
    cp [选项]... 源文件... 目录
    选项(常用):
    -r 递归复制目录及其子目录内的所有内容

移动

  • mv - move/rename file
    1
    mv [选项]... 源文件... 目录
    mv file ../file_mv → 移动至上一层并重命名。因此重命名文件也可使用mv操作

比较

  • diff
1
2
3
4
5
diff [选项] 文件1 文件2
常用选项:
-b 不检查空格字符的不同
-B 不检查空行
-q 仅显示有无差异,不显示详细信息

权限

Linux的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调

  • chmod
1
2
3
chmod 权限设定字串 文件...
权限设定字串格式 :
[ugoa...][[+-=][rwxX]...][,...]

u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群组,o 表示其他以外的人,a 表示这三者皆是。

+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。

r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

此外chmod也可以用数字来表示权限,格式为:

1
chmod abc 文件

abc为三个数字,分别表示拥有者,群组,其他人的权限。r=4,w=2,x=1,用这些数字的加和来表示权限。例如:chmod 777 filechmod a=rwx file效果相同。

输出

shell使用三种流:

  • 标准输入:stdin ,由0表示
  • 标准输出:stdout,由1表示
  • 标准错误:stderr,由2表示

重定向和管道可以重定向以上的流。

重定向

  • >

改变送出的数据信道,使>前命令的输出数据输出到>后指定的文件中去。

  • >>

重定向追加输出,将>>前命令的输出数据追加输出到>>后指定的文件中去

  • <

重定向输入,将<后指定的文件中的数据输入到<前的命令中

  • 三种流可同时重定向
1
command < input.txt 1>output.txt 2>err.txt

管道

  • |

可以连接命令:

1
command1 | command2 | command3 | ...

以上内容是将command1stdout发给command2stdincommand2stdout发给command3stdin,依此类推。

1
cat < my.sh | grep "Hello" > output.txt" 

上述命令将my.sh的内容作为cat指令标准输入,cat指令stdout发给grep指令的stdin,grep在其中查找字符串,最后将结果输出到output.txt。

查找

  • find - search for files in a directory hierarchy

    1
    2
    3
    4
    find -name 文件名
    -name 选项可以在当前目录下递归地查找符合参数所示文件名的文件,并将文件的路径输出至屏幕上。
    find -name "*.py"
    find . -name "test*"
  • locate

    1
    locate [选项] 文件名

locate也是查找文件的指令,与find的不同之处在于: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找。locate的速度比find快,它并不是真的查找文件,而是查数据库,所以locate的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库。

  • grep - print lines matching a pattern
    1
    2
    3
    4
    5
    6
    7
    grep [选项]... PATTERN [FILE]...
    选项(常用):
    -a 不忽略二进制数据进行搜索
    -i 忽略文件大小写差异
    -r 从文件夹递归查找
    -n 显示行号
    grep -n echo test

快捷键

  • Ctrl+C 终止当前程序的执行。
  • Ctrl+Z 挂起当前程序(挂起程序后会显示该程序挂起编号,若想要恢复该程序可以使用 fg [job_spec] 即可,job_spec即为挂起编号,不输入时默认为最近挂起进程)
  • Ctrl+D 终止输入(若正在使用Shell,则退出当前Shell)
  • Ctrl+I 清屏