新手必须掌握的 Linux 命令

Shell

  1. 主流 Linux 默认终端是 Bash,优点如下:
    • 命令执行历史;
    • 命令或参数 Tab 补全;
    • 批处理脚本;
    • 环境变量功能。

帮助命令

  1. 标准格式:命令名称 [命令参数] [命令对象]

    • 长格式:man --help
    • 短格式:man -h
  2. 查看命令帮助 man 命令,如man pingman man

常用工作命令

echo

  • 格式:echo [字符串 | $变量]
  • 作用:输入信息

    案例echo
    1
    2
    3
    echo string
    echo $SHELL
    echo "content" >> file

reboot

  • 格式:reboot
  • 作用:重启系统

    案例reboot
    1
    2
    # 涉及硬件管理权限,需要 root 权限
    reboot

poweroff

  • 格式:poweroff
  • 作用:关闭系统

    案例poweroff
    1
    2
    # 涉及硬件管理权限,需要 root 权限
    poweroff

date

  • 格式:date [选项] [+指定的格式]
  • 作用:查看时间
  • 参数:
序号参数作用
1%tTab
2%H24时制
3%I12时制
4%M分钟
5%S
6%j今年中第几天
案例date
1
2
3
4
5
6
7
8
# 2018年 9月 4日 星期二 22时28分33秒 CST
date
# 2018-09-04 22:29:13
date "+%Y-%m-%d %H:%M:%S"
# 设置系统时间
date -s "20170901 8:30:00"
# 查看今天是当年第几天
date "+%j"

wget

  • 格式:wget [参数] 下载地址
  • 作用:下载网络文件
  • 参数:
序号参数作用
1-b后台下载模式
2-P下载到指定目录
3-t最大重试次数
4-c断点续传
5-p下载页面所有资源
6-r递归下载
案例wget
1
2
wget http://www.linuxprobe.com/docs/LinuxProbe.pdf
wget -r -p http://www.linuxprobe.com

ps

  • 格式:ps [参数]
  • 作用:查看系统进程状态
  • 参数:
序号参数作用
1-a显示包含其他用户进程在内的所有进程
2-u用户及其他详细信息
3-x显示没有控制终端的进程

进程状态:

序号状态说明
1R(运行)进程正在运行或处于运行队列
2S(中断)进程休眠中,等待合适条件唤醒
3D(不可终止)进程不响应系统异步信号,kii 命令也无法终端
4Z(僵死)进程终止,但是描述符依然存在,直至父进程调用 wat4() 后释放
5T(停止)进程收到停止信号后终止运行
案例ps
1
2
# ps 支持系统繁多,所以参数非常多
ps -a

top

  • 格式:top
  • 作用:动态地监视进程活动和系统负载

    案例top
    1
    2
    # load avg,三个数值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小意味着负载越低
    top

pidof

  • 格式:pidof [参数] [服务名称]
  • 作用:查询某个指定服务进程的 PID 值

    案例pidof
    1
    2
    # pid
    pidof sshd

kill

  • 格式:kill [参数] [进程 PID]
  • 作用:终止某个指定 PID 的服务进程

    案例kill
    1
    kill -9 xxx

killall

  • 格式:killall [参数] [进程 PID]
  • 作用:终止某个指定名称的服务所对应的全部进程

    案例killall
    1
    2
    # 大型的软件会多个进程协同为用户提供服务,逐个结束会很麻烦。
    killall httpd

系统状态监测命令

ifconfig

  • 格式:ifconfig [网络参数] [参数]
  • 作用:获取网卡配置与网络状态

    案例ifconfig
    1
    ifconfig

uname

  • 格式:uname [-a]
  • 作用:查看系统内核与系统版本

    案例uname
    1
    2
    3
    # Linux centos-linux.shared 3.10.0-862.el7.x86_64 
    # #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    uname -a

uptime

  • 格式:uptime
  • 作用:查看系统敷在信息,显示当前系统时间、已运行时间、启用终端数、平均负载信息

    案例uptime
    1
    2
    # 01:08:44 up 15:49,  4 users,  load average: 0.08, 0.04, 0.05
    uptime

