文章最后会 post 上书本的笔记照片.
本章的内容虽然多, 基本都是书本原话, 但是笔记能精简的我都精简了, 无奈内容实在太多, 我怕太精简, 回过头来自己也看不懂...
文章主要内容:
认识 Shell
必须掌握的 Linux 命令(共 41 个命令):
执行查看帮助命令(1);
常用系统工作命令(10);
系统状态监测命令(8);
工作目录切换命令(3);
文本文件编辑命令(9);
文件目录管理命令(7);
打包压缩与搜索命令(3);
Shell
人与硬件并不能直接交互. Shell(也称为终端或壳)是一个命令行工具, 它充当人与内核 (硬件) 的翻译官.
许多主流 Linux 系统默认使用的终端是 Bash(Bourne-Again SHell)解释器. Bash 解释器作为命令行终端主要有以下优势:
通过上下方向键来调取过往执行过的 Linux 命令(↑↓);
命令或参数仅需输入前几位就可以用 Tab 键补全(并非任何时候任何参数都能自动补全);
具有强大的批处理脚本(ch04);
具有实用的环境变量功能(ch03 PATH).
必须掌握的 Linux 命令
常见命令执行格式: 命令名称 [命令参数] [命令对象]
命令名称, 命令参数, 命令对象之间要用空格键分隔.
命令对象: 一般是指要处理的文件, 目录, 用户等资源;
命令参数:
长格式(完整的选项名称), 例子: man --help
短格式(单个字母的缩写), 例子: man -h
如果一条命令中要使用多个参数, 则短格式之间可以合并, 且只需留一个 "-". 例子: ls -al
长格式参数不可与长格式或短格式参数合并, 但可以同时使用, 例子: ls --all -l = ls -al
执行查看帮助命令(1)
man 命令用于查看命令的帮助信息.
1 man ls #查看 ls 命令的帮助信息
执行后可以看到下图信息:
在 man 命令帮助信息界面中, 可以用下表的按键进行相应的操作.
按键 | 用处 |
空格键 | 向下翻一页 |
PaGe down | 向下翻一页 |
PaGe up | 向上翻一页 |
home | 直接前往首页 |
end | 直接前往尾页 |
/ | 从上至下搜索某个关键词,如 “/linux” |
? | 从下至上搜索某个关键词,如 “?linux” |
n | 定位到下一个搜索到的关键词 |
N | 定位到上一个搜索到的关键词 |
q | 退出帮助文档 |
man 命令帮助信息的结构以及意义:
结构名称 | 代表意义 |
NAME | 命令的名称 |
SYNOPSIS | 参数的大致使用方法 |
DESCRIPTION | 介绍说明 |
EXAMPLES | 演示(附带简单说明) |
OVERVIEW | 概述 |
DEFAULTS | 默认的功能 |
OPTIONS | 具体的可用选项(带介绍) |
ENVIRONMENT | 环境变量 |
FILES | 用到的文件 |
SEE ALSO | 相关的资料 |
HISTORY | 维护历史与联系方式 |
常用系统工作命令(10)
1.echo 命令: 用于在终端输出字符串或变量提取后的值.(变量一般字母全大写, 前面有 $ 符号)
- echo fuck you #输出 fuck you
- echo $SHELL #输出变量 SHELL 的值
2.date 命令: 用于显示及设置系统时间或日期. 格式: date [选项] [+ 指定格式]
- date "+%Y-%m-%d %H:%M:%S" #按照 "年 - 月 - 日 小时: 分钟: 秒" 的格式查看当前系统时间(%H 是 24 小时制,%I 是 12 小时制)
- date -s "20170901 8:30:00" #将当前时间设置为 2017 年 9 月 1 日 8 点 30 分
- date "+%j" #查看当前时间是当年中的第几天
3.reboot 命令: 重启系统(重启). 重启操作涉及硬件资源的管理权限, 默认只有 root 管理员才能执行.
4.poweroff 命令: 关闭系统(关机). 关机操作涉及硬件资源的管理权限, 默认只有 root 管理员才能执行.
5.wget 命令: 用于在终端下载网络文件. 格式: wget [参数] 下载地址
- wget https://www.linuxprobe.com/docs/LinuxProbe.pdf #下载指定位置的 PDF 文件
- wget -r -p https://www.linuxprobe.com #递归下载 www.linuxprobe.com 网站内所有页面数据以及文件
6.ps 命令: 用于查看系统中的进程状态. 格式: ps [参数].ps 命令使用参数时可以不加 "-" 号.
1 ps aux #-a 显示所有进程(包括其他用户的进程);-u 显示用户以及其他详细信息;-x 显示没有控制终端的进程
执行 ps aux 后, 相关标题的含义如下:
USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND |
进程的所有者 | 进程 ID 号 | 运算器占用率 | 内存占用率 | 虚拟内存使用量 (单位是 KB) | 占用的固定内存量 (单位是 KB) | 所在终端 | 进程状态 | 被启动的时间 | 实际使用 CPU 的时间 | 命令名称与参数 |
在 Linux 系统中, 有 5 种常见的进程状态, 分别为运行, 中断, 不可中断, 僵死与停止, 具体含义如下:
R(运行): 进程正在运行或在运行队列中等待.
S(中断): 进程处于休眠中, 当某个条件形成后或者接收到信号时, 则脱离该状态.
D(不可中断): 进程不响应系统异步信号, 即便用 kill 命令也不能将其中断.
Z(僵死): 进程已经终止, 但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放.
T(停止): 进程收到停止信号后停止运行.
7.top 命令: 用于动态地监视进程活动与系统负载等信息. 执行 top 后界面如下, q 退出.
top 命令执行结果的前 5 行为系统整体的统计信息. 具体含义如下:
第 1 行: 系统时间, 运行时间, 登录终端数, 系统负载(三个数值分别为 1 分钟, 5 分钟, 15 分钟内的平均值, 从右往左看数值越小意味着系统负载情况越来越低).
第 2 行: 进程总数, 运行中的进程数, 睡眠中的进程数, 停止的进程数, 僵死的进程数.
第 3 行: 用户占用资源百分比, 系统内核占用资源百分比, 改变过优先级的进程资源百分比, 空闲的资源百分比等. 其中数据均为 CPU 数据并以百分比格式显示, 例如 "98.4 id" 意味着有 98.4% 的 CPU 处理器资源处于空闲.
第 4 行: 物理内存总量, 内存使用量, 内存空闲量, 作为内核缓存的内存量.
第 5 行: 虚拟内存总量, 虚拟内存使用量, 虚拟内存空闲量, 已被提前加载的内存量.
8.pidof 命令: 用于查询某个指定服务进程的进程 ID 号(PID). 格式: pidof [参数] [服务名称]
1 pidof sshd #查看 sshd 服务的 PID
9.kill 命令: 用于终止某个指定 PID 的服务进程. 格式: kill [参数] [进程 PID]
1 kill 1707 #终止 PID 为 1707 的进程
10.killall 命令: 用于终止某个指定名称的服务所对应的全部进程. 格式: killall [参数] [服务名称]
一些服务程序会有多个进程协同为用户提供服务, 如果用 kill 命令一个一个终止进程会比较麻烦, killall 可以批量结束某个服务的所有进程.
1 killall httpd #结束 httpd 服务的所有进程
系统状态监测命令(8)
1.ifconfig 命令: 用于获取网卡配置与网络状态等信息. 格式: ifconfig [网卡名] [参数].
ifconfig 执行结果, 主要查看网卡名称 (enoXXXXXXXX),IP 地址, Mac 地址, 以及 RX(接收数据包) 与 TX(发送数据包)的个数和累计流量.
2.uname 命令: 用于查看系统内核与系统版本等信息. 格式: uname [参数].
在使用 uname 命令时, 一般会固定搭配上 - a 参数来完整地查看当前系统的内核名称, 主机名, 内核发行版本, 节点名, 系统时间, 硬件名称, 硬件平台, 处理器类型以及操作系统名称等信息.
1 uname -a #完整地查看系统内核与系统版本等信息
3.uptime 命令: 用于查看系统的负载信息.
uptime 命令显示的其实就是 top 命令的第一行. 系统负载值越低越好, 尽量不要长期超过 1, 在生产环境中不要超过 5.
4.free 命令: 用于显示当前系统中内存的使用量信息. 格式: free [参数].
1 free -h #以更人性化的方式输出当前内存的实时使用量信息(数值适当地以 MB 或 GB 显示)
free -h 输出信息标题意义:
内存总量 | 已用量 | 可用量 | 进程共享的内存量 | 磁盘缓存的内存量 | 缓存的内存量 |
total | used | free | shared | buffers | cached |
5.who 命令: 用于查看当前登入主机的用户终端信息. 格式: who [参数].
who 执行结果会显示出所有正在登录本机的用户的名称以及他们正在开启的终端信息.
6.last 命令: 用于查看所有系统的登录记录. 格式: last [参数].
注意! 使用 last 命令查出来的登录记录信息都是以日志文件的形式保存在系统中. 因此不能以 last 命令的输出信息而判断系统有无被恶意入侵! 因为黑客可以很容易地对内容进行篡改.
7.history 命令: 用于显示历史执行过的命令. 格式: history [-c].
history 能显示出当前用户在本地计算机中执行过的最近 1000 条命令记录. 历史命令会被保存到用户家目录的. bash_history 文件中. 可以自定义 / etc/profile 文件中 HISTSIZE 变量值来修改能显示历史记录的条数.
- history #显示最近显示历史执行过的命令
- !2 #使用 "! 编码数字" 的方式重复执行某一次命令
- history -c #清空所有命令历史记录
8.sosreport 命令: 用于收集系统配置及架构信息并输出诊断文档.
该命令用途是当系统出现问题, 需要联系技术支持人员时, 先通过该命令生成一份简单的诊断文档发送给技术支持人员, 如果是小问题, 他们就可以远程解决而不必大费周章亲自到现场.
工作目录切换命令(3)
工作目录指的就是用户当前在系统中所处的位置.
1.pwd 命令: 用于显示当前用户所处的工作目录. 格式: pwd [选项].
2.cd 命令: 用于切换工作路径. 格式: cd [路径].
- cd /etc #切换到 / etc 目录
- cd /bin #切换到 / bin 目录
- cd - #返回到上一次的目录(即 / etc)
- cd .. #返回到上一级的目录(即 / etc 的上一级, 即 /)
- cd ~linuxprobe #切换到用户 linuxprobe 的家目录
- cd ~ #切换到当前用户的家目录(其实直接 cd 就行)
3.ls 命令: 用于显示当前目录中的文件信息. 格式: ls [选项] [文件].
- ls -al #查看当前目录的所有文件 (包括隐藏文件) 的详细信息
- ls -ld /etc #查看 / etc 目录的详细信息
- ls -Zd anaconda-ks.cfg #查看文件或目录的详细信息以及 SELinux 安全上下文值
文本文件编辑命令(9)
1.cat 命令: 用于查看内容较少的纯文本文件. 格式; cat [选项] [文件].
1 cat -n anaconda-ks.cfg #查看文件 anaconda-ks.cfg 的内容, 并显示行号.
2.more 命令: 用于查看内容较多的纯文本文件. 该命令可以用空格键或回车键向下翻页, q 退出.
3.head 命令: 用于查看纯文本文件的前 N 行. 格式: head [选项] [文件].
1 head -n 10 anaconda-ks.cfg #查看文件 anaconda-ks.cfg 前 10 行的内容
4.tail 命令: 用于查看纯文本文件的后 N 行或持续刷新内容. 格式: tail [选项] [文件].
可以用 tail 命令的持续刷新文件内容的功能来实时查看日志文件最新信息.
1 tail -n 10 -f /var/log/messages #实时查看系统日志文件 / var/log/messages 的最新内容且仅显示后 10 行
5.tr 命令: 用于替换文本文件中的字符. 格式: tr [原始字符] [目标字符].
1 cat anaconda-ks.cfg | tr [a-z] [A-Z] #通过管道符把 cat 读取的文本内容传递给 tr 命令, 把文件内容的英文全部替换成大写
这种形式的替换只是在输出结果的替换, 原文件的内容不会变化.
6.wc 命令: 用于通机指定文本的行数, 字数, 字节数. 格式: wc [参数] 文本.
1 wc -lwc /etc/passwd #统计 / etc/passwd 文件的行数, 单词数和字节数. wc 命令不带参数时默认同时带有行数, 字数, 字节数.
7.stat 命令: 用于查看文件的具体存储信息和时间 (atime,mtime,ctime) 等信息. 格式: stat 文件名.
1 stat anaconda-ks.cfg #显示文件 anaconda-ks.cfg 的存储信息和时间信息
关于时间 atime,mtime,ctime:
Access: 最后一次访问文件内容的时间, 也叫 atime
Modify: 最后一次修改文件内容的时间, 也叫 mtime
Change: 最后一次修改文件属性和权限的时间, 也叫 ctime
8.cut 命令: 用于按 "列" 提取文本字符, 格式: cut [参数] 文本.
1 cut -d: -f1 /etc/passwd #以冒号为间隔符号, 提取文件的第一列内容
9.diff 命令: 用于比较两个文本文件的差异. 格式: diff [参数] 文件.
常用参数:
--brief: 确认两个文件是否不同, 如果不同则会输出 "differ". 短格式为 - q.
-c: 详细比较出两个文件的差异之处.
- diff -q a.txt b.txt #比较文件 a 与文件 b 是否不同
- diff -c a.txt b.txt #比较文件 a 与文件 b 并输出具体的不同之处
文件目录管理命令(7)
1.touch 命令: 用于创建空白文件或设置文件的时间. 格式: touch [选项] 文件.
常用参数:
-a 参数: 仅修改 "读取时间"(atime);
-m 参数: 仅修改 "修改时间"(mtime);
-d 参数: 同时修改 atime 和 mtime;
- touch test #创建一个名为 test 的空白文件
- touch -d "2019-05-04 15:44" test #同时修改 test 文件的读取时间和修改时间为 2019 年 5 月 4 日 15 点 44 分
2.mkdir 命令: 用于创建空白的目录. 格式; mkdir [选项] 目录.
- mkdir test #创建一个空白目录 test
- mkdir -p a/b/c/d/e #递归创建出具有嵌套叠层关系的文件目录
3.cp 命令: 用于复制文件或目录. 格式: cp [选项] 源文件 目标文件.
复制操作具体分三种情况:
如果目标文件是目录, 则会把源文件复制到该目录中;
如果目标文件也是普通文件, 则会询问是否要覆盖它;
如果目标文件不存在, 则执行正常的复制操作.
常用参数:
-p: 保留原始文件的属性(属主属组不变)
-d: 若对象为 "链接文件", 则保留该 "链接文件" 的属性
-r: 递归持续复制(用于目录)
-i: 若目标文件存在则询问是否覆盖
-a: 相当于 - pdr(p,d,r 为上述参数)
1 cp -a test.txt /etc/abc.txt #复制文件 test.txt 到 / etc 中并重命名为 abc.txt, 且保留原始文件的所有者, 所属组, 权限属性等信息
4.mv 命令: 用于剪切文件或将文件重命名. 格式: mv [选项] 源文件 [目标路径 | 目标文件名].
- mv test.txt /etc/abc.txt #把文件 test.txt 剪切到 / etc 中, 并重命名为 abc.txt
- mv test.txt abc.txt #把文件 test.txt 重命名为 abc.txt
5.rm 命令: 用于删除文件或目录. 格式: rm [选项] 文件.
常用参数:
-f: 不弹出确认信息, 强制删除
-r: 删除目录
- rm test.txt #删除文件 test.txt, 会弹出是否确认删除的提示.
- rm -rf /root/testdir #强制删除 root 用户的家目录下的 testdir 目录
- rm -rf /* #强制删除系统根目录下的所有文件, 这操作将直接导致数据丢失, 系统崩盘, 人称 "牢底坐穿命令", 万万用不得!
6.dd 命令: 用于按照指定大小和个数的数据块来复制文件或转换文件. 格式: dd [参数].
常用参数:
if: 输入的文件名称
of: 输出的文件名称
bs: 设置每个 "块" 的大小
count: 设置要复制 "块" 的个数
输出文件的大小 = bs x count,bs 和 count 其实就是盛饭, 乘一碗饭, 盛饭的勺子越大, 一勺就能盛满; 勺子越少, 则需要好几勺子才能盛满. bs 就是勺子大小, count 就是要盛多少次.
- dd if=/dev/zero of=test_file count=2 bs=250M #从 / dev/zero 设备文件中取出一个大小为 500M(2x250)的数据块, 保存名为 test_file 的文件
- dd if=/dev/cdrom of=test.iso #把光驱设备中的光盘制作成 iso 格式的镜像文件
7.file 命令: 用于查看文件 (文本, 目录, 设备等所有一切在 Linux 中都统称为文件) 的类型. 格式: file 文件名.
打包压缩与搜索命令(3)
1.tar 命令: 用于对文件进行打包压缩或解压. 格式: tar [选项] [文件].
常用参数:
-c: 创建压缩文件
-x: 解开压缩文件
-t: 查看压缩包内有哪些文件
-z: 用 Gzip 压缩或解压(压缩包后缀. tar.gz)
-j: 用 bzip2 压缩或解压(压缩包后缀. tar.bz2)
-v: 显示压缩或解压的过程
-f: 目标文件名
-p: 保留原始的权限与属性
-P: 使用绝对路径来压缩
-C: 指定解压到的目录
- tar -czvf etc.tar.gz /etc #把 / etc 目录的所有内容用 Gzip 打包压缩并命名为 etc.tar.gz
- tar -xzvf etc.tar.gz -C /root/Desktop #把压缩包 etc.tar.gz 用 Gzip 解压到 / root/etc 目录中
2.grep 命令: 用于在文本中执行关键词搜索, 并显示匹配的结果, 格式: grep [选项] [文件].
常用参数:
-b: 将可执行文件 (binary) 当作文本文件 (text) 来搜索
-c: 仅显示找到的行数
-i: 忽略大小写
-n: 显示行号
-v: 反向选择 -- 仅列出没有 "关键词" 的行.
1 grep -nv /sbin/nologin /etc/passwd #从 / etc/passwd 文件中查找出不含 / sbin/nologin 的行, 并显示行号
3.find 命令: 用于按照指定条件来查找文件, 格式: find [查找路径] 寻找条件 操作.
常用参数:
-name: 匹配名称
-perm: 匹配权限(mode 为完全匹配,-mode 为包含即可)
-user: 匹配所有者
-group: 匹配所有组
-mtime -n +n: 匹配修改内容的时间(-n 指 n 天以内,+n 指 n 天以前)
-atime -n +n: 匹配访问文件的时间(-n 指 n 天以内,+n 指 n 天以前)
-ctime -n +n: 匹配修改文件权限的时间(-n 指 n 天以内,+n 指 n 天以前)
-nouser: 匹配无所有者的文件
-nogroup: 匹配无所有组的文件
-newer f1 !f2: 匹配比文件 f1 新但比 f2 旧的文件
--type b/d/c/p/l/f: 匹配文件类型(后面的字幕字母依次表示块设备, 目录, 字符设备, 管道, 链接文件, 文本文件)
-size: 匹配文件的大小(+50KB 为查找超过 50KB 的文件, 而 - 50KB 为查找小于 50KB 的文件)
-prune: 忽略某个目录
-exec ...... {}\;: 把 find 命令搜索到的结果交由紧随其后的命令作进一步处理(RHCSA 考题!)
- find /etc -name "host*" #搜索 / etc 目录下所有以 host 开头的文件,* 为通配符
- find / -perm -4000 #搜索根目录下所有包括 SUID 权限的所有文件
- find / -user linuxprobe -exec cp -a {} /root/findresults/ \; #在整个文件系统中找出所有归属于用户 linuxprobe 的文件并把其复制到 / root/findresults 目录下,{}代表 find 命令搜索出的所有文件, 命令结尾必须是 "\;".
书本笔记
来源: http://www.bubuko.com/infodetail-3054584.html