抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Linux命令

1.1 Linux系统的文件结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/bin        二进制文件,系统常规命令
/boot 系统启动分区,系统启动时读取的文件
/dev 设备文件
/etc 大多数配置文件
/home 普通用户的家目录
/lib 32位函数库
/lib64 64位库
/media 手动临时挂载点
/mnt 手动临时挂载点
/opt 第三方软件安装位置
/proc 进程信息及硬件信息
/root 临时设备的默认挂载点
/sbin 系统管理命令
/srv 数据
/var 数据
/sys 内核相关信息
/tmp 临时文件
/usr 用户相关设定

更换yum源

因centos 7已停止支持,所以yum下载源连接不上,需要更换源,这里选择国内的镜像源。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
--下载国内yum源配置文件到/etc/yum.repos.d/
阿里源(推荐):
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
网易源:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
--清理yum缓存,并生成新的缓存
yum clean all
yum makecache
--更新yum源检查是否生效
yum update
若更新 yum 源不更新内核:
直接在 yum 的命令后面加上如下的参数
yum --exclude=kernel* update

国内yum源:
阿里yum源:http://mirrors.aliyun.com/repo/
163(网易)yum源: http://mirrors.163.com/.help/
中科大的Linux安装镜像源:http://centos.ustc.edu.cn/
搜狐的Linux安装镜像源:http://mirrors.sohu.com/
北京首都在线科技:http://mirrors.yun-idc.com/

1.2 Linux系统命令行的含义

1
2
3
4
5
6
7
示例:root@app00:~# 
root //用户名,root为超级用户
@ //分隔符
app00 //主机名称
~ //当前所在目录,默认用户目录为~,会随着目录切换而变化,例如:(root@app00:/bin# ,当前位置在bin目录下)
# //表示当前用户是超级用户,普通用户为$,例如:("yao@app00:/root$" ,表示使用用户"yao"访问/root文件夹)

1.3 命令的组成

1
示例:命令 [选项] 参数

2.1 关闭系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(1)立刻关机
shutdown -h now 或者 poweroff
(2)两分钟后关机
shutdown -h 2
-t seconds : 设定在几秒钟之后进行关机程序。
-k : 并不会真的关机,只是将警告讯息传送给所有使用者。
-r : 关机后重新开机。
-h : 关机后停机。
-n : 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机。
-c : 取消目前已经进行中的关机动作。
-f : 关机时,不做 fsck 动作(检查 Linux 档系统)。
-F : 关机时,强迫进行 fsck 动作。
time : 设定关机的时间。
message : 传送给所有使用者的警告讯息。

2.2 关闭重启

1
2
3
4
5
(1)立刻重启
shutdown -r now 或者 reboot
(2)两分钟后重启
shutdown -r 2

2.3 帮助命令(help 、ifconfig)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ifconfig  --help     //查看 ifconfig 命令的用法
add<地址> 设置网络设备IPv6的ip地址
del<地址> 删除网络设备IPv6的IP地址
down 关闭指定的网络设备
hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址
io_addr<I/O地址> 设置网络设备的I/O地址
irq<IRQ地址> 设置网络设备的IRQ
media<网络媒介类型> 设置网络设备的媒介类型
mem_start<内存地址> 设置网络设备在主内存所占用的起始地址
metric<数目> 指定在计算数据包的转送次数时,所要加上的数目
mtu<字节> 设置网络设备的MTU
netmask<子网掩码> 设置网络设备的子网掩码
tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址
up 启动指定的网络设备
-broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理
-pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能
-promisc 关闭或启动指定网络设备的promiscuous模式
IP地址 指定网络设备的IP地址
网络设备 指定网络设备的名称

2.4 命令说明书(man)

1
2
3
4
5
man shutdown         //打开命令说明后,可按"q"键退出
-a:在所有的man帮助手册中搜索;
-f:等价于whatis指令,显示给定关键字的简短描述信息;
-P:指定内容时使用分页程序;
-M:指定man手册搜索的路径。

2.5 切换用户(su、date)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
su yao               //切换为用户"yao",输入后回车需要输入该用户的密码
exit //退出当前用户
-f 或 --fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
-m -p 或 --preserve-environment 执行 su 时不改变环境变数
-c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
-s shell 或 --shell=shell 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
--help 显示说明文件
--version 显示版本资讯
- -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
USER 欲变更的使用者帐号
ARG 传入新的 shell

date 命令可以用来显示或设定系统的日期与时间
-d, --date=STRING:通过字符串显示时间格式,字符串不能是'now'。
-f, --file=DATEFILE:类似于--date; 一次从DATEFILE处理一行。
-I[FMT], --iso-8601[=FMT]:按照 ISO 8601 格式输出时间,FMT 可以为'date'(默认),'hours','minutes','seconds','ns'。 可用于设置日期和时间的精度,例如:2006-08-14T02:34:56-0600。
-R, --rfc-2822 : 按照 RFC 5322 格式输出时间和日期,例如: Mon, 14 Aug 2006 02:34:56 -0600。
--rfc-3339=FMT:按照 RFC 3339 格式输出,FMT 可以为'date', 'seconds','ns'中的一个,可用于设置日期和时间的精度, 例如:2006-08-14 02:34:56-06:00。
-r, --reference=FILE:显示文件的上次修改时间。
-s, --set=STRING:根据字符串设置系统时间。
-u, --utc, --universal:显示或设置协调世界时(UTC)。
--help:显示帮助信息。
--version:输出版本信息。
%% 输出字符 %
%a 星期几的缩写 (Sun..Sat)
%A 星期的完整名称(Sunday..Saturday)。
%b 缩写的月份名称(例如,Jan)
%B 完整的月份名称(例如,January)
%c 本地日期和时间(例如,Thu Mar 3 23:05:25 2005)
%C 世纪,和%Y类似,但是省略后两位(例如,20)
%d 日 (01..31)
%D 日期,等价于%m/%d/%y
%e 一月中的一天,格式使用空格填充,等价于%_d
%F 完整的日期;等价于 %Y-%m-%d
%g ISO 标准计数周的年份的最后两位数字
%G ISO 标准计数周的年份,通常只对%V有用
%h 等价于 %b
%H 小时 (00..23)
%I 小时 (01..12)
%j 一年中的第几天 (001..366)
%k 小时,使用空格填充 ( 0..23); 等价于 %_H
%l 小时, 使用空格填充 ( 1..12); 等价于 %_I
%m 月份 (01..12)
%M 分钟 (00..59)
%n 新的一行,换行符
%N 纳秒 (000000000..999999999)
%p 用于表示当地的AM或PM,如果未知则为空白
%P 类似 %p, 但是是小写的
%r 本地的 12 小时制时间(例如 11:11:04 PM)
%R 24 小时制 的小时与分钟; 等价于 %H:%M
%s 自 1970-01-01 00:00:00 UTC 到现在的秒数
%S 秒 (00..60)
%t 插入水平制表符 tab
%T 时间; 等价于 %H:%M:%S
%u 一周中的一天 (1..7); 1 表示星期一
%U 一年中的第几周,周日作为一周的起始 (00..53)
%V ISO 标准计数周,该方法将周一作为一周的起始 (01..53)
%w 一周中的一天(0..6),0代表星期天
%W 一年中的第几周,周一作为一周的起始(00..53)
%x 本地的日期格式(例如,12/31/99)
%X 本地的日期格式(例如,23:13:48)
%y 年份后两位数字 (00..99)
%Y 年
%z +hhmm 格式的数值化时区格式(例如,-0400)
%:z +hh:mm 格式的数值化时区格式(例如,-04:00)
%::z +hh:mm:ss格式的数值化时区格式(例如,-04:00:00)
%:::z 数值化时区格式,相比上一个格式增加':'以显示必要的精度(例如,-04,+05:30)
%Z 时区缩写 (如 EDT)
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。

3.1 切换目录(cd)\dir

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  cd /                 //切换到根目录
cd /bin //切换到根目录下的bin目录
cd ../ //切换到上一级目录 或者使用命令:cd ..
cd ~ //切换到home目录
cd - //切换到上次访问的目录
cd xx(文件夹名) //切换到本目录下的名为xx的文件目录,如果目录不存在报错
cd /xxx/xx/x //可以输入完整的路径,直接切换到目标目录,输入过程中可以使用tab键快速补全


dir指定要切换到的目录

