用户操作

修改密码(passwd)

1
sudo passwd <username>

image-20231221132259181

创建新用户(adduser)

1
sudo adduser <username>

image-20231221132357801

删除用户(deluser)

1
sudo deluser <username> --remove-home

image-20231221132840664

查看当前用户(whoami)

1
whoami

image-20231221132422791

切换到用户(su)

1
su -l <username>

image-20231221132619718

参数 描述
-c 将 COMMAND 传递至启动的 shell
-h 显示帮助信息并退出
-l 将 shell 设为登录 shell
-p 不重置环境变量并保持同一 shell
-s 使用 SHELL 而非 passwd 中的默认值

查看所属用户组(groups)

1
groups <username>

image-20231221132654167

其中冒号之前表示用户,后面表示该用户所属的用户组

授予sudo权限

1
2
3
sudo usermod -G sudo <username>
# 或者
sudo adduser <username> sudo

image-20231221132741744

移除sudo权限

1
sudo deluser <username> sudo

image-20231221132808881

目录操作

查看当前路径(pwd)

1
pwd
参数 描述
-P 显示实际物理路径,而非使用连接(link)路径
-L 当目录为连接路径时,显示连接路径

图片描述

切换目录(cd)

1
cd <dir>
命令 作用
cd ~ 进入当前用户主目录
cd / 进入系统根目录
cd .. 从当前目录进入父目录
cd - 从当前目录进入上次所在目录

image-20231221132945769

查看目录内容(ls)

  • 只显示文件名:

    1
    ls

    image-20231221133003656

  • 显示详细信息:

    1
    2
    3
    ll
    # 等同于
    ls -l

    image-20231221133018031

    参数 描述
    -a –all 列出目录下的所有文件,包括以 . 开头的隐含文件
    -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来
    -h –human-readable 以容易理解的格式列出文件大小(例如 1K 234M 2G)
    -t 以文件修改时间排序

    隐藏文件前带.

  • 查看目录完整属性:

    1
    ls -dl [<dirpath>]

    image-20231221133100480

  • 显示所有文件大小

    1
    ls -aSsh

    image-20231221133334152

创建目录(mkdir)

1
mkdir [option] <dir>

image-20231221141238014

参数 描述
-m 设定权限<模式>
-p 多级创建,可以是一个路径名称。若路径中某些目录尚不存在,系统将自动建立好
-v 每次创建新目录都显示信息

删除目录(rm -r)

1
rm -r [option] <dir>

image-20231221141153974

参数 描述
-f 忽略不存在的文件,从不给出提示
-i 进行交互式删除
-r 指示 rm 将参数中列出的全部目录和子目录均递归地删除(删除目录时必须)
-v 详细显示进行的步骤

复制目录(cp -r)

也就是递归复制文件

1
cp [option] <dir> <目标位置>

image-20231221142500949

参数 描述
-t 指定目标目录
-i 覆盖前询问(使前面的 -n 选项失效)
-n 不要覆盖已存在的文件(使前面的 -i 选项失效)
-s 对源文件建立符号链接,而非复制文件
-f 强行复制文件或目录,不论目的文件或目录是否已经存在
-u 只在源文件的修改时间较目的文件更新时,或是对应的目的文件并不存在,才复制文件

移动目录(mv)

1
mv [option] <dir> <目标位置>

image-20231221141444450

参数 描述
-b 若需覆盖文件,则覆盖前先行备份
-f 如果目标文件已经存在,不会询问而直接覆盖
-i 若目标文件已经存在时,就会询问是否覆盖
-u 若目标文件已经存在,且源文件比较新,才会更新
-t 该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后

文件操作

查看文件信息(ll)

1
ll <file>

image-20231221142520514

查看文件大小(du -h)

1
du -h <dir/file>

查看文件类型(file)

1
file <file>

image-20231221142534603