free

  • 格式:free [-h]
  • 作用:查看当前系统中内存的使用量信息

    案例free
    1
    2
    3
    4
    #        total   used   free   shared  buff/cache   available
    # Mem: 1.8G 1.2G 111M 4.5M 480M 354M
    # Swap: 2.0G 48M 2.0G
    free -h

who

  • 格式:who [参数]
  • 作用:查看当前登入主机的用户终端信息

    案例who
    1
    2
    3
    # root     tty1         2018-08-17 11:55
    # root pts/0 2018-08-20 23:32 (10.*.*.2)
    who

last

  • 格式:last [参数]
  • 作用:查看所有系统的登录记录

    案例last
    1
    2
    3
    4
    5
    # root     pts/0        10.*.*.2         Fri Aug 17 11:59 - 11:59  (00:00)
    # root pts/0 10.*.*.2 Fri Aug 17 11:57 - 11:58 (00:00)
    # root tty1 Fri Aug 17 11:55 still logged in
    # reboot system boot 3.10.0-862.el7.x Fri Aug 17 11:55 - 01:15 (3+13:20)
    last

history

  • 格式:history [-c]
  • 作用:用于显示历史执行过的命令
  • 注意

    • 可以用!数字的命令格式重复执行某一次的命令记录,从而避免了重复输入较长
      命令的麻烦。

      案例history
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      # 1  history
      # 2 vi /etc/profile
      # 3 sosreport
      # ……
      history

      # !数字 重复执行,!1 同 history
      !1

      # -c 参数会清空所有的历史记录
      # 默认记录1000条,如果不够的,修改 `/etc/profile` 文件中的 `HISTSIZE`
      history -c

sosreport

  • 格式:sosreport
  • 作用:收集系统配置以及架构信息,并输出诊断文档,格式为sosreport
  • 注意:精简化安装的 Centos 7.5 中没有该指令,请执行 yum -y install sos
  • 参考:github sos

    案例sosreport
    1
    sosreport

工作目录切换命令

pwd

  • 格式:pwd [选项]
  • 作用:显示用户当前所处的工作目录

    案例pwd
    1
    2
    # /root
    pwd

cd

  • 格式:cd [选项]
  • 作用:切换工作路径

    案例cd
    1
    cd ~

ls

  • 格式:ls [选项]文件
  • 作用:显示目录中的文件信息

    案例ls
    1
    2
    ls -ld /etc
    ls -la

文本文件编辑命令

cat

  • 格式:cat [选项]文件
  • 作用:用于查看内容较少的纯文本

    案例cat
    1
    2
    # -n 参数显示行号
    cat -n xxx.txt

more

  • 格式:more [选项]文件
  • 作用:用于查看内容较多的纯文本,会提示百分比

    案例more
    1
    more xxx.txt
  • 格式:head [选项]文件
  • 作用:用于查看纯文本文档的前 N 行

    案例head
    1
    2
    # -n 表示想查看的行数
    head -n 20 xxx.txt

tail

  • 格式:tail [选项]文件
  • 作用:用于查看纯文本文档的后 N 行,或是持续刷新内容
  • 备注:tail 是尾巴的意思

    案例tail
    1
    2
    3
    4
    5
    # -f 显示文件最新追加的内容
    tail -f xxx.txt

    # -n 显示文件后 20 行的代码
    tail -n 20 xxx.txt

tr

  • 格式:tr [原始字符][目标字符]
  • 作用:批量替换文本中的一些词汇

    案例tr
    1
    2
    3
    # 先用 cat 读出待处理文本,然后通过管道符号传递给 tr 命令进行批量操作。
    # 将小写的英文字母替换为大写的
    cat xxx.txt | tr [a-z] [A-Z]

wc

  • 格式:wc [参数][文本]
  • 作用:w(ord) c(ount),统计指定文本的行数、字数、字节数
  • 参数:
序号参数作用
1-l只显示行数
2-w只显示单词数
3-c只显示字节数
案例wc
1
2
3
4
5
6
7
8
# 24 /etc/passwd
wc -l /etc/passwd

# 34 /etc/passwd
wc -w /etc/passwd

# 1089 /etc/passwd
wc -c /etc/passwd

