Skip to content
页面导航

1 Shortcuts

  • 两次 Tab 键 -- 自动补全命令字、文件或目录名
  • \ -- 一行内容分成多行显示
  • Ctrl+U/K -- 删除当前光标所在处至行首/行尾的内容
  • Ctrl+L(clear) -- 快速清屏
  • Ctrl+C -- 中断,即取消命令执行
  • Ctrl+A/Home -- 切换到命令行首
  • Ctrl+E/End -- 切换到命令行尾
  • Shift+Page Up/Down -- 查看上一页/下一页内容

2 目录操作命令

pwd

打印当前工作目录的位置

cd

切换工作目录(测试了用户可查看文件权限)

  • cd /usr/local/ -- 绝对路径
  • cd ./share -- 相对路径,“.”表示当前路径
  • cd ../ -- 相对路径,“..”表示上一级路径
  • cd ~ -- 切换到宿主目录下,“~”等同于 /root 绝对路径
  • cd - -- 相对路径,“-”返回用户最近操作的一次目录

ls 选项 参数

  • ls -- 显示指定目录下相关文件信息
  • ls -a -- 显示隐藏文件(包括当前目录.和上级目录..)
  • ls -A -- 隐藏文件
  • ls -R -- 递归显示所有子目录文件信息
  • ls -l -- 详细信息
  • ls -d -- 只显示当前目录
  • ls -h -- 以KB/MB/GB等显示文件大小
  • ls -s -- 文件占用磁盘空间大小(块大小)
  • ls -i -- 文件索引节点号(记录文件信息)

mkdir 选项 参数

创建目录

  • cd /opt

  • mkdir test1 -- /opt 目录下新建空的目录 test1,相对路径

  • mkdir test2 test3 -- /opt 目录下同时新建 test2test3 两个目录,相对路径

  • mkdir {a..f}/mkdir {aa,bb,cc} -- 批量新建多个目录,使用 {a..z}{1..10} 连续集合表示,也可使用 {目录名1,目录名2,······} 取值列表方式表示

  • mkdir -p a/b -- 新建 /opt/a/b,选项 -p 和相对路径

du 选项 参数

统计目录或文件占用的磁盘空间

  • du -a -- 统计文件(默认只统计目录占用的磁盘空间)
  • du -h -- 以KB/MB等方式显示文件占用的磁盘空间
  • du -B -- 磁盘空间大小 -- du -Bh /root/initial-set-ks.cfg
  • du -b -- 统计文件本身占用空间 -- du -bh /root/initial-set-ks.cfg
  • du -s -- 统计占用的磁盘空间 -- ls -hls /root/initial-set-ks.cfg

3 文件操作命令

stat 文件或目录

显示文件或目录的详细属性信息 -- stat /root/anaconda-ks.cfg

touch 选项 文件名

新建空白文件或更新文件的时间标记

  • touch -a -- 只更改访问时间
  • touch -c -- 不创建任何文件
  • touch -d -- 使用指定字符串表示时间而非当前时间
  • touch -m -- 只更改修改时间
bash
[root@localhost ~] # touch 1.txt 2.txt
[root@localhost ~] # touch {a.txt,b.txt}
[root@localhost ~] # touch {x..z}.txt
[root@localhost ~] # touch {1,12,123}.txt

cp 选项 源文件或目录 目标文件或目录

复制文件或目录

  • cp -r -- 递归复制整个目录树,复制目录时必须使用该选项
  • cp -p -- 保持源文件的属性不变
  • cp -f -- 强制覆盖与目标文件或目录同名的文件或目录(覆盖时不提示)
  • cp -i -- 覆盖时提示
bash
[root@localhost ~] # cp /opt/*.txt /opt/test1
[root@localhost ~] # cp -rf /opt/test1 /opt/test2/
[root@localhost ~] # cp /opt/1.txt /opt/test2

rm 选项 文件或目录

删除文件或目录

  • rm -f -- 强行删除文件或目录并且不提醒
  • rm -i -- 删除文件或目录时提醒用户确认
  • rm -r -- 递归删除整个目录树,删除目录时必须使用该选项

mv 源文件或目录 目标文件或目录