查看文件(cat)

  • 正序查看

    1
    cat [option] <file>

    image-20231221142851473

    参数 描述
    -A 等价于 -vET
    -b 对非空输出行编号
    -e 等价于 -vE
    -E 在每行结束处显示 $
    -n 对输出的所有行编号,由 1 开始对所有输出的行数编号
    -s 有连续两行以上的空白行,就代换为一行的空白行
    -t -vT 等价
    -T 将跳格字符显示为 ^I
    -u (被忽略)
    -v 使用 ^M-引用,除了 LFD 和 TAB 之外
  • 倒序查看

    1
    tac <file>

    image-20231221142908437

文件计算行号查看(nl)

  • nl 命令在 linux 系统中用来计算文件中的行号。nl 可以将输出的文件内容自动加上行号,其默认的结果与 cat -n 有点不太一样。 nl 可以将行号做较多的显示设计,包括位数与是否自动补齐 0 等等的功能。

    1
    nl [option] [file]

    image-20231221143002997

    参数 描述
    -b 指定行号指定的方式,主要有两种:
    -b a 表示不论是否为空行,也同样列出行号(类似 cat -n
    -b t 如果有空行,空的那一行不要列出行号(默认值)
    -n 列出行号表示的方法,主要有三种:
    -n ln 行号在屏幕的最左方显示
    -n rn 行号在自己栏位的最右方显示,且不加 0
    -n rz 行号在自己栏位的最右方显示,且加 0
    -w 行号栏位的占用的位数

阅读文件

more

  • 功能类似 catcat 命令是将整个文件的内容从上到下显示在屏幕上。 more 命令会一页一页的显示,方便使用者逐页阅读,而最基本的指令就是按Enter向下滚动一行,按Space往下一页显示,按B键就会往回(back)一页显示,按=输出当前行行号,按下 H显示帮助,按下Q退出。

    1
    more [option] <file>

    image-20231221145143202

    参数 描述
    +n 从笫 n 行开始显示
    -n 定义屏幕大小为 n 行
    +/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
    -c 从顶部清屏,然后显示
    -d 提示“Press space to continue,’q’ to quiet”,禁用响铃功能
    -p 通过清除窗口而不是滚屏来对文件进行换页,与-c 选项相似
    -s 把连续的多个空行显示为一行
    -u 把文件内容中的下划线去掉

less

  • 是 linux 正统查看文件内容的工具,功能极其强大

    1
    less [option] <file>
    参数 描述
    -e 当文件显示结束后,自动离开
    -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
    -i 忽略搜索时的大小写
    -m 显示类似 more 命令的百分比
    -N 显示每行的行号
    -s 显示连续空行为一行
  • 常用操作:

    符号 描述
    /字符串 向下搜索“字符串”的功能
    ?字符串 向上搜索“字符串”的功能
    n 重复前一个搜索(与 / 或 ? 有关)
    N 反向重复前一个搜索(与 / 或 ? 有关)
    b 向前翻一页
    d 向后翻半页
    q 退出 less 命令
    空格键 向后翻一页
    向上键 向上翻动一行
    向下键 向下翻动一行
  • 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。

    1
    head [option] <file>

    image-20231221145838128

    参数 描述
    -q 隐藏文件名
    -v 显示文件名
    -c<字节> 显示字节数
    -n<行数> 显示的行数

tail

  • 用于显示指定文件末尾内容。常用查看日志文件,默认为尾部10行。

    1
    tail [option] <file>

    image-20231221145910940

    参数 描述
    -f 循环读取
    -q 不显示处理信息
    -v 显示详细的处理信息
    -c<字节> 显示的字节数
    -n<行数> 显示行数

创建文件(touch)

1
touch <file>
  • 批量创建文件

    1
    touch file{1..5}.txt

    image-20231221150514197

删除文件(rm)

1
rm [option] <file>

image-20231221150534482

参数 描述
-f 忽略不存在的文件,从不给出提示
-i 进行交互式删除
-r 指示 rm 将参数中列出的全部目录和子目录均递归地删除
-v 详细显示进行的步骤

编辑文件(vim)

1
vim <file>

创建并写入文件(echo >>)

1
echo "Text" >> <file>

image-20231221151525050

多行编辑(cat)

1
2
3
cat >> <file> << eof
……
eof

image-20231221151402910

复制文件(cp)

1
cp [option] <file> <目标位置>

image-20231221150733380

参数 描述
-t 指定目标目录
-i 覆盖前询问(使前面的 -n 选项失效)
-n 不要覆盖已存在的文件(使前面的 -i 选项失效)
-s 对源文件建立符号链接,而非复制文件
-f 强行复制文件或目录,不论目的文件或目录是否已经存在
-u 只在源文件的修改时间较目的文件更新时,或是对应的目的文件并不存在,才复制文件

设置文件权限(chmod)

# 权限 rwx 二进制
7 读 + 写 + 执行 rwx 111
6 读 + 写 rw- 110
5 读 + 执行 r-x 101
4 只读 r– 100
3 写 + 执行 -wx 011
2 只写 -w- 010
1 只执行 –x 001
0 000
  • 数字表示

    1
    chmod <rwx> <file>
    • 文件调用权限分为三级 :

      • 文件所有者(Owner)
      • 用户所在用户组(Group)
      • 其它用户(Other Users)
    • 权限分为三种:

      • 可读(Read)
      • 可写(Write)
      • 可执行(Execute)

    img

  • 字符表示

    1
    chmod <u><op><permission> <file>
    • 用户组部分表示:

      who 用户类型 说明
      u user 文件所有者
      g group 文件所有者所在组
      o others 所有其他用户
      a all 所有用户, 相当于 ugo
    • 符号部分表示:

      Operator 说明
      + 为指定的用户类型增加权限
      - 去除指定用户类型的权限
      = 设置指定用户权限的设置,即将用户类型的所有权限重新设置
    • 权限部分表示:

      模式 名字 说明
      r 设置为可读权限
      w 设置为可写权限
      x 执行权限 设置为可执行权限
      X 特殊执行权限 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
      s setuid/gid 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
      t 粘贴位 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位
  • 效果相同语句举例:

    1
    2
    chmod a=rwx file
    chmod 777 file
    1
    2
    chmod ug=rwx,o=x file
    chmod 771 file

移动文件(mv)

1
mv [option] <file> <目标位置>
参数 描述
-b 若需覆盖文件,则覆盖前先行备份
-f 如果目标文件已经存在,不会询问而直接覆盖
-i 若目标文件已经存在时,就会询问是否覆盖
-u 若目标文件已经存在,且源文件比较新,才会更新
-t 该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后

重命名文件(mv)

1
mv <旧名称> <新名称>
  • 批量重命名:

    1
    2
    3
    4
    5
    # 批量将这5个后缀为.txt的文本文件重命名为以.c为后缀的文件:
    rename 's/\.txt/\.c/' *.txt

    # 批量将这5个文件,文件名和后缀改为大写:
    rename 'y/a-z/A-Z/' *.c

vim基础操作

进入vim编辑(普通模式)

1
vim <file>
  • 游标操作:在普通模式下使用方向键或者hjkl键移动游标

    按键 说明
    h
    l 右(小写 L)
    j
    k
    w 移动到下一个单词
    b 移动到上一个单词
  • 快速操作:

    命令 说明
    x 删除游标所在的字符
    X 删除游标所在前一个字符
    Delete x
    dd 删除整行
    dw 删除一个单词(不适用中文)
    d$D 删除至行尾
    d^ 删除至行首
    dG 删除到文档结尾处
    d1G 删至文档首部

写入内容(插入模式)

  • 进入:输入i (insert/插入)或者a(append/追加)

  • 退出:按下Esc回到普通模式

  • 更多命令:

    命令 说明
    i 在当前光标处进行编辑
    I 在行首插入
    A 在行末插入
    a 在光标后插入编辑
    o 在当前行后插入一个新行
    O 在当前行前插入一个新行
    cw 替换从光标所在位置后到一个单词结尾的字符

命令模式

  • 在普通模式下输入:进入命令模式

  • 退出vim:

    命令 说明
    :q! 强制退出,不保存
    :q 退出
    :wq! 强制保存并退出
    :w <文件路径> 另存为
    :saveas 文件路径 另存为
    :x 保存并退出
    :wq 保存并退出
  • 或者使用Shift + Z Z(按两次z)保存并退出vim

bash操作

定义变量

1
declare tmp

变量赋值

1
tmp=shiyanlou

读取变量

1
echo $tmp

新建子终端

1
bash

时间测量(time)

  • time 命令常用于测量一个命令的运行时间,包括实际使用时间(real time)、用户态使用时间(the process spent in user mode)、内核态使用时间(the process spent in kernel mode)。

    1
    time [command]
  • 测量 date 命令运行的时间

    1
    time date

    img

    从上面的结果可以到:实际运行时间为 0.005s,用户 cpu 时间为 0.001s,系统 cpu 时间为 0.001s。

    其中,用户 CPU 时间和系统 CPU 时间之和为 CPU 时间,即命令占用 CPU 执行的时间总和。实际时间要大于 CPU 时间,因为 Linux 是多任务操作系统,往往在执行一条命令时,系统还要处理其它任务。

搜索操作

where

  • 只能检索二进制文件(-b)、man帮助文件(-m)和源代码文件(-s)

    1
    where find

which

  • 在 PATH 变量指定的路径中搜索可执行文件的所在位置,一般用来确认系统中是否安装了指定的软件。

    1
    which <可执行文件名称>

whereis

  • 通过/var/lib/mlocate/mlocate.db数据库查找,主要用于定位可执行文件、源代码文件和帮助文件在文件系统中的位置。whereis 命令还具有搜索源代码、指定备用搜索路径和搜索不寻常项的功能。

    1
    whereis [option] <file>
    参数 描述
    -b 定位可执行文件
    -m 定位帮助文件
    -s 定位源代码文件
    -u 搜索默认路径下除可执行文件、源代码文件和帮助文件以外的其它文件
    -B 指定搜索可执行文件的路径
    -M 指定搜索帮助文件的路径
    -S 指定搜索源代码文件的路径

locate

  • locate 命令跟 whereis 命令类似,且它们使用的是相同的数据库。但 whereis 命令只能搜索可执行文件、联机帮助文件和源代码文件,如果要获得更全面的搜索结果,可以使用 locate 命令。

    1
    locate [option] <搜索字符串>
    参数 描述
    -q 安静模式,不会显示任何错误讯息
    -n 至多显示 n 个输出
    -r 使用正则表达式做寻找的条件
    -V 显示版本信息
  • 安装并立即更新一次数据库:

    1
    2
    3
    sudo apt-get update
    sudo apt-get install locate
    sudo updatedb

find

  • 主要作用是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。

    1
    find [path] [option] [动作表达式]

    默认路径是当前目录,默认表达式为 -print。

    表达式 描述
    -print 将匹配的文件输出到标准输出
    -exec 对匹配的文件执行该参数所给出的 shell 命令
    -name 按照文件名查找文件
    -type 查找某一类型的文件
    -prune 不在当前指定的目录中查找,如果同时使用 -depth 选项,那么 -prune 将被忽略
    -user 按照文件属主来查找文件
    -group 按照文件所属的组来查找文件
    -mtime -n +n 按照文件的更改时间来查找文件,-n 表示文件更改时间距现在小于 n 天,+n 表示文件更改时间距现在大于 n 天
    1
    2
    3
    4
    5
    6
    7
    8
    # 打印当前目录下的文件目录列表
    find . -print
    # 打印当前目录下所有以.txt 结尾的文件名
    find . -name "*.txt" -print
    # 打印当前目录下所有以.txt 或.pdf 结尾的文件名
    find . \( -name "*.pdf" -or -name "*.txt" \)
    # 打印当前目录下所有不以.txt 结尾的文件名
    find . ! -name "*.txt"

打包与解压

zip

打包

  • 将test目录打包

    1
    zip -r -q -o test.zip test

    将目录 /home/shiyanlou/Desktop 打包成一个文件,-r参数表示递归打包包含子目录的全部内容,-q 参数表示安静模式,即不向屏幕输出信息,-o表示输出文件,需在其后紧跟打包输出文件名。

    image-20231221181820531

  • 加密打包:-e

    1
    zip -r -e -q -o test.zip test

    image-20231221182845455

  • 适配Windows换行:-l,将 LF 转换为 CR+LF

    1
    zip -r -l -o test.zip test

解压

1
unzip <zip_file>
  • 安静模式:-q,不存在的目录会自动创建

    1
    unzip -q test.zip -d test
  • 仅查看内容:-l

    1
    unzip -l test.zip
  • 指定编码:-O

    1
    unzip -O GBK <中文压缩文件.zip>

tar

打包

  • 打包为.tar

    1
    tar -Pcf test.tar test

    image-20231221183411352

    -P 保留绝对路径符,-c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后

  • 打包为.tar.gz-z

    1
    tar -czf test.tar.gz test

    image-20231221183533959

  • 更多格式:

    压缩文件格式 参数
    *.tar.gz -z
    *.tar.xz -J
    *tar.bz2 -j

解压

  • 解压.tar

    1
    tar -xf shiyanlou.tar [-C <tardir>]

    image-20231221183711774

    解包一个文件(-x 参数)到指定路径的已存在目录(-C 参数)

  • 解压.tar.gz-z

    1
    tar -xzf shiyanlou.tar.gz

    image-20231221183815734

不解压查看

1
tar -tf test.tar

帮助操作

help

  • 只能用于显示内建命令的帮助信息(仅能在bash中使用)

    1
    help ls
  • 通常外部命令都有--help参数

    1
    ls --help

man

  • 得到的内容比用 help 更多更详细,而且man没有内建与外部命令的区分

    1
    man ls

    按下Q退出查看

info

  • 安装:

    1
    2
    sudo apt-get update
    sudo apt-get install info
    1
    info ls

    按下Q退出查看

语句控制

多语句执行

1
语句1; 语句2 ;语句3

条件执行(&& ||)

  • &&:如果前面的命令执行结果(不是表示终端输出的内容,而是表示命令执行状态的结果)返回0则执行后面的语句,否则不执行

    1
    语句A && 语句B
  • ||:和&&相反,返回1则执行后面的语句

管道(|)

  • 将前一语句的输出作为下一语句的输入

    1
    ls -al /etc | less

文本处理

标准输出处理(xargs)

  • xargs 命令可以从标准输入接收输入,并把输入转换为一个特定的参数列表。

    1
    command | xargs [option] [command]
    参数 描述
    -n 指定每行最大的参数数量
    -d 指定分隔符
  • 将多行输入转换为单行输出

    1
    cat a.txt | xargs

    img

  • 将单行输入转换为多行输出

    1
    echo "1 2 3 4 5 6 7" | xargs -n 3

    img

  • 将单行输入转换为多行输出,指定分隔符为 i

    1
    cat b.txt | xargs -d i -n 3

    img

  • 查找当前目录下所有 c 代码文件,统计总行数

    1
    find . -type f -name "*.c" | xargs wc -l

    img

文本切分(cut)

  • cut 命令是一个将文本按列进行切分的小工具,它可以指定分隔每列的定界符。

    1
    cut [option] <file>
    参数 描述
    -b 以字节为单位进行分割
    -c 以字符为单位进行分割
    -d 自定义分隔符,默认为制表符
    -f 自定义字段
    --complement 抽取整个文本行,除了那些由 -c-f 选项指定的文本
  • 取出/etc/passwd文件中以:为分隔符的第1个字段和第6个字段

    1
    cut /etc/passwd -d ':' -f 1,6

    image-20231217204359115

  • 取指定数量字符

    1
    2
    3
    4
    5
    6
    7
    8
    # 前五个(包含第五个)
    cut /etc/passwd -c -5
    # 前五个之后的(包含第五个)
    cut /etc/passwd -c 5-
    # 第五个
    cut /etc/passwd -c 5
    # 2到5之间的(包含第五个)
    cut /etc/passwd -c 2-5

匹配字符串(grep)

  • grep 用来找到文件中的匹配文本,并且能够接受正则表达式和通配符,同时可以用多个 grep 命令选项来生成各种格式的输出。

  • grep 通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回 0,如果搜索不成功,则返回 1,如果搜索的文件不存在,则返回 2

    1
    grep [option] <pattern> <file>
    参数 描述
    -c 计算找到‘搜寻字符串’(即 pattern)的次数
    -i 忽略大小写的不同,所以大小写视为相同
    -n 输出行号
    -v 反向选择,打印不匹配的行
    -r 递归搜索
    --color=auto 将找到的关键词部分加上颜色显示
  • /etc/passwd文件中出现 root 的行取出来,关键词部分加上颜色显示

    1
    2
    grep "root" /etc/passwd --color=auto
    cat /etc/passwd | grep "root" --color=auto

    image-20231219124625381

  • /etc/passwd文件中没有出现 root 和 nologin 的行取出来

    1
    grep -v "root" /etc/passwd | grep -v "nologin"

    image-20231219124700264

内容统计(wc)

  • wc 命令是一个统计的工具,主要用来显示文件所包含的行、字和字节数。

    1
    wc [option] <file>
    参数 描述
    -c 统计字节数
    -l 统计行数
    -m 统计字符数,这个标志不能与 -c 标志一起使用
    -w 统计字数,一个字被定义为由空白、跳格或换行字符分隔的字符串
    -L 打印最长行的长度
  • 统计文件数

    1
    2
    # 统计/bin目录下的命令个数,即文件个数
    ls /bin | wc -l

排序(sort)

1
sort [option] <file>
参数 描述
-n 基于字符串的长度来排序,使用此选项允许根据数字值排序,而不是字母值
-k 指定排序关键字
-b 默认情况下,对整行进行排序,从每行的第一个字符开始。这个选项导致 sort 程序忽略每行开头的空格,从第一个非空白字符开始排序
-m 只合并多个输入文件
-r 按相反顺序排序,结果按照降序排列,而不是升序
-t 自定义分隔符,默认为制表符
  • 列出/usr/share/目录下使用空间最多的前 10 个目录文件

    1
    du -s /usr/share/* | sort -nr | head -10

    image-20231219130029985

  • 对 ls 命令输出信息中的空间使用大小字段进行排序

    1
    ls -l /usr/bin/ | sort -nr -k 5 | head -10

    image-20231219130116293

去重(uniq)

  • uniq 从标准输入或单个文件名参数接受数据有序列表,默认情况下,从数据列表中删除任何重复行。

  • uniq 只能用于排过序的数据输入,因此,uniq 要么使用管道,要么将排过序的文件作为输入,并总是以这种方式与 sort 命令结合起来使用。

    1
    uniq [option] <file>
    参数 描述
    -c 在每行前加上表示相应行目出现次数的前缀编号
    -d 只输出重复的行
    -u 只显示唯一的行
    -D 显示所有重复的行
    -f 比较时跳过前 n 列
    -i 在比较的时候不区分大小写
    -s 比较时跳过前 n 个字符
    -w 对每行第 n 个字符以后的内容不作对照
  • 找出/bin目录和/usr/bin目录下所有相同的命令

    1
    ls /bin /usr/bin | sort | uniq -d

    img

  • 现有文件内容如下,红色方框里的内容表示区号,现在要统计出各个区号的总人数

    img

    实现思路:首先按区号对每行信息排序,然后使用 uniq 命令对区号进行重复行统计。使用命令如下:

    1
    sort -k 4.1n,4.1n student.txt | uniq -c -f 3 -w 2

    img

更改字符(tr)

  • tr 命令常被用来更改字符,我们可以把它看作是一种基于字符的查找和替换操作。换字是一种把字符从一个字母转换为另一个字母的过程,tr 可以从标准输入中替换、缩减和删除字符,并将结果写到标准输出。

    1
    tr [option] SET1 [SET2]
    选项 说明
    -d 删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配
    -s 去除set1指定的在输入文本中连续并重复的字符
  • 将输入的字符大写转换为小写

    1
    echo 'THIS IS SHIYANLOU!' | tr 'A-Z' 'a-z'

    image-20231219125549403

  • 将输入的字符中的数字删除

    1
    echo 'THIS 123 IS S1HIY5ANLOU!' | tr -d '0-9'

    image-20231219125607524

Tab替换空格(col)

  • col命令可以将Tab换成对等数量的空格键,或反转这个操作

    1
    col [option]
    选项 说明
    -x Tab转换为空格
    -h 将空格转换为Tab(默认选项)
    1
    2
    3
    4
    # 查看/etc/protocols中的不可见字符,可以看到很多^I,这其实就是Tab转义成可见字符的符号
    cat -A /etc/protocols
    # 使用 col -x将/etc/protocols中的Tab转换为空格,然后再使用cat查看,发现^I不见了
    cat /etc/protocols | col -x | cat -A

合并字段(join)

  • join将两个文件中指定栏位相同的行连接起来,即按照两个文件中共同拥有的某一列,将对应的行拼接成一行

    1
    join [option] <file1> <file2>
    选项 说明
    -t 指定分隔符,默认为Tab
    -i 忽略大小写的差异
    -1(数字1) 指明第一个文件要用哪个字段来对比,默认对比第一个字段
    -2 指明第二个文件要用哪个字段来对比,默认对比第一个字段
  • 将两个文件中的第一个字段作为匹配字段,连接两个文件

    1
    join a.txt b.txt

    img

  • 指定两个文件的第三个字段为匹配字段,连接两个文件

    1
    join -1 3 -2 3 c.txt d.txt

    此处输入图片的描述

简单合并文件(paste)

  • paste 命令的功能正好与 cut 相反。它会添加一个或多个文本列到文件中,而不是从文件中抽取文本列。它通过读取多个文件,然后把每个文件中的字段整合成单个文本流,输入到标准输出。

    1
    paste [option] <file>...
    参数 描述
    -s 将每个文件合并成行而不是按行粘贴
    -d 自定义分隔符,默认为制表符
  • student.txttelphone.txt文件中的内容按列拼接

    1
    paste student.txt telphone.txt

    img

  • student.txttelphone.txt文件中的内容按列拼接,指定分隔符为:

    1
    paste student.txt telphone.txt -d ':'

    img

  • student.txttelphone.txt文件中的内容各自拼接成一行

    1
    paste -s student.txt telphone.txt

    img

比较文本文件(comm)

  • comm 命令将逐行比较已经排序的两个文件。显示结果包括 3 列:第 1 列为只在第一个文件中找到的行,第 2 列为只在第二个文件中找到的行,第 3 列为两个文件的共有行。

    1
    comm [option] <file1> <file2>
    参数 描述
    -1(数字1) 不输出文件 1 特有的行
    -2 不输出文件 2 特有的行
    -3 不输出两个文件共有的行
  • 比较file1.txtfile2.txt两个文件的内容

    1
    comm file1.txt file2.txt

    img

  • 比较file1.txtfile2.txt两个文件的内容,只显示两个文件共有的内容

    1
    comm -12 file1.txt file2.txt

    img

监测文件差异(diff)

  • 类似 comm 命令,diff 命令被用来监测文件之间的差异。然而,diff 是一款更加复杂的工具,它支持许多输出格式,并且一次能处理许多文本文件。diff 能够递归地检查源码目录,通常称之为源码树。diff 程序的一个常见用例是创建 diff 文件或者补丁,它会被其它程序使用,例如 patch 程序,来把文件从一个版本转换为另一个版本。

    1
    diff [option] <file>
    参数 描述
    -c 上下文模式,显示全部内文,并标出不同之处
    -u 统一模式,以合并的方式来显示文件内容的不同
    -a 只会逐行比较文本文件
    -N 在比较目录时,若文件 A 仅出现在某个目录中,预设会显示:Only in 目录。若使用 -N 参数,则 diff 会将文件 A 与一个空白的文件比较
    -r 递归比较目录下的文件
  • 显示file1.txtfile2.txt两个文件的差异

    1
    diff file1.txt file2.txt

    img

    上面结果显示中的“1d0”表示file1.txt文件比file2.txt文件多了第一行,“4c3,4”表示file1.txt文件的第四行和file2.txt文件的第三、四行不同。

    diff 的 normal 显示格式有三种提示:

    • a - add
    • c - change
    • d - delete
  • 从上面例一的显示结果可以知道,file1.txtfile2.txt两个文件的差异不易直观看出,这时可以使用上下文模式显示

    1
    diff  -c file1.txt  file2.txt

    img

    + 添加行,这一行将会出现在第二个文件内,而不是第一个文件内

    - 删除行,这一行将会出现在第一个文件中,而不是第二个文件内

    ! 更改行,将会显示某个文本行的两个版本,每个版本会出现在更改组的各自部分

  • 查看file1.txtfile2.txt两个文件的差异,使用统一模式显示

    1
    diff -u file1.txt file2.txt

    img

文本中应用更改(patch)

  • patch 命令被用来把更改应用到文本文件中。它接受从 diff 程序的输出,并且通常被用来把较老的文件版本转变为较新的文件版本

    1
    patch [option] <file>
    参数 描述
    -p num 忽略几层文件夹
    -E 如果发现了空文件,那么就删除它
    -R 取消打过的补丁
  • 生成file1.txtfile2.txt的 diff 文件,然后应用 patch 命令更新file1.txt文件

    1
    2
    diff  -Naur file1.txt  file2.txt > patchdiff.txt
    patch < patchdiff.txt

    img

  • 取消上面打过的补丁

    1
    patch -R < patchdiff.txt

    img

空间管理

查看目录结构(tree)

1
tree <dir>

安装方式:

1
2
sudo apt-get update
sudo apt-get install tree

磁盘占用情况(df)

  • df (disk free)命令的功能是用来检查 linux 服务器的文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

    1
    df [option] <file>
    参数 描述
    -a 全部文件系统列表
    -h 方便阅读方式显示
    -i 显示 inode 信息
    -T 文件系统类型
    -t<文件系统类型> 只显示选定文件系统的磁盘信息
    -x<文件系统类型> 不显示选定文件系统的磁盘信息
  • 显示磁盘使用情况

    1
    df

    img

  • 以 inode 模式来显示磁盘使用情况

    1
    df -i

    img

  • 列出文件系统的类型

    1
    df -T

    img

  • 显示指定类型磁盘

    1
    df -t ext4

    img

查看使用空间(du)

  • du(disk usage)命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看。

    1
    du [option] <file>
    参数 描述
    -a 显示目录中所有文件的大小。
    -b 显示目录或文件大小时,以 byte 为单位。
    -c 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
    -k 以 KB(1024bytes)为单位输出。
    -m 以 MB 为单位输出。
    -s 仅显示总计,只列出最后加总的值。
    -h 以 K,M,G 为单位,提高信息的可读性。
  • 显示指定文件所占空间,以方便阅读的格式显示

    1
    du -h file1.txt

    img

  • 显示指定目录所占空间,以方便阅读的格式显示

    1
    du -h Desktop

    img

  • 显示几个文件或目录各自占用磁盘空间的大小,并且统计总和

    1
    du -ch file1.txt file2.txt

    img

  • 按照空间大小逆序排序显示

    1
    du -h | sort -nr | head -10

    img