stat

  • 格式:stat [文件名称]
  • 作用:查看文件的具体纯属信息和时间信息

    案例stat
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 文件:"/etc/passwd"
    # 大小:1089 块:8 IO 块:4096 普通文件
    # 设备:fd00h/64768d Inode:68774316 硬链接:1
    # 权限:(0644/-rw-r--r--) Uid:(0/root) Gid:(0/root)
    # 环境:system_u:object_r:passwd_file_t:s0
    #
    # 最近访问:2018-08-20 11:44:02.732356792 +0800
    # 最近更改:2018-08-20 11:44:02.305369253 +0800
    # 最近改动:2018-08-20 11:44:02.306369224 +0800
    # 创建时间:-
    stat /etc/passwd

cut

  • 格式:cut [参数] 文本
  • 作用:按列提取文本字符

    案例cut
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 按行提取
    # root:x:0:0:root:/root:/bin/bash
    # bin:x:1:1:bin:/bin:/sbin/nologin
    head -n 2 /etc/passwd

    # 按列提取
    # root
    # bin
    # daemon
    # ……
    cut -d: -f1 /etc/passwd

diff

  • 格式:diff [参数] 文件
  • 作用:用于比较多个文本文件的差异
  • 注意:笔者虚拟机上(Centos 7.5 精简安装)没有成功,读者自行测试(2018-09-09 16:14:18)

    案例diff
    1
    2
    3
    4
    5
    # 直接显示比较后的结果,判断文件是否相同
    diff --brief diff_A.txt diff_B.txt

    # 查看内容对比的具体不同
    diff -c diff_A.txt diff_B.txt

文件目录管理命令

touch

  • 格式:touch [选项]文件名
  • 作用:创建空白文件或设置文件的时间
  • 参数:
序号参数作用
1-a仅修改‘读取时间’ (atime)
2-m仅修改‘修改时间’ (mtime)
3-d同时修改 atime 和 mtime
案例touch
1
2
3
4
5
6
touch a.txt
# -rw-r--r--. 1 root root 0 8月 21 02:55 a.txt
ls -l
touch -d "2017-05-04 15:44" a.txt
# -rw-r--r--. 1 root root 0 5月 4 2017 a.txt
ls -l

mkdir

  • 格式:mkdir [选项]目录
  • 作用:创建空白目录

    案例mkdir
    1
    2
    3
    mkdir path
    # -p 递归创建具有嵌套层级关系的文件目录
    mkdir -p pathA/pathB/pathC

cp

  • 格式:cp [选项] 源文件 目标文件
  • 作用:复制文件或是目录
  • 注意
    • 目标是目录,会将文件复制到该目录下
    • 目标是普通文件,询问是否覆盖
    • 目标不存在,正常复制操作
  • 参数:
序号参数作用
1-p保留原始文件属性
2-d若对象为 链接文件,则保留 链接文件 的属性
3-r递归持续复制(目录复制)
4-i如果目标文件存在则询问是否覆盖
5-a相当于 -pdr
案例cp
1
2
3
4
5
# 复制 a.txt 到上一层目录
cp a.txt ../

# 迭代复制目录 a 中的内容,且不询问是否覆盖
\cp -r a/ ../

mv

  • 格式:mv [选项] 源文件 [目标路径|目标文件名]
  • 作用:剪切文件或是目录,可用于重命名操作

    案例mv
    1
    2
    # 重命名
    mv a.txt b.txt

rm

  • 格式:rm [选项] 源文件 [目标路径|目标文件名]
  • 作用:用于删除文件或目录

    案例rm
    1
    2
    3
    4
    # 删除文件
    rm -f a.txt
    # 删除目录
    rm -rf a/

dd

  • 格式:dd [参数]
  • 作用:按照制定大小和个数的数据块来复制或转换文件
  • 注意
    • Linux 下存在一个文件/dev/zero,本身不占用存储空间,却可以作为 dd 的输入文件,来生成指定大小的文件
  • 参数:
序号参数作用
1if输入的文件名称
2of输出的文件名称
3bs设置块的大小
4count设置块的个数
案例一 · 创建文件dd
1
2
3
4
5
6
7
# 记录了10+0 的读入
# 记录了10+0 的写出
# 83886080字节(84 MB)已复制,0.056487 秒,1.5 GB/秒
dd if=/dev/zero of=10_8_file count=10 bs=8M