剪切或重命名文件或目录

  • mv -f -- 文件存在覆盖不提示
  • mv -i -- 文件存在覆盖提示
  • mv -n -- 不覆盖已存在文件

查找

which 命令字

在PATH环境变量中指定路径,定位与指定名字匹配的可执行命令的所在路径,同时也可判断该命令是否存在。

whereis 选项 文件名

  • whereis -b -- 只搜索二进制文件
  • whereis -m -- 只搜索帮助文件
  • whereis -s -- 只搜索源代码文件

find 路径名 选项 查询结果 处理动作

在整个磁盘中搜索文件,查找速度较慢。

  • find -name -- 文件名
  • find -type -- 文件类型
    • find -type b -- 块设备文件
    • find -type c -- 字符设备文件
    • find -type d -- 目录
    • find -type f -- 普通文件
    • find -type l -- 符号链接文件
    • find -type p -- 管道文件
    • find -type s -- 套接字文件
  • find -size -- 文件大小
  • find -user -- 文件所属者
  • find -group -- 文件所属组
  • find -perm -- 文件权限
  • find -ctime -- 最近修改文件(权限)时间
  • find -mtime -- 最近修改(权限和内容)时间
  • find -atime -- 最近访问时间

locate 文件或目录

在后台对系统数据库(/var/lib/locatedb)进行搜索

type 命令字

  • 内部命令
    • builtin
  • 外部命令
    • alias -- 别名
    • keyword -- 关键字
    • file -- 外部命令
bash
[root@localhost ~] # type cd
cd  shell 内嵌
[root@localhost ~] # type ls
ls  `ls --color=auto` 的别名
[root@localhost ~] # type -P ls
usr/bin/ls
[root@localhost ~] # type if
if  shell 关键字

ln

软链接文件

符号链接,一个文件改变另一个文件会随之发生改变,删除软链接文件对原始文件无影响。

  • ln -s 源文件或目录 链接文件或目录

硬链接文件

删除一个文件对另外一个文件无影响且无法硬链接目录。

  • ln -s 源文件 链接文件

4 文件内容操作命令

管道符

  • | -- 将前面命令的结果作为后面命令的参数进行使用

重定向符

  • > -- 覆盖重定向输出:将结果直接写入文件中(无文件自动创建,有文件直接覆盖)
  • >> -- 追加重定向输出:将结果直接写入文件中(无文件自动创建,有文件则追加)
  • < -- 重定向输出:命令中读取内容来自文件而不是键盘

cat 文件

查看文件内容

  • cat -b -- 显示行号,不包括空行
  • cat -n -- 显示行号,包括空行
bash
[root@localhost ~] # cat a.txt
[root@localhost ~] # cat >> a.txt << EOF

wc 选项 文件

  • wc -c -- 统计字节数
  • wc -l -- 统计行数
  • wc -w -- 统计单词数
  • wc -m -- 统计字符数
  • wc -L -- 统计最长行的长度

more + less

分页

bash
[root@localhost ~] # ls -lh /etc | more
[root@localhost ~] # more /opt/etc.txt
[root@localhost ~] # cat /opt/etc.txt | more

more / less 中命令快捷键

moreless功能
方向键 向上滚动一行
Enter方向键 或 Enter向下滚动一行
bPage Upb向上翻页
SpacePage DownSpace向下翻页
Ctrl+Cqq退出分页显示模式

head + tail

截取文件中特定行数内容

  • head -n -- 行数
  • tail -n -- 行数
  • tail -f -- 实时查看更新内容( Ctrl+C 终止)

5 解压缩操作命令

gzip + zcat

  • 解压缩后缀名为 .gz 的归档文件
    • gzip -d 归档文件名.gz
    • gunzip 归档文件名.gz
  • .gz 格式压缩文件不解压查看内容
    • zcat 归档文件名.gz
    • gunzip -c 归档文件名.gz
  • gzip [-9] 文件名 -- 选项-9代表高强度压缩

bzip2 + bzcat

  • 解压缩后缀名为 .gz 的归档文件
    • bzip2 -d 归档文件名.bz2
    • bunzip 归档文件名.bz2
  • .gz 格式压缩文件不解压查看内容
    • bzcat 归档文件名.bz2
    • bunzip2 -c 归档文件名.bz2
  • bzip [-9] 文件名

