从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第一章:基本命令。
第一章 基本命令
命令说明以简洁实用为主,不追求大而全。实际上没有任何人了解全部的 Linux 命令及选项。
随着 Linux 的发展,现在几乎所以的发行版都带有 GUI 图形桌面系统,桌面系统可以满足大部分的操作。但是在生产环境中几乎是没有图形界面的,大部分是通过 SSH 连接到服务器,从而依靠命令行操作服务器。Linux 的精髓也更多的体现在命令行上,其强大的功能,海量的工具,可以帮你轻而易举的完成各种复杂的系统管理操作。
alias 命令别名
####################################
alias 命令用于查看和创建命令别名,别名允许用户只输入一个单词就运行任意一个命令或一组命令。
命令格式:
举个例子,为常用的 clear(清除屏幕)命令创建一个别名 c:
让别名永久生效
在命令行中设置别名后,只在当前登录会话中有效。如果退出或重启系统后,别名就会消失。
如果想让别名永久生效需要将别名定义写入配置文件 ~/.bashrc
中:
系统级(对所有用户生效)的别名可以放在 /etc/bashrc
文件中。
禁用别名
unalias 命令用于删除当前终端的别名,写入配置文件的别名只在当前终端中被删除。它只有一个 -a
选项用于删除所有别名。
除了使用 unalias 删除别名之外,还有一些临时性地禁用别名的方法:
系统中常用的别名
bc 数学计算器
####################################
bc 是一个任意精度的计算器语言(可以说是一种编程语言),它支持变量、数组、输入输出、分支结构、循环结构、函数等基本的编程元素。在 Linux 下通常当计算器使用。
命令格式:
常用选项:
使用实例:
在使用计算器之前,首先需要了解 bc 中的基本运算符。
========== =========
运算符 含义
========== =========
+ 加法
- 减法
* 乘法
/ 除法
% 取余
^ 平方
sqrt(x) 平方根
========== =========
输入 bc 命令后会进入交互模式,但是默认情况下 bc 的计算精度是 0。所以平常使用时建议加上 -l
选项。
高级用法
bc 有四个内置的环境变量,在进行高级计算时会经常用到:
=============== ===============
变量名 作 用
=============== ===============
scale 指定计算精度(即小数点后的位数),默认为 0
ibase 指定输入数字的进制(2~16),默认为十进制
obase 指定输出数字的进制(2~16),默认为十进制
last 或 . 表示最近打印的数字
=============== ===============
bc 中支持变量,26 个小写字母 a-z 都是变量,而且都赋值为 0,所以上边计算中 a+b=0。和其它编程语言一样,使用 =
为变量赋值。
除了内置变量,bc 还有一些内置函数,在需要使用内置函数时,必须以 -l
选项启动程序。
=============== ===============
函数名 作用
=============== ===============
s(x) 计算 x 的正弦值,x 是弧度值。
c(x) 计算 x 的余弦值,x 是弧度值。
a(x) 计算 x 的反正切值,返回弧度值。
l(x) 计算 x 的自然对数。
e(x) 计算 e 的 x 次方。
j(n, x) 贝塞尔函数,计算从 n 到 x 的阶数。
=============== ===============
bzip2 压缩文件
####################################
bzip2 用于压缩文件,文件经压缩后以 .bz2
的扩展名结尾。bzip2 只能针对一个文件进行压缩,当要压缩多个文件时,需要将文件 :ref:tar 归档 <cmd_tar>
。
bunzip2 命令用来解压 bz2 文件,事实上 bunzip2 就是 bzip2 的硬连接( bzip2 –d
等价于 bunzip2
),命令选项基本相同。
命令格式:
常用选项:
使用实例:
命令cat:
cat 查看和连接文件内容
####################################
cat 命令用于连接文件并打印到标准输出设备上。
命令格式:
常用选项:
使用实例:
命令cd:
cd 切换目录
####################################
cd 命令是 Linux 中最常用的命令之一,它用于切换目录。
命令格式:
常用选项:
使用实例:
命令chgrp:
chgrp 改变文件所属组
####################################
chgrp 命令用于改变文件或目录的所属组,它允许普通用户改变文件所属的组,只要该用户是该组的一员。
命令格式:
常用选项:
使用实例:
命令chmod:
chmod 变更权限
####################################
chmod 命令用来变更文件或目录的权限。
:doc:权限 <../Chapter03/00_permission>
范围的表示法如下:
- u User 文件或目录的拥有者
- g Group 文件或目录的所属群组
- o Other 除了文件或目录的拥有者和所属组之外的其他用户
- a All 全部的用户
- r 读取权限,数字代号“4”
- w 写入权限,数字代号“2”;
- x 执行或切换权限,数字代号“1”
- - 不具任何权限,数字代号为“0”
- s 强制位权限,使其他用户临时拥有文件拥有者的权限
- t 粘滞位权限,用户只能删除自己为属主的文件
符号连接的权限无法变更,对符号连接修改权限实际会改变原始文件的权限。
命令格式:
修改权限有两种表达方式,即符号模式和八进制模式。
使用符号模式可以增加、删除或直接指定权限,每个项目的设置可以用逗号隔开。
====== ======
符号 说明
====== ======
+ 增加指定的权限
- 去除指定的权限
= 设置指定的权限
====== ======
使用八进制数来指定权限。
====== ====== ======
代码 rwx 权限
====== ====== ======
7 rwx 读 + 写 + 执行
6 rw- 读 + 写
5 r-x 读 + 执行
4 r-- 只读
3 -wx 写 + 执行
2 -w- 只写
1 --x 只执行
0 — 无
====== ====== ======
常用选项:
使用实例:
命令chown:
chown 改变文件属主
####################################
Linux 是多用户操作系统,所有的文件都有拥有者。chown 命令用于改变文件或目录的所有者或所属的组。
命令格式:
常用选项:
使用实例:
命令cp:
cp 复制文件或目录
####################################
cp(copy)用来复制文件(或目录)到指定的路径,可同时复制多个文件和目录。
命令格式:
常用选项:
使用实例:
命令dd:
dd 转换和复制文件
####################################
dd 命令用于从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
dd 命令与其它的 Linux 程序略有不同,它的命令行选项格式为“选项=值”。
命令格式:
常用选项:
使用实例:
命令df:
df 查看磁盘分区空间
####################################
df 命令用于查看磁盘分区的空间及使用和剩余的空间信息。
命令格式:
常用选项:
使用实例:
命令du:
du 查看文件夹大小
####################################
在 Linux 中使用 :ref:ls -l <cmd_ls>
命令列出的目录内容中,文件夹的大小仅显示 4KB,这是用来存储文件夹的元数据的大小。
使用 du 命令可以查看目录或文件的大小。默认使用递归方式总结磁盘使用情况,以获取目录及其子目录的大小。
命令格式:
常用选项:
使用实例:
命令env:
env 查看环境变量
####################################
env 命令可以查看环境变量,或在修改过的环境中运行程序。
命令格式:
常用选项:
使用实例:
命令file:
file 识别文件类型
####################################
file 命令用来识别文件类型,也可用来识别文件的编码格式。它通过文件的头部信息来获取文件类型,而不是简单通过扩展名来识别文件类型。
命令格式:
常用选项:
使用实例:
命令free:
free 查看内存
####################################
free 命令用于查看内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存以及系统核心使用的缓冲区等。
命令格式:
常用选项:
使用实例:
buff/cache
buffer 在操作系统中指 buffer cache, 中文一般翻译为 “缓冲区”。要理解缓冲区,必须明确另外两个概念:“扇区” 和 “块”。扇区是设备的最小寻址单元,也叫 “硬扇区” 或 “设备块”。块是操作系统中文件系统的最小寻址单元,也叫 “文件块” 或 “I/O 块”。每个块包含一个或多个扇区,但大小不能超过一个页面,所以一个页可以容纳一个或多个内存中的块。当一个块被调入内存时,它要存储在一个缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的表示。
buffer cache 只有块的概念而没有文件的概念,它只是把磁盘上的块直接搬到内存中而不关心块中究竟存放的是什么格式的文件。
cache 在操作系统中指 page cache,中文一般翻译为 “页高速缓存”。页高速缓存是内核实现的磁盘缓存。它主要用来减少对磁盘的 I/O 操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。页高速缓存缓存的是内存页面。缓存中的页来自对普通文件、块设备文件(这个指的就是 buffer cache 呀)和内存映射文件的读写。
页高速缓存对普通文件的缓存我们可以这样理解:当内核要读一个文件(比如 /etc/hosts)时,它会先检查这个文件的数据是不是已经在页高速缓存中了。如果在,就放弃访问磁盘,直接从内存中读取。这个行为称为缓存命中。如果数据不在缓存中,就是未命中缓存,此时内核就要调度块 I/O 操作从磁盘去读取数据。然后内核将读来的数据放入页高速缓存中。这种缓存的目标是文件系统可以识别的文件(比如 /etc/hosts)。
页高速缓存对块设备文件的缓存就是我们在前面介绍的 buffer cahce。因为独立的磁盘块通过缓冲区也被存入了页高速缓存(缓冲区最终是由页高速缓存来承载的)。
到这里我们应该搞清楚了:无论是缓冲区还是页高速缓存,它们的实现方式都是一样的。缓冲区只不过是一种概念上比较特殊的页高速缓存罢了。
那么为什么 free 命令不直接称为 cache 而非要写成 buff/cache? 这是因为缓冲区和页高速缓存的实现并非天生就是统一的。在 linux 内核 2.4 中才将它们统一。更早的内核中有两个独立的磁盘缓存:页高速缓存和缓冲区高速缓存。前者缓存页面,后者缓存缓冲区。当你知道了这些故事之后,输出中列的名称可能已经不再重要了。
free 与 available
在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?
free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。
交换空间(swap space)
swap space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap 分区也可以是 swap 文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。
现在的机器一般都不太缺内存,如果系统默认还是使用了 swap 是不是会拖累系统的性能?理论上是的,但实际上可能性并不是很大。并且内核提供了一个叫做 swappiness 的参数,用于配置需要将内存中不常用的数据移到 swap 中去的紧迫程度。这个参数的取值范围是 0~100,0 告诉内核尽可能的不要将内存数据移到 swap 中,也即只有在迫不得已的情况下才这么做,而 100 告诉内核只要有可能,尽量的将内存中不常访问的数据移到 swap 中。在 ubuntu 系统中,swappiness 的默认值是 60。如果我们觉着内存充足,可以在 /etc/sysctl.conf 文件中设置 swappiness:
如果系统的内存不足,则需要根据物理内存的大小来设置交换空间的大小。
命令head:
head 查看文件的开头内容
####################################
head 命令用于查看文件开头部分的内容,默认为前 10 行的内容。
命令格式:
常用选项:
使用实例:
命令history:
history 命令行历史列表
####################################
history 命令保存从该终端会话运行的所有其它命令的列表,然后允许你重放或者重用这些命令,而不用重新输入它们。
可以在 ~/.bash_history
中查看命令行记录文件。
命令格式:
常用选项:
使用实例:
Shell 中还有几个好用的历史列表命令:
========== ==============
字符 说明
========== ==============
!! 执行上一条命令(等同于 + 键)
!number 执行历史列表中第 number 行的命令
!string 执行最近的以 string 字符串开头的命令
!?string 执行最近的包含这个字符串的命令
!* 使用上一条命令的选项和参数
!$ 使用上一条命令的最后一个参数
========== ==============
命令id:
id 显示用户 ID
####################################
id 命令用于显示用户的 ID,以及所属群组的实际与有效 ID(若两个ID相同,则仅显示实际ID)。若没有指定用户名称,则显示当前用户的 ID。
一些程序可能需要 UID/GID 来运行。id 使我们更加容易地找出用户的 UID 以 GID 而不必在 /etc/group
文件中搜索。
命令格式:
常用选项:
使用实例:
命令jobs:
jobs 查看后台命令
####################################
用来查看当前终端有多少在后台运行的命令。
命令格式:
常用选项:
使用实例:
命令kill:
kill 终止进程
####################################
kill 命令大多时候用于终止(删除)执行中的进程。
kill 默认发送的信息为 SIGTERM(15),可终止指定程序。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制终止程序。
程序的进程号可使用 :ref:ps 命令 <cmd_ps>
或 :ref:jobs -l 命令 <cmd_jobs>
查看,还可以使用 :ref:top 命令 <cmd_top>
。
命令格式:
常用选项:
经常使用的信号:
=============== =============== ==========
Signal Name Single Value Effect
=============== =============== ==========
SIGINT 2 中断信号(同 <Ctrl+C> )
SIGKILL 9 强制终止进程
SIGTERM 15 发送终止信号(不适用卡死的进程)
SIGCONT 18 继续进程(类似 bg 命令)
SIGSTOP 19 暂停进程(同 <Ctrl+Z> )
=============== =============== ==========
使用实例:
命令less:
less 交互式查看文件内容
####################################
less 是对文件或其它输出进行分页查看的工具,支持前后翻页和搜索等功能。
命令格式:
常用选项:
使用 less 查看文件时,常用操作命令:
=============== ===============
命令 说明
=============== ===============
h 显示帮助
/ 向下搜索
? 向上搜索
n 下一个搜索(与 / 或 ? 有关)
N 上一个搜索(与 / 或 ? 有关)
f 向下翻一页
b 向上翻一页
d 向下翻半页
u 向上翻半页
j 向下翻一行
k 向上翻一行
q 退出
=============== ===============
命令ln:
ln 创建文件链接
####################################
ln 用于为文件和目录创建一个链接,在 Linux 中有两种链接的概念: :doc:../Chapter03/00_link
。
命令格式:
常用选项:
使用实例:
删除目录软链接
命令loginctl:
loginctl 查看用户
####################################
loginctl 命令可用于检查和控制 systemd 的状态;查看已经登录的用户会话消息。
命令格式:
常用选项:
使用实例:
命令ls:
ls 显示目录中的文件
####################################
ls(list)用来显示目录所含的文件及子目录,在 Linux 中是使用率较高的命令。
命令格式:
常用选项:
使用实例:
命令lsblk:
lsblk 列出块设备
####################################
lsblk(list block)列出所有可用块设备的信息,及设备之间的依赖关系,但是不会列出 RAM 的信息。
命令格式:
常用选项:
使用实例:
- NAME:设备名
- MAJ:MIN:主要/次要设备号
- RM:是否可移动设备(0 否,1 是)
- SIZE:设备的容量大小
- RO:是否为只读设备(0 否,1 是)
- TYPE:设备类型(disk 磁盘,part 分区,loop 块设备)
- MOUNTPOINT:设备挂载点
查看指定设备
[Linux]$ lsblk /dev/nvme0n1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 487M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1.9G 0 part [SWAP]
└─nvme0n1p3 259:3 0 236.1G 0 part /
自定义输出项
[Linux]$ lsblk -o name,size,uuid /dev/nvme0n1
NAME SIZE UUID
nvme0n1 238.5G
├─nvme0n1p1 487M D379-5667
├─nvme0n1p2 1.9G 352ca1aa-5508-4303-9646-cac0e1d791ca
└─nvme0n1p3 236.1G 22aba028-77ae-43a3-a5fb-5d9d05c99ad5
[Linux]$ lsblk -o +uuid /dev/nvme0n1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT UUID
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 487M 0 part /boot/efi D379-5667
├─nvme0n1p2 259:2 0 1.9G 0 part [SWAP] 352ca1aa-5508-4303-9646-cac0e1d791ca
└─nvme0n1p3 259:3 0 236.1G 0 part / 22aba028-77ae-43a3-a5fb-5d9d05c99ad5
命令man:
man 查看帮助手册
####################################
Linux 提供了丰富的帮助手册,通过 man 命令可以查看 Linux 中的命令帮助、配置文件帮助和编程帮助等信息。
命令格式:
常用选项:
使用实例:
在阅读帮助手册时,有许多命令可供使用。首先可以使用 h 命令查看帮助,下边只介绍几个常用的命令。
===== =====
键 说明
===== =====
b 上翻一屏
f 下翻一屏
e 向下一行
y 向上一行
g 移动到第一行
G 移动到最后一行
h 查看帮助信息
q 退出
/ 搜索(类似于 vim,n 跳到下一个搜索位置)
===== =====
手册的分类和格式
Linux 帮助手册是一个庞大的参考书,为了更好的组织信息,Linux 将整个手册页分成了8章(编号1~8)。各个发行版之间实际名称可能会有所不同,但是,所有的 Linux 手册都倾向于遵循相同的组织原则。
===== =====
章节 说明
===== =====
1 标准用户命令(包含大量的命令手册)
2 系统调用(在程序中使用,用来请求内核执行指令)
3 库调用
4 特殊文件(包含物理设备和设备的驱动信息)
5 文件格式(包含配置文件)
6 游戏
7 杂项(各种混杂信息)
8 管理命令(系统管理员使用的特殊命令)
===== =====
在每章下包含各自的命令帮助手册。每个命令的帮助手册,也会按照标准格式组织,将每个页面分成几个部分,每个部分都拥有独立的标题。
============= =============
标题 含义
============= =============
NAME 命令名称及功能
SYNOPSIS 命令语法,包括可用的选项
DESCRIPTION 命令功能的详细说明
OPTIONS 每个选项的详细说明
EXAMPLES 用法示例
ENVIRONMENT 命令使用的环境变量
FILES 命令相关的配置文件
AUTHOR 程序的作者
BUGS 错误、缺点、警告
COPYRIGHT 版权信息
SEE ALSO 参照、相关信息
============= =============
在 man 后边直接跟命令名称,Linux 会从第1章开始向后查找,然后输出找到的第一个匹配。如果想查看后边章的帮助手册就需要指定章节号。
可以使用 whatis 命令确定所查询的命令包含在几个章节中,括号中的数字即为章节号。
命令mkdir:
mkdir 新建文件夹
####################################
mkdir(make directory)用来新建文件夹,此命令属于 bash 内建命令。
命令格式:
常用选项:
使用实例:
命令mv:
mv 移动文件或重命名
####################################
mv(move)对文件或目录重命名,或者将文件从一个目录移到另一个目录中。
文件被移至目标文件有多种不同的结果:
================ ===========
命令 说明
================ ===========
mv 文件名 文件名 重命名,将源文件名改为目标文件名
mv 文件名 目录名 移动文件,将文件移动到目标目录
mv 目录名 目录名 目标目录存在,则将源目录移动到目标目录;目标目录不存在则重命名
mv 目录名 文件名 报错
================ ===========
命令格式:
常用选项:
使用实例:
命令ps:
ps 查看系统进程快照
####################################
ps 命令用于查看当前系统进程的快照,使用该命令可以确定有哪些进程正在运行和运行的状态、哪些进程占用了过多的资源等等。
如果想实时更新查看系统的状态,可以使用 :ref:top 命令 <cmd_top>
,同时可以搭配 :ref:kill 命令 <cmd_kill>
随时暂停、终止进程的运行。
命令格式:
常用选项:
ps 命令支持三种不用的语法格式:
- UNIX 风格,选项前必须有“-”连字符
- BSD 风格,选项前不能有“-”连字符
- GNU 风格,选项前有两个“-”连字符
-e
显示所有的进程
-C
查找指定的进程,只能实现完全匹配查找,并不实用
-f
显示 UID, PPIP, C 与 STIME 栏
-l
显示详细的进程状态
-u
显示属于该用户的进程状况,默认为当前用户。
使用实例:
输出说明:
- USER: 属主用户 ID
- PID: 进程 id
- %CPU: 该进程使用的 CPU 百分比
- %MEM: 该进程使用的物理内存百分比
- VSZ: 该进程使用的虚拟内存量
- RSS: 该进程使用的固定内存量
- TTY: 该进程在那个终端机上面运作,若与终端机无关,则显示 ?
- STAT: 该进程的状态:
- D: 无法中断的休眠状态 (通常 IO 的进程)
- R: 正在执行中
- S: 睡眠状态
- T: 暂停执行
- Z: 不存在但暂时无法消除(zombie 疆尸进程)
- W: 没有足够的记忆体分页可分配
- <: 高优先序的行程
- N: 低优先序的行程
- L: 有记忆体分页分配并锁在记忆体内 (实时系统或 I/O)
- START: 进程被触发的时间
- TIME: 进程执行的时间
- COMMAND: 进程执行的指令
命令pwd:
pwd 显示工作目录
####################################
pwd 命令是 Linux 中最常用的命令之一,它用于显示当前工作路径。
命令格式:
常用选项:
使用实例:
命令rm:
rm 删除文件或目录
####################################
rm(remove)删除文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除。
… danger
命令格式:
常用选项:
使用实例:
命令scp:
scp 远程复制文件
####################################
scp 是 secure copy 的简写,用于在本机和服务器或两台服务器之间远程复制文件,而且 scp 传输是加密的。另外,scp 还非常节省资源,不会占用太多系统负荷。
命令格式:
常用选项:
使用实例:
命令ssh-keygen:
ssh-keygen 生成密钥
####################################
ssh-keygen 命令是 :doc:OpenSSH <../Chapter02/00_openssh>
程序提供的一个密钥生成、管理和转换工具,支持 RSA 和 DSA 两种认证密钥。生成的密钥文件默认存储在 ~/.ssh/
目录下,id_rsa 为私钥文件,id_rsa.pub 为公钥文件。
RSA 和 DSA 加密算法
命令格式:
常用选项:
使用实例:
命令systemctl:
systemctl 基本工具
####################################
systemctl 是一个 :ref:systemd <cfg_systemd>
工具,主要负责控制 systemd 系统和服务管理器。
systemctl 命令有两大类功能:
- 控制 systemd 系统
- 管理系统上运行的服务(Unit 单元)
命令格式:
常用选项:
Unit 命令
++++++++++++++++++++++++++++++++++++
Unit 文件命令
++++++++++++++++++++++++++++++++++++
系统命令
++++++++++++++++++++++++++++++++++++
systemctl 的大部分命令后都可以跟多个单元名。 systemctl 命令在 enable、disable 和 mask 子命令中增加了 --now 选项,可以实现激活的同时启动服务,取消激活的同时停止服务。
使用实例:
命令tail:
tail 查看文件的末尾内容
####################################
tail 用于查看文件的末尾内容,默认为文末 10 行。
命令格式:
常用选项:
使用实例:
命令tar:
tar 归档
###################################
tar 为多个文件和目录创建一个档案(归档),通常与压缩工具(如 gzip
或 bzip
)结合使用。
归档的一般用途
命令格式:
tar 命令有三种模式,一种是传统的命令模式,一种是 Unix 命令模式,一种是 GNU 的命令模式。使用中常以传统命名为主,下边主要介绍传统命令模式。
… highlight nong
常用选项:
必要选项:
在参数中仅能使用一个,不同时使用,如: tar -cd
。
其它选项:
使用实例:
归档
解包
归档并压缩
创建归档文件,并以 gzip 压缩(.tar.gz 或 .tgz)
创建归档文件,并以 bz2 压缩(.tar.bz2 或 .tbz2)
命令tee:
tee 输出分流
####################################
tee 命令会从标准输入读取数据,将数据输出到标准输出,同时保存到文件中。如果指定的文件不存在,那么 tee 命令会创建这个文件;如果文件存在则覆盖原有文件中的内容。
命令格式:
常用选项:
使用实例:
命令top:
top 查看系统状态
####################################
top 命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。同时 top 命令也提供互动式界面,用热键可以管理。
命令格式:
常用选项:
交互式命令:
====== ======
命令 说明
====== ======
h 显示帮助
k 终止一个进程,首先输入进程号,然后输入发送的信号(15 或 9)
i 显示/隐藏闲置和僵死的进程
q 退出
r 重新设置一个进程的优先级别(数值越小优先级越高)
S 切换到累计模式
s 改变更新时间
c 显示/隐藏完整命令行
l 显示/隐藏平均负载和启动时间信息(即第一行)
t 显示/切换/隐藏进程和 CPU 状态信息(即第二和第三行)
m 显示/切换/隐藏内存信息(即第四和第五行)
n 设置显示进程的数量
N 以 PID 的大小进行排序
P 以 CPU 占用率进行排序
M 以内存占用率大小进行排序
T 根据时间/累计时间进行排序
w 将当前设置写入 ~/.toprc
文件中
====== ======
使用实例:
输出说明:
第一行,系统运行时间和平均负载:
- 当前时间
- 已运行时间
- 当前登录用户的数量
- 最近 5、10 和 15 分钟内的系统平均负载
第二行,进程任务:
- total 系统进程总数
- running 处于运行中的进程
- sleeping 睡眠的进程总数
- stoped 停止的进程总数
- zombie 僵尸进程总数
第三行,CPU 状态:
不同模式下所占 cpu 时间百分比:
- us(user): 运行(未调整优先级) 用户进程的 CPU 时间
- sy(system): 运行内核进程的 CPU 时间
- ni(niced):运行已调整优先级用户进程的 CPU 时间
- wa(IO wait): 用于等待 IO 完成的 CPU 时间
- hi:处理硬件中断的 CPU 时间
- si: 处理软件中断的 CPU CPU时间
- st:虚拟机模式中处理 hypervisor 的 CPU 时间
第四和第五行,内存使用:
- Mem:物理内存
- Swap:虚拟内存
- total:内存总量
- used:使用中的内存总量
- free:空闲内存总量
- buffers:缓存的内存量
各进程的状态:
- PID:进程 ID,进程的唯一标识符
- USER:进程所有者(用户名)
- PR:进程的调度优先级,'rt’表示进程运行在实时态
- NI:进程的 nice 值(优先级)。越小的值意味着越高的优先级,可以是负值
- VIRT:进程使用的虚拟内存总量(单位 kb)
- RES:使用中的未被换出的物理内存大小(单位 kb)
- SHR:使用的共享内存大小(单位 kb)
- S:进程的状态:
- D 不可中断的睡眠状态
- R 运行状态
- S 睡眠状态
- T 被跟踪或已停止状态
- Z 僵尸状态
- %CPU:两次更新时间之间所使用的 CPU 百分比
- %MEM:进程使用的可用物理内存百分比
- TIME+:任务启动后到现在所使用的全部 CPU 时间,精确到百分之一秒
- COMMAND:运行进程所使用的命令
切换排序列
命令touch:
touch 新建文件
####################################
touch 命令有两个功能:
- 新建一个或多个空文件
- 更新一个或多个文件的时间标签(文件内容不会改动)
命令格式:
常用选项:
使用实例:
命令type:
type 查看命令类型
####################################
type 命令用于查看命令的类型,它是 shell 的内部命令,命令类型可以分为以下几种:
- builtin 内建命令。Shell 内建命令,例如:cd 命令。
- keyword 关键字,Shell 保留字。
- function 函数,Shell 函数是小规模的 Shell 脚本,它们混合到环境变量中。
- alias 命令别名。
- file 文件。磁盘文件、外部命令。
- unfound 没有找到。
命令格式:
常用选项:
使用实例:
命令unzip:
unzip 解压 zip
####################################
unzip 命令用于解压缩 zip 压缩包。压缩命令为 :doc:00_zip
命令格式:
常用选项:
使用实例:
命令wc:
wc 统计数
####################################
wc 用于统计文件中的行数、字数、字节数等信息。如果没有指定文件名,则从标准输入读取。
命令格式:
常用选项:
使用实例:
命令wget:
wget 下载文件
####################################
wget 是在命令行中下载文件的工具。wget 支持 HTTP,HTTPS 和 FTP 协议,还可使用 HTTP 代理。
wget 可以跟踪 HTML 页面上的链接依次下载来创建远程服务器的本地副本,常被称作“递归下载”。在递归下载的时候,wget 遵循 Robot Exclusion 标准(robots.txt)。wget 非常稳定,在带宽有限和不稳定的网络中有很强的适应性。当下载文件失败时,wget 会不断的尝试继续下载,直到整个文件下载完毕。
命令格式
常用选项:
使用实例:
高级用法
- 镜像网站(下载整个网站到本地)
[Linux]$ wget -mirror -p --convert-links -page-requisites URL
- -m:镜像下载
- -p:下载所有 html 页面显示正常的文件
- -convert-links:下载后,转换成本地的链接
- -page-requisites:下载额外的东西,如样式表
- 载 FTP 服务器中的文件
匿名下载
[Linux]$ wget ftp-url
指定用户名和密码
[Linux]$ wget --ftp-user=USERNAME --ftp-password=PASSWORD url
命令whereis:
whereis 搜索命令文件
####################################
whereis 命令可以查找指定命令的二进制文件、源文件和帮助文件。 被找到的文件在显示时,会去掉主路径名,然后再去掉文件的单个尾部扩展名(如: .c
),源于源代码控制的 s.
前缀也会被去掉。接下来,whereis 会尝试在标准的 Linux 位置里寻找具体程序,也会在由 $PATH
和 $MANPATH
指定的路径中寻找。
命令格式:
常用选项:
使用实例:
命令zip:
zip 归档和压缩文件
####################################
zip 不同于 gzip 压缩命令,它可直接用于压缩文件夹,压缩文件的扩展名为 .zip
。解压命令为 :ref:unzip <cmd_unzip>
。
命令格式:
常用选项:
使用实例:
命令aptitude:
aptitude 安装软件
##########################
aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些。举例来说,aptitude 在删除一个包时,会同时删除本身所依赖的包。这样系统中不会残留无用的包,整个系统更为干净。
命令格式:
常用选项:
============================ ==============
命令 说明
============================ ==============
aptitude update 更新可用的包列表
aptitude upgrade 升级可用的包
aptitude install pkgname 安装包
aptitude remove pkgname 删除包
aptitude purge pkgname 删除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 显示包的详细信息
aptitude clean 删除下载的包文件
aptitude autoclean 仅删除过期的包文件
============================ ==============
在终端中直接输入 aptitude 命令,会启动一个图形化的安装工具。aptitude 的主视图组织的非常有条理,而且界面布局清爽。上部窗口列出的是软件包根据类别和它们在本地系统的状态排序。
在 aptitude 软件包列表中的软件包状态:
========== ==========
状态 说明
========== ==========
v 虚拟
B 损坏
u 解包
C 预配置
H 预安装
c 卸载未清除
p 清除软件包
i 已经安装
E 内部错误
========== ==========
在 aptitude 软件包列表中的请求操作:
========== ==========
状态 说明
========== ==========
h 保持
p 清除
d 删除(卸载)
B 损坏
i 安装
r 重装
u 升级
========== ==========
使用实例:
命令fdisk:
fdisk 管理磁盘分区
##########################
一块硬盘可以被划分成一个或多个逻辑磁盘,我们将其称作分区。我们对硬盘进行的划分信息被储存于建立在扇区 0 的分区表(MBR 或 GPT)中。
Linux 需要至少一个分区来当作根文件系统,所以我们不能在没有分区的情况下安装 Linux 系统。当我们创建一个分区时,我们必须将它格式化为一个适合的文件系统,否则我们就没办法往里面储存文件了。
要在 Linux 中完成分区的相关工作,我们需要一些工具。Linux 下有很多可用的相关工具,今天我们的主角是 fdisk。
人人都喜欢用 fdisk,它是 Linux 下管理磁盘分区的最佳利器之一。它可以操作最大 2TB 的分区。大量 Linux 管理员都喜欢使用这个工具,因为当下 LVM 和 SAN 的原因,并没有多少人会用到 2TB 以上的分区。并且这个工具被世界上许多的基础设施所使用。如果你还是想创建比 2TB 更大的分区,请使用 parted 命令 或 cfdisk 命令。
对磁盘进行分区和创建文件系统是 Linux 管理员的日常。如果你在许多不同的环境中工作,你一定每天都会重复几次这项操作。
什么是 fdisk 命令?
fdisk 的意思是固定磁盘 Fixed Disk 或格式化磁盘 Format Disk,它是命令行下允许用户对分区进行查看、创建、调整大小、删除、移动和复制的工具。它支持 MBR、Sun、SGI、BSD 分区表,但是它不支持 GUID 分区表(GPT)。请注意它不是为操作大分区而设计的(最大可操作 2TB 的分区)。
fdisk 允许我们在每块硬盘上创建最多四个主分区。它们中的其中一个可以作为扩展分区,并下设多个逻辑分区。1-4 扇区作为主分区被保留,逻辑分区从扇区 5 开始。
在 fdisk 中敲击 m,便会列出所有的可用操作,:
列出可用磁盘
列出分区类型
创建一个新的磁盘分区
如果你希望新建磁盘分区,请参考下面的步骤。比如我希望在 /dev/sdc 中新建四个分区(三个主分区和一个扩展分区),只需要执行下文的命令。
首先,请在操作 “First sector” 的时候先按下回车,然后在 “Last sector” 中输入你希望创建分区的大小(可以在数字后面加 KB、MB、G 和 TB)。例如,你希望为这个分区扩容 1GB,就应该在 “Last sector” 中输入 +1G
。当你创建三个分区之后,fdisk 默认会将分区类型设为扩展分区,如果你希望创建第四个主分区,请输入 p 来替代它的默认值 e。
创建扩展分区和逻辑分区
请注意,创建扩展分区时,你应该使用剩下的所有空间,以便之后在扩展分区下创建逻辑分区。
创建扩展分区后,可以按照之前的步骤创建逻辑分区。在这里,我创建了位于 /dev/sdc5 的 1GB 逻辑分区。你可以查看分区表值来确认这点。
查看未分配空间
上文中,我们总共创建了四个分区(三个主分区和一个扩展分区)。在创建逻辑分区之前,扩展分区的容量将会以未分配空间显示。
使用以下命令来显示磁盘上的未分配空间,下面的示例中显示的是 7GB:
删除分区
如果我们不再使用某个分区,请按照下面的步骤删除它。
请确保你输入了正确的分区号。在这里,我准备删除 /dev/sdc2 分区:
分区需要格式化后才能使用
在计算时,文件系统控制了数据的储存方式,并通过 索引节点 Inode Tables 来检索数据。如果没有文件系统,操作系统是无法找到信息储存的位置的。简单来说,磁盘分区完成后必须格式化分区才可以使用,否则磁盘将无法存储数据。
在此,我准备在 /dev/sdc1 上创建分区。有三种方式创建文件系统:
当你在分区上建立文件系统时,以下重要信息会同时被创建:
- Filesystem UUID: UUID 代表了通用且独一无二的识别符,UUID 在 Linux 中通常用来识别设备。它 128 位长的数字代表了 32 个十六进制数。
- Superblock: 超级块储存了文件系统的元数据。如果某个文件系统的超级块被破坏,我们就无法挂载它了(也就是说无法访问其中的文件了)。
- Inode: Inode 是类 Unix 系统中文件系统的数据结构,它储存了所有除名称以外的文件信息和数据。
- Journal: 日志式文件系统包含了用来修复电脑意外关机产生下错误信息的日志。
挂载分区
在创建完分区和文件系统之后,我们需要挂载它们以便使用。我们需要创建一个挂载点来挂载分区,使用 mkdir 来创建一个挂载点。
进行临时挂载,请使用下面的命令。在计算机重启之后,你会丢失这个挂载点。
如果你希望永久挂载某个分区,请将分区详情加入 fstab 文件。我们既可以输入设备名称,也可以输入 UUID。
使用设备名称来进行永久挂载:
使用 UUID 来进行永久挂载(请使用 blkid 来获取 UUID):
使用 df 命令亦可:
最后简单总结一下,新磁盘的使用步骤:磁盘分区 > 格式化分区 > 挂在磁盘分区到系统中。
查看内核和硬件信息
######################################
- 查看 Linux 内核版本:
uname -a - 查看 CPU 信息:
more /proc/cpuinfo
查看 CPU 型号
grep “model name” /proc/cpuinfo
查看 CPU 位数(32 or 64):
echo $HOSTTYPE
- 查看内存信息:
more /proc/meminfo
查看内存大小:
grep MemTotal /proc/meminfo
- 查看硬盘和分区:
df -h
查看目录的大小
du /etc/ -sh
- 查看主机名:
hostname - 查看默认语言:
echo $LANG $LANGUAGE
命令ip:
ip 网络配置命令
###############################
Linux 的 ip 命令和 ifconfig 类似,但前者功能更强大,并旨在取代后者。使用 ip 命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig 是 net-tools 中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2 套件里提供了许多增强功能的命令,ip 命令即是其中之一。
命令格式:
命令功能:
ip 命令是 Linux 下较新的功能强大的网络配置工具,用来显示或配置 Linux 主机的路由、网络设备、策略路由和隧道。
命令参数:
OPTIONS: 是一些修改 ip 行为或者改变其输出的选项,所有的选项都是以 - 字符开头,分为长、短两种形式:
-V -Version 打印ip的版本并退出
-s -stats -statistics 输出更为详尽的信息(如果这个选项出现两次或者多次,输出的信息将更为详尽)
-f -family 这个选项后面接协议种类,包括:inet、inet6 或者 link,强调使用的协议种类。
如果没有足够的信息告诉ip使用的协议种类,ip就会使用默认值inet或者any。link比较特殊,它表示不涉及任何网络协议。
-4 - 是 -family inet 的简写。
-6 - 是 -family inet6 的简写。
-0 - 是 -family link 的简写。
-o -oneline 对每行记录都使用单行输出,回行用字符代替。如果你需要使用 wc、grep 等工具处理 ip 的输出,会用到这个选项。
-r -resolve 查询域名解析系统,用获得的主机名代替主机 IP 地址。
OBJECT: 是你要管理或者获取信息的对象。ip 认识的对象包括:
link 网络设备
address 一个设备的协议(IP或者IPV6)地址
neighbour ARP或者NDISC缓冲区条目
route 路由表条目
rule 路由策略数据库中的规则
maddress 多播地址
mroute 多播路由缓冲区条目
tunnel IP 上的通道
另外,所有的对象名都可以简写,例如:address可以简写为addr,甚至是a。
COMMAND[ARGUMENTS] 设置针对指定对象执行的操作
一般情况下,ip 支持对象的增加(add)、删除(delete)和展示(show或者list)。
ARGUMENTS 是命令的一些参数,它们倚赖于对象和命令。
ip 支持两种类型的参数:flag 和 parameter。flag 由一个关键词组成;parameter 由一个关键词加一个数值组成。
使用实例:
- 显示网络设备的运行状态
[root@localhost xinetd.d]# ip link list
1: lo: mtu 65536 qdisc noqueue state DOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:9f:bf:8b brd ff:ff:ff:ff:ff:ff - 输出更为详细的网络信息
[root@localhost xinetd.d]# ip -s link list
1: lo: mtu 65536 qdisc noqueue state DOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
1733956 21926 0 0 0 0
TX: bytes packets errors dropped carrier collsns
1733956 21926 0 0 0 0
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:9f:bf:8b brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
790788625 551713 0 0 0 0
TX: bytes packets errors dropped carrier collsns
19844418 287915 0 0 0 0 - 显示核心路由表
[root@localhost xinetd.d]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.15 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe8020c:29ff:fe9f:bf8b prefixlen 64 scopeid 0x20
ether 00:0c:29:9f:bf:8b txqueuelen 1000 (Ethernet)
RX packets 556578 bytes 791923646 (755.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 294987 bytes 20580554 (19.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost xinetd.d]# ip route list
default via 192.168.0.1 dev eno16777736 proto static metric 100
192.168.0.0/24 dev eno16777736 proto kernel scope link src 192.168.0.15 metric 100 - 显示邻居表
[root@localhost xinetd.d]# ip neigh list
192.168.0.1 dev eno16777736 lladdr 70:62:b8:bd:8c:d6 REACHABLE - 查看网卡信息
[root@localhost xinetd.d]# ip -s link list eno16777736 //等价于ifconfig eno16777736,(单网卡时等价于ifconfig)
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:9f:bf:8b brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
808213913 570857 0 0 0 0
TX: bytes packets errors dropped carrier collsns
21503126 305593 0 0 0 0
[root@localhost xinetd.d]# ifconfig eno16777736
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.15 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe8020c:29ff:fe9f:bf8b prefixlen 64 scopeid 0x20
ether 00:0c:29:9f:bf:8b txqueuelen 1000 (Ethernet)
RX packets 572918 bytes 811238488 (773.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 306676 bytes 21578727 (20.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#. 自定义 IP 地址
#. 改变设备参数信息
#. 设置网络设备为不可用状态
#. 显示协议地址(网卡信息)
#. 类似于 ifconfig 命令的输出