# -rw-r--r--. 1 root root 80M 8月 21 03:16 10_8_file
ls -lh
案例二 · 封装 iso 镜像dd
1
dd if=/dev/cdrom of=xxx.iso

file

  • 格式:file 文件名
  • 作用:用于查看文件类型

    案例file
    1
    2
    3
    4
    5
    # anaconda-ks.cfg: ASCII text
    file anaconda-ks.cfg

    # /dev/cdrom: symbolic link to `sr0'
    file /dev/cdrom

打包压缩与搜索命令

tar

  • 格式:tar [选项] [文件|目录]
  • 作用:对文件或目录进行压缩或解压
  • 注意
    • .tar.tar.gz.tar.bz2 格式都是 tar 命令打出的
    • 参数-c-x 不能同时使用
    • 参数-f 需放置在所有参数的最后
    • 常用压缩:tar -czvf file.tar.gz
    • 常用解压:tar -xzvf file.tar.gz
  • 参数:
序号参数作用
1-c创建压缩文件
2-x解压缩文件
3-t查看压缩包内有哪些文件
4-z使用 Gzip 压缩或解压
5-j使用 bzip2 压缩或解压
6-v显示压缩或解压的郭晨
7-f目标文件名
8-p保留原始的权限与属性
9-P使用据对路径来压缩
10C指定解压到的目录
案例tar
1
2
3
4
# 压缩
tar -czvf etc.tar.gz /etc/
# 解压,-C 执行解压到的路径
tar -czvf etc.tar.gz -C ./etc/

grep

  • 格式:grep [选项] 文件
  • 作用:在文本中执行关键词搜索,并显示匹配的结果
  • 注意
    • 最常用的两个参数-n-v
  • 参数:
序号参数作用
1-b将可执行(binary)文件作为文本(text)文件搜索
2-c显示找到的行数
3-i忽略大小写
4-n显示行号
5-v反向选择,列出没有关键词的行
案例grep
1
2
3
4
5
# 2:bin:x:1:1:bin:/bin:/sbin/nologin
# 3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 4:adm:x:3:4:adm:/var/adm:/sbin/nologin
# ……
grep /sbin/nologin /etc/passwd

find

  • 格式:find [查找路径] 条件 操作
  • 作用:在文本中执行关键词搜索,并显示匹配的结果
  • 注意
    • Linux 中一切皆文件,也就是说,一般的搜索工作都是 find 完成的
  • 参数:
序号参数作用
1-name匹配名称
2-perm匹配权重(mode 完全匹配,-mode 包含即可)
3-user匹配所有者
4-group匹配所有组
5-mtime ±n匹配修改内容的时间
(-n天以内,+n天以前)
6-atime ±n匹配日访问文件的时间
(-n天以内,+n天以前)
7-ctime ±n匹配修改文件权限的时间
(-n天以内,+n天以前)
8-nouser匹配无所有者的文件
9-nogroup匹配无所有组的文件
10-newer f1 !f2匹配比文件 f1 新,但是比文件 f2 旧的文件
11–type
/b/d/c/p/l/f
匹配文件的类型
(字母依次表示:设备、目录、字符设备、管道、链接文件、文本文件)
12-size ±n KB匹配文件大小
(+50KB表示超过 50KB 的文件,-50KB 表示小于 50KB 的文件)
13-prune目录忽略
14-exec ··· {}\;进一步处理搜索结果的命令
案例一 · 普通搜索find
1
2
3
4
5
# 搜索 etc 目录下,名字包含 host 的文件
# /etc/host.conf
# /etc/hosts
# ……
find /etc -name "host*" -print
案例二 · 参数 -execfind
1
2
# 搜索 etc 目录下,名字包含 host 的文件,并存储结果
find /etc -name "host*" -exec cp -a {} /root/findresult/ \;

写在最后

版本内容时间
v1.0.01. 创建文档
2. 完成1.4章节前的笔记
2018-09-04 23:20:27
v1.0.11. 完成剩下的章节内容笔记
2. 修改错别字若干
3. 修改内容先后,调整板式
2018-09-09 17:31:46