-L (默认值)如果要切换到的目标目录是一个符号连接,那么切换到符号连接的目录。
-P 如果要切换到的目标目录是一个符号连接,那么切换到它指向的物理位置目录。
- 当前工作目录将被切换到环境变量OLDPWD所表示的目录,也就是前一个工作目录。

3.2 查看目录(ls、ln)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
ls                   //查看当前目录下的所有目录和文件
ls -a //查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l //列表查看当前目录下的所有目录和文件(列表查看,显示更多信息),与命令"ll"效果一样
ls /bin //查看指定目录下的所有目录和文件

-a all, 显示所有文件及目录 (. 开头的隐藏文件也会列出)
-A 同-a ,但不列出 “.” (目前目录) 及 “…” (父目录)
-l 以长格式显示目录下的内容列表,包括文件的权限、链接数、所有者名称和组所有者、文件大小、最后修改日期时间和文件/目录名称
-r reverse,将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小
-R –recursive,连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来
-S sort by file size。根据文件大小排序,而不是文件名
-t sort by modification time,以文件修改时间排序(从最新开始排)
-d 仅列出目录本身,而不是列出目录内的文件数据(常用)
-f 直接列出结果,而不进行排序 (ls 默认以文件名排序)
-F 根据文件、目录等信息,给予附加数据结构,例如:*:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件
-g 像-l,但是不列出所有者
-G, no-group, 不列出任何有关于组的信息
–author 打印出每一个文件的作者
-n 类似-l,用数字UID和GID代替名称
-h 将文件大小以人类较易读的方式(例如 GB KB 等等)列
-c 输出文件的ctime(文件状态最后更改的时间),并根据ctime排序
-C 由上 至下的列出项目
--full-time 显示完整时间格式
--time 输出 access 时间或改变权限属性时间 (ctime)而非内容变更时间 (modification time)
--color=never 不要依据文件特性给予颜色显示
--color=always 显示颜色

`ln` 是一个用于在 Unix 和类 Unix 操作系统(如 Linux、macOS 等)中创建链接的命令。它可以创建硬链接(hard link)和符号链接(symbolic link),也称为软链接(soft link)。理解 `ln` 命令的使用及其选项对文件系统的操作和管理非常重要。
### 基本概念
- **硬链接(Hard Link):**
- 硬链接是文件的直接引用。每个硬链接都指向相同的 inode,意味着它们是同一个文件,只是有不同的文件名。删除一个硬链接不会删除实际文件,除非删除的是最后一个硬链接。
- 硬链接只能在同一文件系统中创建,不能跨文件系统。
- 硬链接不能链接目录。
- **符号链接(Symbolic Link):**
- 符号链接是文件的快捷方式,类似于 Windows 上的快捷方式。它们包含指向另一个文件或目录的路径。
- 符号链接可以跨文件系统创建,也可以指向不存在的目标(如果目标后来被创建,符号链接会自动指向它)。
- 符号链接可以链接目录。
### `ln` 命令的基本语法
```bash
ln [选项] 源文件 [目标文件]
```
- `源文件`:要链接的文件或目录。
- `目标文件`:要创建的链接。如果未指定,则在当前目录下创建与源文件同名的链接。
### 常用选项
1. **`-s` 选项:**
- 创建符号链接(软链接)。
- 示例:
```bash
ln -s /path/to/source /path/to/link
```
这个命令将在 `/path/to/link` 创建一个指向 `/path/to/source` 的符号链接。
2. **`-f` 选项:**
- 强制覆盖已存在的目标文件。
- 如果目标位置已有一个文件或链接,使用 `-f` 可以强制删除它并创建新的链接。
- 示例:
```bash
ln -sf /path/to/source /path/to/link
```
3. **`-v` 选项:**
- 输出详细信息,显示命令执行时的每个步骤。
- 示例:
```bash
ln -sv /path/to/source /path/to/link
```
这个命令会显示链接创建的过程。
4. **`-i` 选项:**
- 如果目标文件已存在,`-i` 选项会提示用户确认是否覆盖。
- 示例:
```bash
ln -si /path/to/source /path/to/link
```
5. **`-b` 选项:**
- 在覆盖目标文件之前,为目标文件创建一个备份。
- 默认情况下,备份文件会附加一个 `~` 后缀。
- 示例:
```bash
ln -sb /path/to/source /path/to/link
```
6. **`-n` 选项:**
- 当目标是符号链接时,不要将目标链接视为目录。这在尝试在符号链接指向的目录中创建链接时很有用。
- 示例:
```bash
ln -sn /path/to/source /path/to/link
```
7. **`-T` 选项:**
- 将目标始终视为普通文件。此选项有助于避免将目标解释为目录。
- 示例:
```bash
ln -sT /path/to/source /path/to/link
```
8. **`-r` 选项:**
- 创建相对路径的符号链接。它会相对于链接所在的目录创建符号链接,而不是绝对路径。
- 示例:
```bash
ln -sr /path/to/source /path/to/link
```
9. **`-P` 选项:**
- 当指定符号链接作为源文件时,使用符号链接本身作为目标,而不是它指向的目标文件。
- 示例:
```bash
ln -sP /path/to/link1 /path/to/link2
```
### 示例
1. **创建硬链接:**
```bash
ln /path/to/source /path/to/hardlink
```
这个命令创建了一个硬链接 `/path/to/hardlink`,它与 `/path/to/source` 是相同的文件。
2. **创建符号链接:**
```bash
ln -s /path/to/source /path/to/symlink
```
这个命令创建了一个符号链接 `/path/to/symlink`,它指向 `/path/to/source`。
3. **创建符号链接并强制覆盖:**
```bash
ln -sf /path/to/source /path/to/existinglink
```
这个命令会在 `/path/to/existinglink` 位置创建一个新的符号链接,覆盖现有的文件或链接。
### 注意事项
- **权限要求**:使用 `ln` 命令时,通常需要对目标目录和文件具有写权限。
- **跨文件系统的限制**:硬链接不能跨文件系统创建,这点需要特别注意。

3.3 创建目录(mkdir)

1
2
3
4
5
6
7
8
9
10
mkdir tools          //在当前目录下创建一个名为tools的目录
mkdir /bin/tools //在指定目录下创建一个名为tools的目录
-m, 这个东西就是一般的mkdir+chmod mkdir -m 755 doge
-p, 这玩意可以一次性创建多重目录
-v, 为每个新建的目录打印一条信息
-Z 这个东西就是给创建的目录加上SELinux安全上下文
--context[=CTX] like -Z, or if CTX is specified then set the SELinux
or SMACK security context to CTX
--help 显示此帮助信息并退出
--version 显示版本信息并退出

3.3 删除目录与文件(rm)

1
2
3
4
5
6
7
8
9
10
  rm 文件名              //删除当前目录下的文件