zip

  • zip 归档文件名.zip 文件名
  • unzip [-d] -- 指定解压路径
  • unzip -l -- 不解压查看
bash
[root@localhost ~] # zip /home/test.zip /opt/1.txt /opt/2.txt
[root@localhost ~] # unzip -l /home/test.zip
[root@localhost ~] # unzip -d /mnt /home/test.zip

tar

可对文件和目录进行压缩。

创建

  • tar 选项 归档文件名 源文件或目录
    • tar -c -- 创建.tar格式的包文件
    • tar -x -- 解压.tar格式的包文件
    • tar -v -- 输出详细信息
    • tar -f -- 使用归档文件
    • tar -p -- 打包时保留原始文件及目录的权限

解压

  • tar 选项 归档文件名 [-C 目标路径]
    • tar -t -- 列表查看包内的文件
    • tar -C -- 解包时指定释放的目标文件夹
    • tar -z -- 调用gzip程序进行压缩或解压
    • tar -j -- 调用bzip2程序进行压缩或解压
bash
[root@localhost ~] # tar -czvf /home/testgz.tar.gz /opt /mnt
[root@localhost ~] # tar -xzvf /home/testgz.tar.gz -C /media

6 vi 文本编辑器

命令模式

光标移动操作

  1. 光标移动
    • k | j
    • hBackspace | lSpace
    • Enter+ | - | n+
  2. 翻页
    • Page DownCtrl+F | Page UpCtrl+B
    • Ctrl+D | Ctrl+U
  3. 单词间快速跳转 -- w | e | b | n+
  4. 行内快速跳转 -- Home^0 | End$
  5. 行间快速跳转 -- lGgg | G | nG | n+ | n-
  6. 当前页跳转 -- H | M | L | zt | zz | zb
  7. 行号显示 -- :set nu | :set nonu

复制、粘贴和删除操作

  1. 删除 -- xDel | X | nx | dd | ndd | d^ | d$ | dw | de | db
  2. 复制 -- yy | nyy | y^ | y$ | yw | ye | nyw
  3. 粘贴 -- p | P

搜索操作

  1. 查找文件内容 -- /word | ?word | n | N

撤销操作

  1. 撤销 -- u | U
  2. 保存 -- ZZ

输入模式

模式切换

  1. 行内添加数据 -- i | I | a | A
  2. 行间添加数据 -- o | O

输入模式操作

  1. 光标移动 -- | | |
  2. 删除 -- Backspace / Del
  3. 行内跳转 -- Home / End
  4. 换行 -- Enter

末行模式

保存和退出操作

  1. 保存文件 -- :w | :w /root/newfile
  2. 退出 -- :q | :q!
  3. 保存文件并退出 -- :wq | :wq!

打开新文件的操作

  1. 编辑新文件 -- :e/路径名/文件名
  2. 读取新文件 -- :r/路径名/文件名

替换操作

  1. 当前行替换 -- :s /old/new | :s /old/new/g
  2. 行间替换 -- :m,n s/old/new/g
  3. 整行替换 -- :% s /old/new | :% s /old/new/g
  4. 替换确认 -- :s /old/new/c

7 文本处理“三剑客”

元字符

  • ^ -- 行的开始
  • $ -- 行的终点
  • \< -- 匹配单词开头的位置
  • \> -- 匹配单词结尾的位置
  • . -- 匹配任意一个字符
  • * -- 重复匹配之前的字符0次或多次
  • [class] -- 匹配字符集class中的任意字符
  • [^class] -- 匹配任何不在字符集class中的字符
  • [0-9][a-z][A-Z] -- 匹配一组指定范围内的字符,如数字0~9
  • a\{m\} -- 匹配出现m次连续字符a的行
  • a\{m,\} -- 匹配至少出现m次连续字符a的行
  • a\{m,n\} -- 匹配出现m到n次连续字符a的行
  • \ -- 转义符

grep 选项 “条件或正则表达式” 文本名