rm -f 文件名 //删除当前目录的的文件(不询问)
rm -r 文件夹名 //递归删除当前目录下此名的目录
rm -rf 文件夹名 //递归删除当前目录下此名的目录(不询问)
rm -rf * //将当前目录下的所有目录和文件全部删除
rm -rf /* //将根目录下的所有文件全部删除【慎用!相当于格式化系统】

-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。

3.4 修改目录(mv)

1
2
3
4
5
6
7
8
mv 当前目录名 新目录名        //修改目录名,同样适用与文件操作
mv /usr/tmp/tool /opt //将/usr/tmp目录下的tool目录剪切到 /opt目录下面
mv -r /usr/tmp/tool /opt //递归剪切目录中所有文件和文件夹
-b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
-i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
-f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
-n: 不要覆盖任何已存在的文件或目录。
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。

3.5 拷贝目录(cp)

1
2
3
4
5
6
7
8
9
10
11
cp /usr/tmp/tool /opt       //将/usr/tmp目录下的tool目录复制到 /opt目录下面
cp -r /usr/tmp/tool /opt //递归剪复制目录中所有文件和文件夹
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于 dpR 参数组合。
-d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
-r 或 --recursive:用于复制目录及其所有的子目录和文件,如果要复制目录,需要使用该选项。
-i 或 --interactive:在复制前提示确认,如果目标文件已存在,则会询问是否覆盖,回答 y 时目标文件将被覆盖。。
-u 或 --update:仅复制源文件中更新时间较新的文件。
-v 或 --verbose:显示详细的复制过程。
-p 或 --preserve:保留源文件的权限、所有者和时间戳信息。
-f 或 --force:强制复制,即使目标文件已存在也会覆盖,而且不给出提示。
-l:不复制文件,只是生成链接文件。

3.6 搜索目录(find)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
find [路径] [匹配条件] [动作]       

匹配条件 中可使用的选项有二三十个之多,以下列出最常用的部份:
-name pattern:按文件名查找,支持使用通配符 * 和 ?。
-type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
-size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
-mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
-user username:按文件所有者查找。
-group groupname:按文件所属组查找。

动作: 可选的,用于对匹配到的文件执行操作,比如删除、复制等。
find 命令中用于时间的参数如下:
-amin n:查找在 n 分钟内被访问过的文件。
-atime n:查找在 n*24 小时内被访问过的文件。
-cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
-ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。
-mmin n:查找在 n 分钟内被修改过的文件。
-mtime n:查找在 n*24 小时内被修改过的文件。

find . -type f -perm 644 -exec ls -l {} \;
查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
- {}:一个占位符,代表找到的每个文件。
- \;:表示命令的结束,注意反斜杠 \ 是为了转义。

3.7 查看当前目录(pwd\xargs)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  pwd                         //显示当前位置路径

xargs 是一个非常有用的 Linux 命令,主要用于将标准输入的数据转换为命令行参数。它可以和其他命令结合使用,处理大量的数据,使得这些数据可以被传递给其他命令。
### 基本用法
echo "file1 file2 file3" | xargs rm
这个命令会删除 file1、file2 和 file3 文件。
### 常见选项
- -n:指定每个命令行中的参数个数。例如:
echo "1 2 3 4 5" | xargs -n 2 echo
输出:
1 2
3 4
5
- -d:指定输入项的分隔符,默认为空格和换行符。例如:
echo "one,two,three" | xargs -d ',' echo
输出:
one two three
- -I:替换字符串。可以用来将输入的每一行替换到指定位置。例如:
echo "file1 file2" | xargs -I {} mv {} backup/
这个命令将 file1 和 file2 移动到 backup 目录。
### 在管道中使用
xargs 通常与其他命令结合使用,例如 find:
find . -name "*.txt" | xargs cat
这个命令会查找当前目录下所有 .txt 文件并显示其内容。
### 注意事项
1. **参数超限**:如果要处理的文件或数据量非常大,可能会超过系统允许的命令行参数长度(ARG_MAX)。这个时候,可以使用 -n 选项限制每次传递的参数数量。
2. **安全性**:在处理不受信任的输入时要小心,确保不会意外执行恶意命令。
3. **处理空输入**:当 xargs 接收到空输入时,默认不会执行任何命令。如果需要处理空输入,可以加上 -r 选项。
### 示例
# 统计当前目录下所有 .log 文件的行数
find . -name "*.log" | xargs wc -l

4.1修改文件属性(touch)

1
2
3
4
5
6
7
8
9
10
11
touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件
-a 改变档案的读取时间记录。
-m 改变档案的修改时间记录。
-c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
-f 不使用,是为了与其他 unix 系统的相容性而保留。
-r 使用参考档的时间记录,与 --file 的效果一样。
-d 设定时间与日期,可以使用各种不同的格式。
-t 设定档案的时间记录,格式与 date 指令相同。
--no-create 不会建立新档案。
--help 列出指令格式。
--version 列出版本讯息。

4.2 编辑文件(vi、vim)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vi 文件名              //打开需要编辑的文件
--进入后,操作界面有三种模式:命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)
命令模式
-刚进入文件就是命令模式,通过方向键控制光标位置,
-使用命令"dd"删除当前整行
-使用命令"/字段"进行查找
-按"i"在光标所在字符前开始插入
-按"a"在光标所在字符后开始插入
-按"o"在光标所在行的下面另起一新行插入
-按":"进入底行模式
插入模式
-此时可以对文件内容进行编辑,左下角会显示 "-- 插入 --""
-按"ESC"进入底行模式
底行模式
-退出编辑: :q
-强制退出: :q!
-保存并退出: :wq
## 操作步骤示例 ##
1.保存文件:按"ESC" -> 输入":" -> 输入"wq",回车 //保存并退出编辑
2.取消操作:按"ESC" -> 输入":" -> 输入"q!",回车 //撤销本次修改并退出编辑
## 补充 ##
vim +10 filename.txt //打开文件并跳到第10行
vim -R /etc/passwd //以只读模式打开文件

4.3 查看文件cat\less\more\taill

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  cat a.txt          //查看文件内容
-n 选项对输出行进行编号
-s 选项,cat 命令将把多个连续的空行折叠成一个
-b:仅对非空行进行编号
-v:查看不可见字符
-e:显示不可见字符,包括行尾
-t:显示不可见字符,包括制表符

less a.txt //PgUp向上翻页,PgDn向下翻页,"q"退出查看
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将"tab"键显示为规定的数字空格
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向上翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页

more a.txt //显示百分比,回车查看下一行,空格查看下一页,"q"退出查看
-num 一次显示的行数
-d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '哔' 声
-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
fileNames 欲显示内容的文档,可为复数个数

tail -100 a.txt //查看文件的后100行,"Ctrl+C"退出查看
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

5.1 文件权限说明

1
2
3
4
5
6
7
文件权限简介:'r' 代表可读(4),'w' 代表可写(2),'x' 代表执行权限(1),括号内代表"8421法"
##文件权限信息示例:-rwxrw-r--
-第一位:'-'就代表是文件,'d'代表是文件夹
-第一组三位:拥有者的权限
-第二组三位:拥有者所在的组,组员的权限
-第三组三位:代表的是其他用户的权限

5.2 文件权限chmod\chown

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
普通授权    chmod +x a.txt    
8421法 chmod 777 a.txt //4(r)+2(w)+1(x)=7,"7"说明授予所有权限
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是,例 chmod a+x表示给拥有者、群组、其他用户执行权限。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:

-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本

chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令
user : 新的文件拥有者的使用者 ID
group : 新的文件拥有者的使用者组(group)
-c : 显示更改的部分的信息
-f : 忽略错误信息
-h :修复符号链接
-v : 显示详细的处理信息
-R : 处理指定目录以及其子目录下的所有文件
--help : 显示辅助说明
--version : 显示版本
例chown treeman:treeman test
drwxr-xr-x. 2 treeman treeman 15 9月 1 09:29 test
## 给test文件夹修改归属群组和拥有者


如果出现sudo加命令后报错:不在sudoers文件中,此事将会上报
解决方法:su root # 使用root用户
whereis sudoers # 查看sudoers命令文件在哪
vim /etc/sudoers # 找到这个文件,编辑
找到## Allow root to run any commands anywhere
root ALL=(ALL) ALL
#########添加对应内容,用户就可以使用sudo用户
root 表示用户名,如果是用户组,加百分号,这样写:%组名
ALL 表示允许登录的主机,ALL就表示允许任意主机
(ALL) 表示以谁的身份执行,ALL表示root身份
ALL 表示当前用户可以执行的命令,多个命令需要使用英文道号分割

6.1 解压包常见格式

1
2
3
4
5
.zip、.rar        //windows系统中压缩文件的扩展名
.tar //Linux中打包文件的扩展名
.gz //Linux中压缩文件的扩展名
.tar.gz //Linux中打包并压缩文件的扩展名

6.2 打包文件tar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
tar -zcvf 打包压缩后的文件名 要打包的文件
参数说明:z:调用gzip压缩命令进行压缩; c:打包文件; v:显示运行过程; f:指定文件名;
示例:
tar -zcvf a.tar file1 file2,... //多个文件压缩打包
-A或--catenate 新增文件到已存在的备份文件。
-b<区块数目>或--blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes。
-B或--read-full-records 读取数据时重设区块大小。
-c或--create 建立新的备份文件。
-C<目的目录>或--directory=<目的目录> 切换到指定的目录。
-d或--diff或--compare 对比备份文件内和文件系统上的文件的差异。
-f<备份文件>或--file=<备份文件> 指定备份文件。
-F<Script文件>或--info-script=<Script文件> 每次更换磁带时,就执行指定的Script文件。
-g或--listed-incremental 处理GNU格式的大量备份。
-G或--incremental 处理旧的GNU格式的大量备份。
-h或--dereference 不建立符号连接,直接复制该连接所指向的原始文件。
-i或--ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
-k或--keep-old-files 解开备份文件时,不覆盖已有的文件。
-K<文件>或--starting-file=<文件> 从指定的文件开始还原。
-l或--one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制。
-L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
-m或--modification-time 还原文件时,不变更文件的更改时间。
-M或--multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
-N<日期格式>或--newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
-o或--old-archive或--portability 将资料写入备份文件时使用V7格式。
-O或--stdout 把从备份文件里还原的文件输出到标准输出设备。
-p或--same-permissions 用原来的文件权限还原文件。
-P或--absolute-names 文件名使用绝对名称,不移除文件名称前的"/"号。
-r或--append 新增文件到已存在的备份文件的结尾部分。
-R或--block-number 列出每个信息在备份文件中的区块编号。
-s或--same-order 还原文件的顺序和备份文件内的存放顺序相同。
-S或--sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
-t或--list 列出备份文件的内容。
-T<范本文件>或--files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件。
-u或--update 仅置换较备份文件内的文件更新的文件。
-U或--unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
-v或--verbose 显示指令执行过程。
-V<卷册名称>或--label=<卷册名称> 建立使用指定的卷册名称的备份文件。
-w或--interactive 遭遇问题时先询问用户。
-W或--verify 写入备份文件后,确认文件正确无误。
-x或--extract或--get 从备份文件中还原文件。
-X<范本文件>或--exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件。
-z或--gzip或--ungzip 通过gzip指令处理备份文件。
-Z或--compress或--uncompress 通过compress指令处理备份文件。
-<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
--after-date=<日期时间> 此参数的效果和指定"-N"参数相同。
--atime-preserve 不变更文件的存取时间。
--backup=<备份方式>或--backup 移除文件前先进行备份。
--checkpoint 读取备份文件时列出目录名称。
--concatenate 此参数的效果和指定"-A"参数相同。
--confirmation 此参数的效果和指定"-w"参数相同。
--delete 从备份文件中删除指定的文件。
--exclude=<范本样式> 排除符合范本样式的文件。
--group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
--help 在线帮助。
--ignore-failed-read 忽略数据读取错误,不中断程序的执行。
--new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同。
--newer-mtime 只保存更改过的文件。
--no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
--null 从null设备读取文件名称。
--numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
--owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
--posix 将数据写入备份文件时使用POSIX格式。
--preserve 此参数的效果和指定"-ps"参数相同。
--preserve-order 此参数的效果和指定"-A"参数相同。
--preserve-permissions 此参数的效果和指定"-p"参数相同。
--record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
--recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
--remove-files 文件加入备份文件后,就将其删除。
--rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令。
--same-owner 尝试以相同的文件拥有者还原文件。
--suffix=<备份字尾字符串> 移除文件前先行备份。
--totals 备份文件建立后,列出文件大小。
--use-compress-program=<执行指令> 通过指定的指令处理备份文件。
--version 显示版本信息。
--volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。

6.3 解压文件unzip

1
2
3
4
5
tar -zxvf a.tar                      //解包至当前目录
tar -zxvf a.tar -C /usr------ //指定解压的位置
unzip test.zip //解压*.zip文件
unzip -l test.zip //查看*.zip文件的内容

7.1 whereis

1
2
3
4
5
6
7
8
9
10
whereis ls             //将和ls文件相关的文件都查找出来

-b  只查找二进制文件。
-B<目录>  只在设置的目录下查找二进制文件。
-f  不显示文件名前的路径名称。
-m  只查找说明文件。
-M<目录>  只在设置的目录下查找说明文件。
-s  只查找原始代码文件。
-S<目录>  只在设置的目录下查找原始代码文件。
-u  查找不包含指定类型的文件。

7.2 which

1
2
3
4
5
6
 说明:which指令会在环境变量$PATH设置的目录里查找符合条件的文件。
which bash //查看指令"bash"的绝对路径
-n<文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p<文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径。
-w  指定输出时栏位的宽度。
-V  显示版本信息。

7.3 sudo

1
2
3
4
说明:sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。需要输入自己账户密码。
使用权限:在 /etc/sudoers 中有出现的使用者
sudo -l //列出目前的权限
$ sudo -u yao vi ~www/index.html //以 yao 用户身份编辑 home 目录下www目录中的 index.html 文件

7.4 grep

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  grep -i "the" demo_file              //在文件中查找字符串(不区分大小写)
grep -A 3 -i "example" demo_text //输出成功匹配的行,以及该行之后的三行
grep -r "ramesh" * //在一个文件夹中递归查询包含指定字符串的文件

-a --text # 不要忽略二进制数据。
-A <显示行数> --after-context=<显示行数> # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b --byte-offset # 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-B<显示行数> --before-context=<显示行数> # 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c --count # 计算符合范本样式的列数。
-C<显示行数> --context=<显示行数>或-<显示行数> # 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> --directories=<动作> # 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> --regexp=<范本样式> # 指定字符串作为查找文件内容的范本样式。
-E --extended-regexp # 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f<范本文件> --file=<规则文件> # 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F --fixed-regexp # 将范本样式视为固定字符串的列表。
-G --basic-regexp # 将范本样式视为普通的表示法来使用。
-h --no-filename # 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H --with-filename # 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i --ignore-case # 忽略字符大小写的差别。
-l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称。
-L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。
-n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号。
-P --perl-regexp # PATTERN 是一个 Perl 正则表达式
-q --quiet或--silent # 不显示任何信息。
-R/-r --recursive # 此参数的效果和指定“-d recurse”参数相同。
-s --no-messages # 不显示错误信息。
-v --revert-match # 反转查找。
-V --version # 显示版本信息。
-w --word-regexp # 只显示全字符合的列。
-x --line-regexp # 只显示全列符合的列。
-y # 此参数效果跟“-i”相同。
-o # 只输出文件中匹配到的部分。
-m <num> --max-count=<num> # 找到num行结果后停止查找,用来限制匹配行数

规则表达式
^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ # 锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。
. # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.* # 一起用代表任意字符。
[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
(..) # 标记匹配字符,如'(love)',love被标记为1。
< # 锚定单词的开始,如:'<grep'匹配包含以grep开头的单词的行。
> # 锚定单词的结束,如'grep>'匹配包含以grep结尾的单词的行。
x{m} # 重复字符x,m次,如:'0{5}'匹配包含5个o的行。
x{m,} # 重复字符x,至少m次,如:'o{5,}'匹配至少有5个o的行。
x{m,n} # 重复字符x,至少m次,不多于n次,如:'o{5,10}'匹配5--10个o的行。
\w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b # 单词锁定符,如: '\bgrep\b'只匹配grep。

7.5 service

1
2
3
4
5
说明:service命令用于运行System V init脚本,这些脚本一般位于/etc/init.d文件下,这个命令可以直接运行这个文件夹里面的脚本,而不用加上路径
service ssh status //查看服务状态
service --status-all //查看所有服务状态
service ssh restart //重启服务

7.6 free\head

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  说明:这个命令用于显示系统当前内存的使用情况,包括已用内存、可用内存和交换内存的情况 
free -g //以G为单位输出内存的使用量,-g为GB,-m为MB,-k为KB,-b为字节
free -t //查看所有内存的汇总
-b  以Byte为单位显示内存使用情况。
-k  以KB为单位显示内存使用情况。
-m  以MB为单位显示内存使用情况。
-h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:
B = bytes
K = kilos
M = megas
G = gigas
T = teras

-o  不显示缓冲区调节列。
-s<间隔秒数>  持续观察内存使用状况。
-t  显示内存总和列。
-V  显示版本信息。

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数

7.7 top\sort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
top命令经常用来监控linux的系统状况,是常用的性能分析工具

-d number number代表秒数,表示top命令显示的页面更新一次的间隔 (default=5s)
-b 以批次的方式执行top
-n 与-b配合使用,表示需要进行几次top命令的输出结果
-p 指定特定的pid进程号进行观察

top命令显示的页面还可以输入以下按键执行相应的功能(注意大小写区分的)
? 显示在top当中可以输入的命令
P 以CPU的使用资源排序显示
M 以内存的使用资源排序显示
N 以pid排序显示
T 由进程使用的时间累计排序显示
k 给某一个pid一个信号,可以用来杀死进程(9)
r 给某个pid重新定制一个nice值(即优先级)
q 退出top(用ctrl+c也可以退出top)

top - 14:49:28 up 1:33, 1 user, load average: 0.00, 0.00, 0.00
14:49:28 表示当前时间
up 1:33 系统远行时间,格式为时:分
1 user 当前登陆用户数
Tasks: 80 total, 2 running, 78 sleeping, 0 stopped, 0 zombie
Tasks: 80 total 进程总数
2 running 正在运行的进程数
78 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
0.0%us 用户空间占用CPU百分比
0.0%sy 内核空间占用CPU百分比
0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比
100.0%id 空闲CPU百分比
0.0%wa 等待输入输出的CPU时间百分比
0.0%hi 硬中断(Hardware IRQ)占用CPU的百分比
0.0%si 软中断(Software Interrupts)占用CPU的百分比
0.0 st 用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间
Mem: 1922488k total, 406936k used, 1515552k free, 11940k buffers
1922488k total 物理内存总量
406936k used 使用的物理内存总量
1515552k free 空闲内存总量
11940k buffers 用作内核缓存的内存量
Swap: 835576k total, 0k used, 835576k free, 111596k cached
835576k total 交换区总量
0k used 使用的交换区总量
835576k free 空闲交换区总量
111596k cached 缓冲的交换区总量

PID 进程id
USER 进程所有者的用户名
PR 优先级
NI nice值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR 共享内存大小,单位kb
S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
-b 忽略每行前面开始出的空格字符。从第一个可见字符开始比较。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,忽略字符大小写.
-h:使用易读性数字(例如:2K、1G)
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-c 检查文件是否已经按照顺序排序。
-m 将几个排序好的文件进行合并。
-M 前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o <输出文件> 将排序后的结果存入指定的文件。
-r 降序排列(默认是升序)。
-t <分隔字符> 指定排序时所用的栏位分隔字符。
-k field1[,field2] 按指定的列进行排序。
-u 排序后相同的行只显示一次(默认按整行进行比较)
--help 显示帮助。
--version 显示版本信息。

7.8 df、du

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
说明:显示文件系统的磁盘使用情况
df -h //一种易看的显示
-a, --all:显示所有文件系统,包括虚拟文件系统。
-B, --block-size=SIZE:指定块大小,以特定单位显示磁盘空间信息(如 MB、GB)。
-h, --human-readable:以人类可读的格式显示输出结果。
-H, --si:以 1000 作为基数,以 SI 单位显示输出结果(例如,MB、GB)。
-i, --inodes:显示 inode 使用情况而不是块使用情况。
-k, --kilobytes:以 KB 作为单位显示磁盘空间信息。
-l, --local:仅显示本地文件系统。
-m, --portability:使用 POSIX 输出格式。
-n, --no-sync:不执行文件系统同步操作。
-P, --portability:使用 POSIX 输出格式。
-t, --type=TYPE:仅显示指定类型的文件系统。
-T, --print-type:显示文件系统的类型。
-x, --exclude-type=TYPE:排除指定类型的文件系统。
--sync:在显示文件系统信息之前执行文件系统同步操作。
--total:在输出的最后一行显示总计。
-v, --verbose:详细显示文件系统信息。
-l, --local:仅显示本地文件系统。
--help:显示帮助信息并退出。
--version:显示版本信息并退出。

du命令参数:
-s 对每个Names参数只给出占用的数据块总数
-a 递归地显示指定目录中各文件及子目录中各文件占用的数据块数
-b 以字节为单位列出磁盘空间使用情况(系统默认以k字节为单位)
-k 以1024字节为单位列出磁盘空间使用情况
-c 最后再加上一个总计(系统默认设置)
-l 计算所有的文件大小,对硬链接文件,则计算多次
-x 跳过在不同文件系统上的目录不予统计
-h 以K,M,G为单位,提高信息的可读性

7.9 mount

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
mount /dev/sdb1 /u01              //挂载一个文件系统,需要先创建一个目录,然后将这个文件系统挂载到这个目录上
dev/sdb1 /u01 ext2 defaults 0 2 //添加到fstab中进行自动挂载,这样任何时候系统重启的时候,文件系统都会被加载

-V:显示程序版本
-h:显示辅助讯息
-v:显示较讯息,通常和 -f 用来除错。
-a:将 /etc/fstab 中定义的所有档案系统挂上。
-F:这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。
-f:通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
-n:一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
-s-r:等于 -o ro
-w:等于 -o rw
-L:将含有特定标签的硬盘分割挂上。
-U:将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。
-t:指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。
-o async:打开非同步模式,所有的档案读写动作都会用非同步模式执行。
-o sync:在同步模式下执行。
-o atime、-o noatime:当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。
-o auto、-o noauto:打开/关闭自动挂上模式。
-o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.
-o dev、-o nodev-o exec、-o noexec允许执行档被执行。
-o suid、-o nosuid:
允许执行档在 root 权限下执行。
-o user、-o nouser:使用者可以执行 mount/umount 的动作。
-o remount:将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。
-o ro:用唯读模式挂上。
-o rw:用可读写模式挂上。
-o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。

7.10 uname

1
2
3
4
5
6
7
8
9
10
11
说明:uname可以显示一些重要的系统信息,例如内核名称、主机名、内核版本号、处理器类型之类的信息 
uname -a
-a 或--all  显示全部的信息,包括内核名称、主机名、操作系统版本、处理器类型和硬件架构等。。
-m 或--machine  显示处理器类型。
-n 或--nodename  显示主机名。
-r 或--release  显示内核版本号。
-s 或--sysname  显示操作系统名称。
-v  显示操作系统的版本。
--help  显示帮助。
--version  显示版本信息。
-p 显示处理器类型(与 -m 选项相同)。

7.11 yum

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  说明:安装插件命令
yum install httpd //使用yum安装apache
yum update httpd //更新apache
yum remove httpd //卸载/删除apache

1. 列出所有可更新的软件清单命令:yum check-update
2. 更新所有软件命令:yum update
3. 仅安装指定的软件命令:yum install <package_name>
4. 仅更新指定的软件命令:yum update <package_name>
5. 列出所有可安裝的软件清单命令:yum list
6. 删除软件包命令:yum remove <package_name>
7. 查找软件包命令:yum search <keyword>
8. 清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers

7.12 rpm

1
2
3
4
5
说明:插件安装命令
rpm -ivh httpd-2.2.3-22.0.1.el5.i386.rpm //使用rpm文件安装apache
rpm -uvh httpd-2.2.3-22.0.1.el5.i386.rpm //使用rpm更新apache
rpm -ev httpd //卸载/删除apache

7.13 date

1
2
date -s "01/31/2010 23:59:53"   ///设置系统时间

7.14 wget、curl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
  说明:使用wget从网上下载软件、音乐、视频 
示例:wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz
//下载文件并以指定的文件名保存文件
wget -O nagios.tar.gz http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz

# 启动:
-V, --version 显示 Wget 的版本信息并退出
-h, --help 打印此帮助
-b, --background 启动后转入后台
-e, --execute=命令 运行一个“.wgetrc”风格的命令

# 日志和输入文件:
-o, --output-file=文件 将日志信息写入 FILE
-a, --append-output=文件 将信息添加至 FILE
-d, --debug 打印大量调试信息
-q, --quiet 安静模式 (无信息输出)
-v, --verbose 详尽的输出 (此为默认值)
-nv, --no-verbose 关闭详尽输出,但不进入安静模式
--report-speed=类型 以 <类型> 报告带宽。类型可以是 bits
-i, --input-file=文件 下载本地或外部 <文件> 中的 URL
-F, --force-html 把输入文件当成 HTML 文件
-B, --base=URL 解析相对于 URL 的 HTML 输入文件链接 (-i -F)
--config=文件 指定要使用的配置文件
--no-cookies 不读取任何配置文件
--rejected-log=文件 将拒绝 URL 的原因写入 <文件>。

# 下载:
-t, --tries=数字 设置重试次数为 <数字> (0 代表无限制)
--retry-connrefused 即使拒绝连接也是重试
-O, --output-document=文件 将文档写入 FILE
-nc, --no-clobber 不要下载已存在将被覆盖的文件
--no-netrc don't try to obtain credentials from .netrc
-c, --continue 断点续传下载文件
--start-pos=偏移量 从由零计数的 <偏移量> 开始下载
--progress=类型 选择进度条类型
--show-progress 在任意啰嗦状态下都显示进度条
-N, --timestamping 只获取比本地文件新的文件
--no-if-modified-since 不要在时间戳 (timestamping) 模式下使用if-modified-since get 条件请求
--no-use-server-timestamps 不用服务器上的时间戳来设置本地文件
-S, --server-response 打印服务器响应
--spider 不下载任何文件
-T, --timeout=SECONDS 将所有超时设为 SECONDS 秒
--dns-timeout=SECS 设置 DNS 查寻超时为 SECS 秒
--connect-timeout=SECS 设置连接超时为 SECS 秒
--read-timeout=SECS 设置读取超时为 SECS 秒
-w, --wait=SECONDS 等待间隔为 SECONDS 秒
--waitretry=SECONDS 在获取文件的重试期间等待 1..SECONDS 秒
--random-wait 获取多个文件时,每次随机等待间隔 (0.5~1.5)*WAIT 秒
--no-proxy 禁止使用代理
-Q, --quota=数字 设置获取配额为 <数字> 字节
--bind-address=ADDRESS 绑定至本地主机上的 ADDRESS (主机名或是 IP)
--limit-rate=RATE 限制下载速率为 RATE
--no-dns-cache 关闭 DNS 查询缓存
--restrict-file-names=系统 限定文件名中的字符为 <系统> 允许的字符
--ignore-case 匹配文件/目录时忽略大小写
-4, --inet4-only 仅连接至 IPv4 地址
-6, --inet6-only 仅连接至 IPv6 地址
--prefer-family=地址族 首先连接至指定家族(IPv6,IPv4 或 none)的地址
--user=用户 将 ftp 和 http 的用户名均设置为 <用户>
--password=密码 将 ftp 和 http 的密码均设置为 <密码>
--ask-password 提示输入密码
--use-askpass=命令 指定用于请求用户名和密码的凭据管理器。
如果没有提供指定命令,程序将使用 WGET_ASKPASS 或SSH_ASKPASS 环境变量。
--no-iri 关闭 IRI 支持
--local-encoding=ENC 使用 ENC 作为 IRI (国际化资源标识符) 的本地编码
--remote-encoding=ENC 使用 ENC 作为默认远程编码
--unlink 覆盖前移除文件
--no-xattr 不要在文件的拓展属性中储存元数据

# 目录:
-nd, --no-directories 不创建目录
-x, --force-directories 强制创建目录
-nH, --no-host-directories 不要创建主 (host) 目录
--protocol-directories 在目录中使用协议名称
-P, --directory-prefix=前缀 保存文件到 <前缀>/..
--cut-dirs=数字 忽略远程目录中 <数字> 个目录层。

# HTTP 选项:
--http-user=用户 设置 http 用户名为 <用户>
--http-password=密码 设置 http 密码为 <密码>
--no-cache 不使用服务器缓存的数据。
--default-page=NAME 改变默认页 (通常是“index.html”)。
-E, --adjust-extension 以合适的扩展名保存 HTML/CSS 文档
--ignore-length 忽略头部的‘Content-Length’区域
--header=字符串 在头部插入 <字符串>
--max-redirect 每页所允许的最大重定向
--proxy-user=用户 使用 <用户> 作为代理用户名
--proxy-password=密码 使用 <密码> 作为代理密码
--referer=URL 在 HTTP 请求头包含‘Referer: URL’
--save-headers 将 HTTP 头保存至文件。
-U, --user-agent=代理 标识自己为 <代理> 而不是 Wget/VERSION。
--no-http-keep-alive 禁用 HTTP keep-alive (持久连接)。
--no-cookies 不使用 cookies。
--load-cookies=文件 会话开始前从 <文件> 中载入 cookies。
--save-cookies=文件 会话结束后保存 cookies 至 FILE。
--keep-session-cookies 载入并保存会话 (非永久) cookies。
--post-data=字符串 使用 POST 方式;把 <字串>作为数据发送。
--post-file=文件 使用 POST 方式;发送 <文件> 内容。
--method=HTTP方法 在请求中使用指定的 <HTTP 方法>。
--post-data=字符串 把 <字串> 作为数据发送,必须设置 --method
--post-file=文件 发送 <文件> 内容,必须设置 --method
--content-disposition 当选择本地文件名时允许 Content-Disposition
头部 (实验中)。
--content-on-error 在服务器错误时输出接收到的内容
--auth-no-challenge 不先等待服务器询问就发送基本 HTTP 验证信息。

# HTTPS (SSL/TLS) 选项:
--secure-protocol=PR choose secure protocol, one of auto, SSLv2,
SSLv3, TLSv1, TLSv1_1, TLSv1_2 and PFS
--https-only 只跟随安全的 HTTPS 链接
--no-check-certificate 不要验证服务器的证书。
--certificate=文件 客户端证书文件。
--certificate-type=类型 客户端证书类型,PEM 或 DER。
--private-key=文件 私钥文件。
--private-key-type=类型 私钥文件类型,PEM 或 DER。
--ca-certificate=文件 带有一组 CA 证书的文件。
--ca-directory=DIR 保存 CA 证书的哈希列表的目录。
--ca-certificate=文件 带有一组 CA 证书的文件。
--pinnedpubkey=文件/散列值 用于验证节点的公钥(PEM/DER)文件或
任何数量的 sha256 散列值,以 base64 编码、
“sha256//” 开头、用“;”间隔
--random-file=文件 用于初始化 SSL 伪随机数生成器(PRNG)的文件,应含有随机数据

# HSTS 选项:
--no-hsts 禁用 HSTS
--hsts-file HSTS 数据库路径(将覆盖默认值)

# FTP 选项:
--ftp-user=用户 设置 ftp 用户名为 <用户>。
--ftp-password=密码 设置 ftp 密码为 <密码>
--no-remove-listing 不要删除‘.listing’文件
--no-glob 不在 FTP 文件名中使用通配符展开
--no-passive-ftp 禁用“passive”传输模式
--preserve-permissions 保留远程文件的权限
--retr-symlinks 递归目录时,获取链接的文件 (而非目录)

# FTPS 选项:
--ftps-implicit 使用隐式 FTPS(默认端口 990)
--ftps-resume-ssl 打开数据连接时继续控制连接中的 SSL/TLS 会话
--ftps-clear-data-connection 只加密控制信道;数据传输使用明文
--ftps-fallback-to-ftp 回落到 FTP,如果目标服务器不支持 FTPS
# WARC 选项:
--warc-file=文件名 在一个 .warc.gz 文件里保持请求/响应数据
--warc-header=字符串 在头部插入 <字符串>
--warc-max-size=数字 将 WARC 的最大尺寸设置为 <数字>
--warc-cdx 写入 CDX 索引文件
--warc-dedup=文件名 不要记录列在此 CDX 文件内的记录
--no-warc-digests 不要计算 SHA1 摘要
--no-warc-keep-log 不要在 WARC 记录中存储日志文件
--warc-tempdir=目录 WARC 写入器的临时文件目录

# 递归下载:
-r, --recursive 指定递归下载
-l, --level=数字 最大递归深度 (inf 或 0 代表无限制,即全部下载)。
--delete-after 下载完成后删除本地文件
-k, --convert-links 让下载得到的 HTML 或 CSS 中的链接指向本地文件
--convert-file-only 只转换 URL 的文件部分(一般叫做“基础名”/basename)
--backups=N 写入文件 X 前,轮换移动最多 N 个备份文件
-K, --backup-converted 在转换文件 X 前先将它备份为 X.orig。
-m, --mirror -N -r -l inf --no-remove-listing 的缩写形式。
-p, --page-requisites 下载所有用于显示 HTML 页面的图片之类的元素。
--strict-comments 用严格方式 (SGML) 处理 HTML 注释。

# 递归接受/拒绝:
-A, --accept=列表 逗号分隔的可接受的扩展名列表
-R, --reject=列表 逗号分隔的要拒绝的扩展名列表
--accept-regex=REGEX 匹配接受的 URL 的正则表达式
--reject-regex=REGEX 匹配拒绝的 URL 的正则表达式
--regex-type=类型 正则类型 (posix|pcre)
-D, --domains=列表 逗号分隔的可接受的域名列表
--exclude-domains=列表 逗号分隔的要拒绝的域名列表
--follow-ftp 跟踪 HTML 文档中的 FTP 链接
--follow-tags=列表 逗号分隔的跟踪的 HTML 标识列表
--ignore-tags=列表 逗号分隔的忽略的 HTML 标识列表
-H, --span-hosts 递归时转向外部主机
-L, --relative 仅跟踪相对链接
-I, --include-directories=列表 允许目录的列表
--trust-server-names 使用重定向 URL 的最后一段作为本地文件名
-X, --exclude-directories=列表 排除目录的列表
-np, --no-parent 不追溯至父目录


curl是一个非常实用的、用来与服务器之间传输数据的工具;支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),curl设计为无用户交互下完成工作;curl提供了一大堆非常有用的功能,包括代理访问、用户认证、ftp上传下载、HTTP POST、SSL连接、cookie支持、断点续传...。

### 基本概念
- **URL**: `curl` 主要用于向 URL(统一资源定位符)发出请求,从而获取资源或提交数据。
- **HTTP 方法**: 常见的 HTTP 方法包括 GET、POST、PUT、DELETE 等。`curl` 支持这些方法并可以与服务器进行复杂的交互。
- **请求头和数据**: `curl` 可以自定义 HTTP 请求的头部信息和请求体内容。
### 基本语法
```bash
curl [选项] [URL]
```
### 常用选项
1. **`-X` 或 `--request` 选项:**
- 指定 HTTP 请求的方法,如 GET、POST、PUT、DELETE 等。
- 示例:
```bash
curl -X POST https://example.com/resource
```
该命令向 `https://example.com/resource` 发送一个 POST 请求。
2. **`-d` 或 `--data` 选项:**
- 发送 POST 请求时附加数据。可以传递表单数据或 JSON 数据。
- 示例:
```bash
curl -d "name=John&age=30" https://example.com/form
```
该命令向 `https://example.com/form` 发送 POST 请求,包含表单数据 `name=John&age=30`。

- 如果是 JSON 数据,可以结合 `-H` 选项使用:
```bash
curl -X POST -H "Content-Type: application/json" -d '{"name": "John", "age": 30}' https://example.com/api
```
3. **`-H` 或 `--header` 选项:**
- 自定义请求头。可以为请求添加或覆盖默认的 HTTP 头部信息。
- 示例:
```bash
curl -H "Authorization: Bearer token" https://example.com/protected
```
该命令向 `https://example.com/protected` 发送请求,并添加 `Authorization` 头。
4. **`-o` 选项:**
- 将响应内容保存到指定文件。
- 示例:
```bash
curl -o output.html https://example.com
```
该命令将 `https://example.com` 的响应内容保存到 `output.html` 文件中。
5. **`-O` 选项:**
- 直接将响应内容保存为与 URL 末尾相同的文件名。
- 示例:
```bash
curl -O https://example.com/file.zip
```
该命令会将 `file.zip` 文件下载到当前目录。
6. **`-L` 或 `--location` 选项:**
- 自动跟随重定向。当服务器返回 3xx 状态码时,`curl` 会自动跟随重定向到新地址。
- 示例:
```bash
curl -L https://example.com/redirect
```
7. **`-I` 或 `--head` 选项:**
- 只请求并显示响应的头部信息(HTTP 头)。
- 示例:
```bash
curl -I https://example.com
```
该命令只显示 `https://example.com` 的响应头,而不下载内容。
8. **`-u` 或 `--user` 选项:**
- 用于 HTTP 基本认证。格式为 `username:password`。
- 示例:
```bash
curl -u username:password https://example.com/protected
```
该命令使用用户名和密码访问受保护的资源。
9. **`-b` 或 `--cookie` 选项:**
- 发送带有请求的 Cookie 或从文件中读取 Cookie。
- 示例:
```bash
curl -b "name=value" https://example.com
```
或者:
```bash
curl -b cookies.txt https://example.com
```
10. **`-c` 选项:**
- 将服务器返回的 Cookie 保存到文件。
- 示例:
```bash
curl -c cookies.txt https://example.com
```
11. **`-v` 或 `--verbose` 选项:**
- 显示请求和响应的详细调试信息。
- 示例:
```bash
curl -v https://example.com
```
12. **`--compressed` 选项:**
- 请求时自动处理服务器返回的压缩内容,并在客户端解压缩。
- 示例:
```bash
curl --compressed https://example.com
```
13. **`-k` 或 `--insecure` 选项:**
- 在使用 HTTPS 时,跳过 SSL 证书的验证。这在开发环境中很有用,但在生产环境中应避免使用。
- 示例:
```bash
curl -k https://example.com
```
14. **`-s` 或 `--silent` 选项:**
- 静默模式,取消进度条输出和错误消息。这在脚本中非常有用。
- 示例:
```bash
curl -s https://example.com
```
15. **`-w` 或 `--write-out` 选项:**
- 显示有关请求的额外信息,如响应时间、状态码等。
- 示例:
```bash
curl -w "%{http_code}\n" https://example.com
```
### 示例用法
1. **下载文件并保存为特定名称:**
```bash
curl -o myfile.zip https://example.com/file.zip
```
2. **POST 提交表单数据:**
```bash
curl -X POST -d "username=user&password=pass" https://example.com/login
```
3. **使用 JSON 数据进行 POST 请求:**
```bash
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://example.com/api
```
4. **获取 HTTP 响应头信息:**
```bash
curl -I https://example.com
```
5. **带认证的请求:**
```bash
curl -u user:password https://example.com/protected
```
6. **下载文件并跟随重定向:**
```bash
curl -L -O https://example.com/redirectedfile.zip
```
### 注意事项
- **SSL/TLS 验证**: 在生产环境中使用 `curl` 时,建议避免使用 `-k` 选项来跳过 SSL 验证,以确保连接的安全性。
- **敏感信息**: 在使用 `-u` 传递用户名和密码时要小心,避免在命令行历史中暴露敏感信息。

7.15 ftp

1
2
3
4
5
6
ftp IP/hostname    //访问ftp服务器
mls *.html - //显示远程主机上文件列表
-v:显示所有响应信息。
-d:启用调试模式。
-i:关闭交互式提示。
-n:抑制自动登录。

7.16 scp

1
2
3
4
5
6
7
8
9
scp /opt/data.txt  192.168.1.101:/opt/    //将本地opt目录下的data文件发送到192.168.1.101服务器的opt目录下
-C 该选项启用压缩
-i 该选项将有助于识别文件或私钥
-l 此选项将有助于限制复制时的带宽
-P 该选项将有助于指定目标主机的特定 ssh 端口号
-p 此选项将有助于在复制时保留所需文件所需的权限、模式和访问时间
-q 该选项将有助于抑制 SSH 的警告消息
-r 此选项将有助于递归复制文件和目录
-v 此选项将提供详细输出

8.1 防火墙操作 firewalld

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
  service iptables status      //查看iptables服务的状态
service iptables start //开启iptables服务
service iptables stop //停止iptables服务
service iptables restart //重启iptables服务
chkconfig iptables off //关闭iptables服务的开机自启动
chkconfig iptables on //开启iptables服务的开机自启动

##centos7 防火墙操作
`firewalld` 是一种动态防火墙管理工具,主要用于 Linux 系统上,允许用户进行高效、灵活的防火墙管理。它使用 `zones`(区域)和 `services`(服务)的概念来简化配置,并支持通过命令行、图形界面或配置文件进行管理。
### 基本概念
- **Zones(区域)**: 防火墙的区域允许你根据网络接口的信任级别来定义规则。例如,`public` 区域可能限制更多的入站流量,而 `trusted` 区域则允许几乎所有流量。
- **Services(服务)**: 预定义的规则集合,例如允许 HTTP、HTTPS 或 SSH 流量等。
- **Rich Rules(丰富规则)**: 允许在基本的服务和端口规则之外定义更复杂的规则。
### 基本命令
#### 1. 启动、停止和重启 `firewalld`
- **启动 `firewalld` 服务:**
```bash
sudo systemctl start firewalld
- **停止 `firewalld` 服务:**

```bash
sudo systemctl stop firewalld
```

- **重启 `firewalld` 服务:**

```bash
sudo systemctl restart firewalld
```

- **查看服务状态:**

```bash
sudo systemctl status firewalld
```

#### 2. 查看和管理区域

- **列出所有区域:**

```bash
sudo firewall-cmd --list-all-zones
```

- **查看当前活动区域的详细信息:**

```bash
sudo firewall-cmd --get-active-zones
```

- **查看指定区域的详细信息:**

```bash
sudo firewall-cmd --zone=public --list-all
```

- **设置默认区域:**

```bash
sudo firewall-cmd --set-default-zone=public
```

#### 3. 管理区域的服务和端口

- **在指定区域中允许服务:**

```bash
sudo firewall-cmd --zone=public --add-service=http
```

- **在指定区域中永久允许服务:**

```bash
sudo firewall-cmd --zone=public --add-service=http --permanent
```

- **移除指定区域中的服务:**

```bash
sudo firewall-cmd --zone=public --remove-service=http
```

- **在指定区域中添加端口:**

```bash
sudo firewall-cmd --zone=public --add-port=8080/tcp
```

- **在指定区域中永久添加端口:**

```bash
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
```

- **移除指定区域中的端口:**

```bash
sudo firewall-cmd --zone=public --remove-port=8080/tcp
```

#### 4. 管理丰富规则

- **添加丰富规则:**

```bash
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
```

- **永久添加丰富规则:**

```bash
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept' --permanent
```

- **移除丰富规则:**

```bash
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
```

#### 5. 重新加载和检查配置

- **重新加载防火墙配置:**

```bash
sudo firewall-cmd --reload
```

- **查看当前防火墙配置:**

```bash
sudo firewall-cmd --list-all
```

- **列出所有活动的规则和服务:**

```bash
sudo firewall-cmd --list-all
```

- **检查端口是否开放:**

```bash
sudo firewall-cmd --query-port=8080/tcp
```

- **检查服务是否启用:**

```bash
sudo firewall-cmd --query-service=http
```

#### 6. 临时与永久配置

- **临时配置**: 在防火墙重新加载或服务重启前有效,仅在当前会话中保持。
- **永久配置**: 使用 `--permanent` 选项添加的规则会在防火墙重启后保持。

### 常见选项

- **`--zone`**: 指定要操作的区域。默认区域通常是 `public`,但可以指定其他区域,如 `internal`、`trusted` 等。
- **`--add-service`**: 添加服务规则。
- **`--remove-service`**: 移除服务规则。
- **`--add-port`**: 添加端口规则。
- **`--remove-port`**: 移除端口规则.
- **`--add-rich-rule`**: 添加丰富规则。
- **`--remove-rich-rule`**: 移除丰富规则。
- **`--reload`**: 重新加载配置,使永久规则生效。
- **`--list-all`**: 显示当前区域的所有配置。

### 示例

1. **允许 HTTP 和 HTTPS 服务:**

```bash
sudo firewall-cmd --zone=public --add-service=http
sudo firewall-cmd --zone=public --add-service=https
```

2. **允许特定 IP 地址的 SSH 访问:**

```bash
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept'
```

3. **在防火墙中添加和删除端口:**

```bash
sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent
sudo firewall-cmd --zone=public --remove-port=5000/tcp
```

4. **设置默认区域为 `trusted`:**

```bash
sudo firewall-cmd --set-default-zone=trusted
```

8.2 修改主机名(CentOS 7)

  • -   hostnamectl set-hostname 主机名  --修改主机名
        -h --help              显示帮助
           --version           显示安装包的版本
           --transient         修改临时主机名
           --static            修改瞬态主机名
           --pretty            修改灵活主机名
        -P --privileged        在执行之前获得的特权
           --no-ask-password   输入密码不提示
        -H --host=[USER@]HOST  操作远程主机
    
    Commands:
      status                 显示当前主机名设置
      set-hostname NAME      设置系统主机名
      set-icon-name NAME     为主机设置icon名
      set-chassis NAME       设置主机平台类型名
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
        


    ## 8.3 修改网络配置文件

    ```shell
    文件地址:/etc/sysconfig/network-scripts/ifcfg-eth0

    主要修改以下配置:
    TYPE=Ethernet //网络类型
    BOOTPROTO=static //静态IP
    DEVICE=ens00 //网卡名
    IPADDR=192.168.1.100 //设置的IP
    NETMASK=255.255.225.0 //子网掩码
    GATEWAY=192.168.1.1 //网关
    DNS1=192.168.1.1 //DNS
    DNS2=8.8.8.8 //备用DNS
    ONBOOT=yes //系统启动时启动此设置

    修改保存以后使用命令重启网卡:service network restart
    centos7命令:systemctl restart network
    还需关闭网络管理器,这是动态获取IP的网络管理器:systemctl stop NetworkManager
    systemctl disable NetworkManager

    ##如果以上方式还是不能ping通外网,如ping 8.8.8.8显示网络不可达,可以查看是否存在默认路由信息
    ip route
    #输出应有这样的信息default via <网关IP> dev <网卡名称>
    #若是没有可以添加默认路由
    sudo ip route add default via <网关IP>


8.3.1 网络常见问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
具体出现的情况
1、无法连接网络,无法连接shell
2、ping外网时显示未知的名称或服务ping不同
3、service network restart 失败
4、ifconfig中没有ens33
二、解决步骤
1、ifconfig 只有lo、virbr0,却没有ens33
ifconfig ens33 up2
2、上述命令执行后,ifconfig 是有ens33的了,但它里面没有ip
先执行下面步骤
systemctl stop NetworkManager
systemctl disable NetworkManager
然后激活连接
ifup ens33
接着重启网络
service network restart
再次ping即可ping通

8.4 配置host映射

1
2
3
4
5
6
修改文件: vi /etc/hosts
在文件最后添加映射地址,示例如下:
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
配置好以后保存退出,输入命令:ping node1 ,可见实际 ping 的是 192.168.1.101。

8.5 查看进程ps

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  ps -ef         //查看所有正在运行的进程
-e:显示所有进程。
-f:全格式显示。
-l:长格式显示。
-a:显示终端上的所有进程,包括其他用户的进程。
-u:显示进程的详细状态。
-x:显示没有控制终端的进程。
-T:显示当前线程的层次结构。
-o:自定义输出格式,其中 <format> 可以是如下的格式选项之一或组合:%cpu、%mem、%tty、%time、%cmd等。例如,ps -o pid,tty,cmd 将只显示进程ID、终端类型和执行的命令行。
--sort:按指定的字段对输出进行排序。
head:仅显示输出中的前N行,其中N是用户指定的数字。
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令

8.6 结束进程kill

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
```shell
kill pid //杀死该pid的进程
kill -9 pid //强制杀死该进程
-a:当处理当前进程时,不限制命令名和进程号的对应关系;
-l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称;
-p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;
-s <信息名称或编号>:指定要送出的信息;
-u:指定用户。

kill -9、kill -15
kill 与 kill -15

系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该signal后,将会发生以下的事情:

程序立刻停止;
当程序释放相应资源后再停止;
程序可能仍然继续运行;
大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后在停止。但是也有程序可以在接受到信号量后,做一些其他的事情,并且这些事情是可以配置的。如果程序正在等待IO,可能就不会立马做出相应。也就是说,SIGTERM多半是会被阻塞的、忽略。

kill -9

kill -9 pid等于kill -s 9 pid,表示强制,尽快终止一个进程。多半admin会用这个命令。

因此kill - 9表示强制杀死该进程;与SIGTERM相比,这个信号不能被捕获或忽略,同时接收这个信号的进程在收到这个信号时不能执行任何清理。

8.7 查看网络情况(netstat)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ping IP        //查看与此IP地址的连接情况
netstat -an //查看当前系统端口
netstat -an | grep 8080 //查看指定端口
-a或--all 显示所有连线中的Socket。
-A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。
-c或--continuous 持续列出网络状态。
-C或--cache 显示路由器配置的快取信息。
-e或--extend 显示网络其他相关信息。
-F或--fib 显示路由缓存。
-g或--groups 显示多重广播功能群组组员名单。
-h或--help 在线帮助。
-i或--interfaces 显示网络界面信息表单。
-l或--listening 显示监控中的服务器的Socket。
-M或--masquerade 显示伪装的网络连线。
-n或--numeric 直接使用IP地址,而不通过域名服务器。
-N或--netlink或--symbolic 显示网络硬件外围设备的符号连接名称。
-o或--timers 显示计时器。
-p或--programs 显示正在使用Socket的程序识别码和程序名称。
-r或--route 显示Routing Table。
-s或--statistics 显示网络工作信息统计表。
-t或--tcp 显示TCP传输协议的连线状况。
-u或--udp 显示UDP传输协议的连线状况。
-v或--verbose 显示指令执行过程。
-V或--version 显示版本信息。
-w或--raw 显示RAW传输协议的连线状况。
-x或--unix 此参数的效果和指定"-A unix"参数相同。
--ip或--inet 此参数的效果和指定"-A inet"参数相同。

8.8 快速清屏

1
2
ctrl+l        //清屏,往上翻可以查看历史操作
clear

评论