对文件数据内容的查找和定位

  • grep -v -- 排除满足条件的内容
  • grep -i -- 忽略大小写
  • grep -n -- 输出的同时打印行号
  • grep -c -- 统计满足条件的行数
  • grep -o -- 仅显示匹配满足条件的字符串
  • grep -e -- 实现多个条件逻辑或的关系
  • grep -A -- 打印匹配条件的后几行
  • grep -B -- 打印匹配条件的前几行
  • grep -C -- 打印匹配条件的前后几行
bash
[root@localhost ~] # grep -n "^a" test.txt
[root@localhost ~] # grep "5$" test.txt
[root@localhost ~] # grep "^1" test.txt | grep "5$"
[root@localhost ~] # grep -c "^$" test.txt
[root@localhost ~] # grep -c -i "^a" test.txt
[root@localhost ~] # grep -o "name" test.txt
[root@localhost ~] # grep -e "^a" -e "^y" test.txt
[root@localhost ~] # grep -C 1 "^x" test.txt
[root@localhost ~] # grep -B 2 "^x" test.txt
[root@localhost ~] # grep "^[0-9]*[0-9]$" test.txt
[root@localhost ~] # grep -i "^[a-z]*[a-z]$" test.txt
[root@localhost ~] # grep "^...$" test.txt
[root@localhost ~] # grep "h\{2\}" test.txt
[root@localhost ~] # grep "h\{3,4\}" test.txt

sed 选项

截取满足条件的特定行数以及替换

  • sed -n -- 打印sed处理的那一行数据
  • sed -e -- 编辑,指定多个处理动作
  • sed -f -- 将sed的动作写入文件中
  • sed -r -- 使用扩展的正则表达式
  • sed -i -- 直接修改文件中的内容
  • a -- 在指定行的下一行插入数据
  • i -- 在指定行的上一行插入数据
  • c -- 替换指定行的数据
  • d -- 删除
  • p -- 打印
  • s -- 全部替换
  • w -- 保存
  • r -- 读取、匹配、并入
  • y -- 逐个替换
bash
[root@localhost ~] # cat sed.txt
1 2 3 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed -n '2p' sed.txt
2
[root@localhost ~] # sed -n '2,4p' sed.txt
2 3 4
[root@localhost ~] # sed -n '2p;6p' sed.txt
2 6
[root@localhost ~] # sed -n '2,+3p' sed.txt
2 3 4 5
[root@localhost ~] # sed '3d' sed.txt
1 2 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed '3,6d' sed.txt
1 2 11111 22222 33333 44444
[root@localhost ~] # sed '2ctest' sed.txt
1 test 3 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed 's/2/k/g' sed.txt
1 k 3 4 5 6 11111 kkkkk 33333 44444
[root@localhost ~] # sed '2itest' sed.txt
1 test 2 3 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed '2a666' sed.txt
1 2 666 3 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed '2,4iname' sed.txt
1 name 2 name 3 name 4 5 6 11111 22222 33333 44444
[root@localhost ~] # sed -i 's/^/#/' sed.txt
[root@localhost ~] # cat sed.txt
#1 #2 #3 #4 #5 #6 #11111 #22222 #33333 #44444
[root@localhost ~] # sed -i '2,6s/^#//' sed.txt
[root@localhost ~] # cat sed.txt
#1 2 3 4 5 6 #11111 #22222 #33333 #44444

awk 选项 ‘BEGIN{命令} pattern{命令} END{命令}’ 文件名

文件数据切片和截取满足条件的特定列数

  • awk -F -- 指定分隔符,默认为空格或Tab
  • awk -f -- 调用awk脚本
  • awk -v -- 调用外部的Shell变量
  • $1...$n$ -- 指定分隔符对应的值
  • $0 -- 当前行的内容
  • $NF -- 最后一列
  • NF -- 指定分隔符号之后行的列数
  • NR -- 当前行的行号
  • FS -- 输入字段(列)分隔符,默认为空格或Tab
  • RS -- 输入记录(行)分隔符,默认为换行符
  • OFS -- 输出字段(列)分隔符
  • ORS -- 输出记录(行)分隔符
  • FILENAME -- 保存当前的文件名
bash
[root@localhost ~] # ls -lh /root | awk '{print $1}'
[root@localhost ~] # awk -F ":" '{print $5}' /etc/passwd
[root@localhost ~] # awk -F ":" '{print $NF} /etc/passwd'
[root@localhost ~] # awk '{print NR, $0}' /etc/passwd
[root@localhost ~] # awk -F ":" 'NR==2{print NF}' /etc/passwd
[root@localhost ~] # awk 'NR==8{print $0}' /etc/passwd
[root@localhost ~] # awk -v FS=':' -v OFS='\t' 'NT==2{print $1 $1}' /etc/passwd
[root@localhost ~] # awk -v FS=':' -v OFS='\t' -v ORS='\n' 'NR=2{print $1,$2} NR==3{print $1,$2}' /etc/passwd
[root@localhost ~] # awk 'BEGIN{print "hello"}{print $0}END{print FILENAME}' /etc/passwd

8 vim 的使用

命令模式

光标移动操作

  1. 光标移动
    • k | j
    • hBackspace | lSpace
    • Enter+ | - | n+
  2. 翻页
    • Page DownCtrl+F | Page UpCtrl+B
    • Ctrl+D | Ctrl+U
  3. 单词间快速跳转 -- w | e | b | n+
  4. 行内快速跳转 -- Home^0 | End$
  5. 行间快速跳转 -- lGgg | G | nG | n+ | n-
  6. 当前页跳转 -- H | M | L | zt | zz | zb
  7. 行号显示 -- :set nu | :set nonu

复制、粘贴和删除操作

  1. 删除 -- xDel | X | nx | dd | ndd | d^ | d$ | dw | de | db
  2. 复制 -- yy | nyy | y^ | y$ | yw | ye | nyw
  3. 粘贴 -- p | P

搜索操作

  1. 查找文件内容 -- /word | ?word | n | N

撤销操作

  1. 撤销 -- u | U
  2. 保存 -- ZZ

输入模式

模式切换

  1. 行内添加数据 -- i | I | a | A
  2. 行间添加数据 -- o | O

输入模式操作

  1. 光标移动 -- | | |
  2. 删除 -- Backspace / Del
  3. 行内跳转 -- Home / End
  4. 换行 -- Enter

末行模式

保存和退出操作

  1. 保存文件 -- :w | :w /root/newfile
  2. 退出 -- :q | :q!
  3. 保存文件并退出 -- :wq | :wq!

打开新文件的操作

  1. 编辑新文件 -- :e/路径名/文件名
  2. 读取新文件 -- :r/路径名/文件名

替换操作

  1. 当前行替换 -- :s /old/new | :s /old/new/g
  2. 行间替换 -- :m,n s/old/new/g
  3. 整行替换 -- :% s /old/new | :% s /old/new/g
  4. 替换确认 -- :s /old/new/c

作业

  1. 使用 vim 打开本目录下的 ./man.config 文本文件,设定行号;

    bash
    vi /etc/man.config
    :set nu
  2. 移动到第58行行首,再向右移动30个字符,移动到第8行行尾,再向左移动3个单词:

    bash
    58G
    30→
    8G
    $
    3b
  3. 移动到第一行行首,并且向下搜索“man"这个字符串:

    bash
    gg
    /man
    n
  4. 将50到100行之间的man替换为MAN,并且一个一个挑选是否需要修改;

    bash
    :50,100s/man/MAN/gc
  5. 复制51到60行这十行的内容,并且贴到最后一行之后:

    bash
    51G
    10yy
    G
    p
  6. 删除11到30行之间的20行,去第29行首,并且删除15个字符;

    bash
    11G
    20dd
    29G
    15x
  7. 撤销全部操作,将文件复原:

    bash
    u···/
    :e!
  8. 将文件另存成一个名为 man.config.bak 的文件;

    bash
    :w man.config.bak
  9. man.config.bak 文件最后一行后插入当前目录下 turtle.txt 文件内容并保存;

    bash
    r ./turtle.txt
  10. 同时打开 man.config.bakman.config

    bash
    vi ./man.config.bak ./man.config
  11. 将文件 man.config.bak 中添加的新内容的第1列到第10列拷贝并粘贴到 man.config 中;

    bash
    ctrl + v
    :set nu
    152↓
    10→
    y
    :n
    p
  12. 储存两个文件后离开vim。

    bash
    :wq

Released under the MIT License.