【Linux】常用命令——绝世无双

目录

一、文件基本操作命令

1. ls 展示目录列表

 2. pwd 显示当前所在路径

3. cd 切换目录

4. mkdir、touch 目录和文件的创建

5. rmdir、rm 目录和文件的删除

6. cp 复制文件或目录

7. mv 移动和重命名文件或目录

8. vi 、vim 编辑文件

9. cat 、tac 显示文件内容

10. less 、more 分屏显示文件内容

11. head 、tail 指定行数显示文件内容

12. ln 、unlink 文件链接符

1. 建立硬链接符

2. 建立软链接符

3. 解除链接符

 二、查找命令

 1. grep 查找文件内容

2. find 递归查目录或文件

3. which 查找命令位置

三、特殊操作符

1. 管道操作符 | 

2. 通配符 * 与 ?

3. 重定向符 > 、>> 、<

4. 转义符 \

5. 单引号转义符 ''

6. . 隐藏文件或目录

四、打包与压缩命令

1. tar 打包和压缩及解压缩

2. gzip .gz 格式压缩与解压缩

3. bzip2 .bz2 格式压缩与解压缩

5. rar .rar 格式压缩与解压缩

4. zip & unzip .zip 格式压缩与解压缩

五、文件权限操作命令

1. chown 属主和属组修改

2. chgrp 属组修改

3. chmod 文件权限修改

六、软件及进程管理命令

1. rpm .rpm格式软件的安装和删除

2. yum (源) 使用软件池安装或删除软件

 2.1 配置本地源

2.2 国内网络源

3. ps 查看进程

4. kill 结束进程

 七、设备管理

1. fdisk 、lsblk 查看分区列表

2. mount 、umount 挂载与卸载设备

3. 自动挂载 

4. dd 转换或拷贝文件 (制作 U 启动盘)

八、网络管理

1. ifconfig 网卡管理

1.1 多网卡配置(双网卡内外网)

2. route 路由管理

2.1 Linux 路由表

2.2 路由优先级

2.3 添加与删除路由表项

3. arp IP 映射 MAC 地址缓存表

3.1 IP & MAC Static 静态地址绑定

3.2 ARP 攻击防范

4. traceroute 测试访问目标经过路由

5. netstat 网络状态

九、系统管理

1. service 服务管理

2. chkconfig 服务自启管理

3. systemctl 系统管理

3.1 Unit 单元管理命令

3.2 单元类型

3.3 Unit 单元文件状态 &  服务状态

3.4 CentOS6.x & CentOS7.x 系统运行级别设置

3.4.1 永久修改系统默认运行级别配置文件

3.4.2 临时切换系统运行级别

3.5 CentOS6.x 至 CentOS7.x 命令的升级

3.6 电源模式管理

3.7 systemctl 操作 Unit 单元默认后缀 & Unit 名@模板

4. iptables 防火墙

5. firewall 防火墙

5.1 默认区域

5.2 常用添加与删除防火墙规则

5.3 示例

5.4 永久关闭防火墙 & SElinux

十、用户 & 组管理

1. groupadd 、groupdel 、groupmod 组的创建 & 删除 & 修改

2. useradd 、userdel 、usermod 用户的创建 & 删除 & 修改

3. passwd 、gpasswd 用户口令 & 组用户添加删除

4. id 查看用户信息

5. su 切换用户

6. sudo 普通用户超级权限工具

十一、日常命令

1. shutdown 关机&重启

2. 常用快捷命令

3. date 显示或修改系统时间&日期

4. df 显示磁盘占用空间

5. free 显示系统内存状态

十二、命令——长选项"--"、短选项 "-" 、无"-"选项、用法


一、文件基本操作命令

1. ls 展示目录列表

[OPTIONS]... [DIR | FILE]...

  • -a :显示目录下全部文件和文件夹,包括隐藏文件和文件夹。
  • -R :递归显示目录下的所有文件和文件夹。
  • -l :显示详细信息,如文件权限、大小、修改的时间等。等价于 ll 命令。
  • -h :和 -l 一起使用,易于阅读的文件大小 K 、M 、G ,而不是 byte 。

ls / ~/  :可指定显示多个目录。 

ls -lh FILE :显示指定文件信息。

列表详细目录中最前面字母代表的意思

- 普通文件

d 目录

c 字型装置问价

b 区块装置文件

p 具名贮列

f 一般文件

l 符号链接

s socket

 文件颜色表示的含义

浅蓝色 :链接文件。

灰色 :其它文件。

绿色 :可执行文件。

红色 :压缩文件。

蓝色 :目录。

黄色 :设备文件。

红色闪烁 :链接文件有问题。一般问题就是链接的源文件不存在。


 2. pwd 显示当前所在路径

pwd


3. cd 切换目录

[DIR]

  • ./ :当前目录。
  • ../ :上一级目录。
  • /  :系统根目录下。
  • ~ :当前用户的根目录下。
  • -  :上一次所在的目录。

4. mkdir、touch 目录和文件的创建

mkdir [OPTIONS]... [DIR]...

  • -p :若创建的目录不存在父目录则创建父目录。

mkdir -p DIR1/DIR2/DIR3...

touch [OPTIONS]... [FILE]...

touch File1 File2 FIle3...


5. rmdir、rm 目录和文件的删除

rmdir  [DIR | FILE]...  (删除目录,并且只能删除空目录)

rmdir DirName1 DirName2 DirName3...

rm [OPTIONS]... [DIR | FILE]...  (可删除文件和目录)

  • -r :用于删除目录,且递归删除。
  • -f :强制删除。在一些 Linux 版本中,-r 递归删除目录时会询问,加上 -f 及全部回复 yes

rm -rf DirName File1 File2 File3...


6. cp 复制文件或目录

[OPTIONS]... [SOURCE_FILE]... [TARGET_DIR]

[OPTIONS]... [SOURCE_DIR] [TARGET_PATH]

[OPTIONS]... [SOURCE_FILE] [TARGET_NEW_FILE_NAME] 复制后的新文件名

  • -r :递归持续复制,针对目录。
  • -i :若目标已经存在,在覆盖时进行询问动作。

cp File1 File2 File3... TargetDir


7. mv 移动和重命名文件或目录

[OPTIONS]... [SOURCE_FILE]... [ TARGET_DIR]

[OPTIONS]... [SOURCE_DIR] [TARGET_DIR]

[OPTIONS]... [SOURCE_FILE] [TARGET_FILE]

  • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖。
  • -i :若目标文件已经存在时,就会询问是否覆盖。

mv File1 File2 File3... TargetDir

mv SourceDir TargetDir 目标存在则覆盖,不存在则命名或移动并命名,否则只移动。

mv SourceFile TargetFile 目标存在则覆盖,不存在则命名或移动并命名,否则只移动。


8. vi 、vim 编辑文件

vi | vim [OPTIONS]... [FILE] 文件存在则编辑,不存在则新建。

  • -b :二进制模式。

vim FileName

  • 按键 I 或 O 进入插入模式。
  • 按键 Esc 退出插入模式。
  • 按键 Shift + : 冒号等待输入的口令:q 退出,w 写入 ,wq 写入并退出,q! 强制退出(一般用在修改了文件又取消修改的情况),/ + 字符串 (在文本内搜索指定字符串) 。
    • 替换单个字符串:光标移动到指定要替换字符串的行,然后 s/原字符串/新字符串 
    • 替换全部字符串:%s/原字符串/新字符串 
    • 按上下箭头可选历史命令

9. cat 、tac 显示文件内容

cat | tac [OPTIONS]... [FILE]...

  • -n :显示行号
  • cat :从头开始显示(常用)。
  • tac :从尾部倒着开始显示。

cat File1 File2 File3... :可多文件一起显示。

tac File1 File2 File3...


10. less 、more 分屏显示文件内容

more [OPTIONS]... [FILE]... :仅只能向前移动和翻页。

  • Enter :滚动下一行
  • 空格键 :向下翻一页
  • Q 键 :退出。

more File1 File2 File3... :可指定显示多个文件。

less [OPTIONS]... [FILE]强大):可以随意浏览文件(向前向后),而且在查看之前不会加载(读取)整个文件。

  • -N :显示行号。
  • Enter :滚动下一行
  • 空格键 :向下翻一页。
  • PageUp :向上翻一页。
  • PageDown :向下翻一页。
  • /   + 字符串 :向下查找指定字符串。
  • ?  + 字符串 :向上查找指定字符串。
  • Q 键:退出。

11. head 、tail 指定行数显示文件内容

[OPTIONS]... [FILE]...

  • 默认 head 、tail 只能显示 10 行
  • -n :指定显示的行数。
  • head :显示头开始的内容
  • tail :显示尾部的内容。

head File1 File2 File3...

tail File1 File2 File3...


12. ln 、unlink 文件链接符

  • 何为文件连接及用一个子文件链接(称为:链接文件)一个源文件,源文件可被多个子文件链接,删除链接文件则不会影响到源文件,访问链接文件就是访问源文件。链接文件就是源文件的通道。
  • 链接文件的权限是与源文件不同的,所以更改链接文件的权限并不会同时修改到源文件

建立链接 ln [OPTIONS]... [SOURCE_FILE] [DIY_NEW_LINK_FILE_NAME]

  • -S :建立软链接。(默认硬链接)

1. 建立硬链接符

硬链接源文件不允许被目录引用。也就是说,目录不允许指向源文件

ln SourceFile NewLinkFileName

[kebin@kebin-vm-centos7 test]$ ll
总用量 0
-rw-rw-r--. 1 kebin kebin 0 10月 27 00:00 SourceFile
[kebin@kebin-vm-centos7 test]$ ln SourceFile NewLinkFileName
[kebin@kebin-vm-centos7 test]$ ll
总用量 0
-rw-rw-r--. 2 kebin kebin 0 10月 27 00:00 NewLinkFileName
-rw-rw-r--. 2 kebin kebin 0 10月 27 00:00 SourceFile

[kebin@kebin-vm-centos7 test]$ 

注意权限和属主中间的数字,此为链接的文件数

2. 建立软链接符

ln -s SourceFile NewLinkFileName

 [kebin@kebin-vm-centos7 test]$ ll
总用量 0
-rw-rw-r--. 1 kebin kebin 0 10月 27 00:09 SourceFile
[kebin@kebin-vm-centos7 test]$ ln -s SourceFile NewLinkFileName
[kebin@kebin-vm-centos7 test]$ ll
总用量 0
lrwxrwxrwx. 1 kebin kebin 10 10月 27 00:10 NewLinkFileName -> SourceFile
-rw-rw-r--. 1 kebin kebin  0 10月 27 00:09 SourceFile

[kebin@kebin-vm-centos7 test]$ 

注意权限和属主中间的数字,此为链接的文件数

3. 解除链接符

解除链接 unlink [LINK_FILE]

unlink linkFile


 二、查找命令

 1. grep 查找文件内容

  • 此命令的好处是能自动匹配连续的字符

[OPTIONS]... ' Query String ' [FILE]...

  • -r   递归搜索。
  • -v  :反向选取。
  • -o   只显示被模式匹配到的字符串,而不是整个行。
  • -n :显示行号。
  • -i  :忽略大小写。

grep  ‘ 要查找的字符串 ’ TargetFile1 TargetFile2 TargetFile3...


2. find 递归查目录或文件

find [PATH] -name ' Query String '

find /sbin/ -name ifcon*


3. which 查找命令位置

which CommandName


三、特殊操作符

  • 特殊操作符不允许当作文件名或目录名使用(除隐藏属性点 .)。
  • 若要使用特殊操作符当文件名则使用转义符 \
  • 如果使用了特殊操作符当文件名,需要访问时,必须把特殊操作符转义才能访问文件。

1. 管道操作符 | 

用于数据的存储传输

[SOURCES_DATA] | [COMMAND : grep 、ls 、cat 、less、head ...]

左边是一些命令产生的数据 --> 中间管道符 --> 右边是要对数据操作的命令

ls -R / | less

cat File | grep 'Query String'

... ...


2. 通配符 * 与 ?

  • *   匹配连续多个字符。可用于多选、查找等字符串匹配的等操作。
  • 匹配单个字符。* 比 ? 更常用。

less  *.java
less  Hello*.java

ll  *.txt
ls -R / | grep  *.java

mv CentOS-*  BakDir

3. 重定向符 > 、>> 、<

COMMAND > | >> | < FILE

  • 输出重定向左边命令产生的数据 写出 右边文件中。若文件不存在则自动创建。
    1. > :覆盖写出。
    2. >> :文本最后追加写出。
  • 输入重定向将右边的文件 传递到 左边命令进行操作。文件不允许不存在。
    1. < 

ls > 1.txt
ls >> 1.txt

cat < 1.txt (cat 1.txt)

4. 转义符 \

\COMMAND

  • 把一些命令的操作符转换成字符,而不是当命令使用!
  • 一个转义符 \ 只能转义一个字符
  • 需要转义的字符包括:
    ' " * ? \ ~ ` ! # $ & | 空格

创建一个带 > 的文件:touch \>FileName 。当访问这个文件时也需要转移符,否则会把 重定向使用。

创建带有空格的文件:touch A\ \ \ A 。当访问这个文件时也需要转移符,否则会把空格当分隔使用。

删除带 3 个空格的文件:rm A\ \ \

5. 单引号转义符 ''

  • 单引号内的所有字符都会转换成字符串,包括空格,包括特殊操作符及命令
  • 一个单引号 '' 能转义连续字符。

创建带有空格的文件:touch '    'A

删除带 3 个空格的文件:rm '    'A

6. . 隐藏文件或目录

  •  文件名或目录名最前面加点 . 就是隐藏属性 。

touch .FileName

mkdir .FileName


四、打包与压缩命令

常见的压缩格式.zip .rar .tar .gz .bz2 .xz

  • 何为打包 ? :将多个文件或目录合并成一个文件。
  • 何为压缩 ? :将一个文件通过某些算法可以缩小文件体积。

1. tar 打包和压缩及解压缩

  1. 打包并压缩 [OPTIONS]... -c[ z | j | J ]f [DIY_NEW_FILE_NAME] [FILES]...
  2. 拆包并解压缩 [OPTIONS]... -x[ z | j | J ]f [FILES]
  3. 注意打包和拆包时,压缩选项都只能选一个。
  • -c :打包。
  • -x :拆包。
  • -f  :表示使用归档文件或 ARCHIVE 设备,必选选项
  • -v :输出过程信息。
  • -t :仅查看列出打包或压缩的文件列表。
  • -z :压缩或解压缩 .gz 格式。
  • -j  :压缩或解压缩 .bz2 格式。
  • -J :压缩或解压缩 .xz 格式。

tar -czf MyTest.tar.gz File1 File2 File3 Dir1 Dir2 Dir3

tar -xzf MyTest.tar.gz


2. gzip .gz 格式压缩与解压缩

[OPTIONS]... [FILE]...

  • -d :解压缩。
  • -c :保留源文件方式输出写入新文件。配合 > 定向符写出文件,格式: [SourceFile] > [NewFileName.Format](保留源文件,gzip 的压缩与解压缩默认不保留源文件
  • -r :在目录上递归操作。(将目录下所有文件进行压缩或解压缩
  • -1 ~ -9 :压缩等级,默认 -6 ,等级越高压缩比越好,但速度会降低。
  • -v :输出过程信息。
  • -l :仅查看压缩包文件列表。

压缩gzip File1 File2 File3...

解压缩gzip -d File1.gz File2.gz File3.gz...

保留源文件压缩gzip -c SourceFile > DirNewFileName.gz

保留源文件解压gzip -dc SourceFile.gz > DirNewFileName


3. bzip2 .bz2 格式压缩与解压缩

[OPTIONS]... [FILE]...

  • -d :解压缩。
  • -k :压缩或解压缩时保留源文件。(默认不保留源文件
  • -1 ~ -9 :压缩等级,默认 -6 ,等级越高压缩比越好,但速度会降低。
  • -v :输出过程信息。

压缩bzip2  File1 File2 File3...

解压缩bzip2 -d File1.gz File2.gz File3.gz...


5. rar .rar 格式压缩与解压缩

压缩 :[OPTIONS]... a [DIY_NEW_FILE_NAME] [FILE]...

解压 :[OPTIONS]... x [FILE]

  •  a :新压缩文档名,并将随后的文档都压缩到此新压缩包中。
  •  x :解压缩。
  • -v :输出过程信息。
  • -l  :仅查看压缩包的文件列表。

压缩 :rar a NewRAR.rar File1 File2 File3...

解压 :rar x File.rar


4. zip & unzip .zip 格式压缩与解压缩

zip 压缩

[OPTINS]... [DIY_NEW_FILE_NAME] [FILE]...

  • -1 ~ -9 :压缩等级,默认 -6 ,等级越高压缩比越好,但速度会降低。
  • -v :输出过程信息。
  • -r :在目录上递归操作。(将目录下所有文件进行压缩

zip -r9v MyFiles.zip File1 File2 File3...

unzip 解压缩

[OPTIONS]... [FILE]...

  • -v :输出过程信息。

unzip -v File1.zip File2.zip File3.zip


五、文件权限操作命令

文件所属及权的修改。

1. chown 属主和属组修改

[OPTIONS]... [ [USER] [:] [GROUP] ] [FILE]...

  • -R递归目录下改变文件的属主。

chown user1 File1 File2 File3...

chown -R user1 MyDir

使用 " " 冒号:

修改属主和属组 chown root:root File1 File2 File3...

只修改属组 chown :root File1 File2 File3...


2. chgrp 属组修改

  • chown 比 chgrp 更常用。

[OPTIONS]... [GROUP] [FILE]...

  • -R递归目录下改变文件的属组。

chgrp root file1  file2  file3...


3. chmod 文件权限修改

  • -rwx------ :用 ll (  ls -l )命令可以看到,最前面 - 是文件类型,之后是权限,每三个字母为一组权限,没有权限用 - 表示。
  • u (user) 主用户权限g (group) 组用户权限o (other) 其它用户权限 :一个文件分为三组权限,每组权限有 (r)读&(w)写&(x)执行 权限。
权限权限数值二进制具体作用
r400000100read,读取。可以读取文件内容,可以浏览目录。
w200000010write,写入。可以新增或修改文件内容,可以删除、移动目录或目录内文件。
x100000001execute,执行。可以执行文件,可以进入目录。
-000000000没有权限
权限字母表示计算公式数字表示
-rwx------4+2+1, 0+0+0, 0+0+0700
-rwxr--r--4+2+1, 4+0+0, 4+0+0744
-rw-rw-r-x4+2+1, 4+2+0, 4+0+1665
drwx--x--x4+2+1, 0+0+1, 0+0+1711
drwx------4+2+1, 0+0+0, 0+0+0700

文件类型 属主权限 属组权限 其它用户权限 属主 属组 

-rw-rw-r--.  kebin kebin 14 10月 23 20:15 MyGPG.tar.gz 

最左边的 - 是文件类型,后面的都是权限,- 代表没有权限。

[OPTIONS]... 0~7 0~7 0~7 [FILE]... 

chmod 777 File1 File2 File3... (读写执行 读写执行 读写执行) 

chmod 664 File1 File2 File3... (读写-读写-读--) 

[OPTIONS]... u | g | o +|- rwx [FILE]... 

ugo 、可多选:

增加权限 chmod ugo+rwx File1 File2 File3... 

除去权限 chmod ugo-rwx File1 File2 File3... 

不指定用户则三组用户同时加权限chmod +x File1 File2 File3...


六、软件及进程管理命令

1. rpm .rpm格式软件的安装和删除

[OPTIONS]... [FILE.rpm]...

  • -q :查询指定软件是否安装。
  • -a :表示全部 ALL,一般和 -q 一起使用则查询全部软件。
  • -i  :安装软件。
  • -e :卸载软件。
  • -v :显示处理过程的详细信息。
  • -h :显示进度。
  • --force :强制,如果要安装的软件的版本比较低或该软件包在系统中已存在,系统会给出提示并拒绝安装,此时可以加上参数—force来进行强制安装。
  • --nodeps :不检查依赖关系,在安装或卸载软件时经常会遇到提示“该软件包与某某软件包存在依赖关系”,只有加上参数 --nodeps 忽略掉依赖关系才能进行安装或卸载。

rpm -qa | grep ssh

rpm -ivh --force --nodeps openssh-7.4p1-21.el7.x86_64.rpm openssh-clients-7.4p1-21.el7.x86_64.rpm openssh-server-7.4p1-21.el7.x86_64.rpm ......


2. yum (源) 使用软件池安装或删除软件

[OPTIONS]... COMMAND [SOFTWARE_NAME]

  • -y :之后的询问全部回答是。
  • clean all :清除软件池缓存。
  • makecache :从源中刷新软件池缓存。
  • list :同样可以从源中刷新软件池软件列表。
  • install :指定安装一个或多个软件。
  • remove :指定移除一个或多个软件。
  • check-update :检查是否有可用的软件更新包。
  • upgrade :更新软件包同时考虑软件包取代关系。
  • update :指定更新系统中的一个或多个软件包。
  • --nogpgcheck :禁用 GPG 签名检查。在安装软件时,检查 GPG 校验失败会停止安装,加上此选项即可。
  • provides :查找提供指定内容的软件包。有时候一个软件包分多个版本,这时候就需要在软件池目录中查找。通常格式 */SoftwareName
  • history :显示或使用事务历史。如安装了一个软件,并且此软件需要安装很多依赖软件或某些软件被升级,在我们卸载的时候却只能卸载一个软件,其它的软件不知道,所以就需要事务的回溯或执行操作。子命令 :info ID 列出某次的详细信息undo ID 撤销某次更改

分为本地源网络源,何为软件池?其实就是在目录下的全部软件,用 yum 命令从本地或网络的地址池目录获取软件包安装的一个过程!

/etc/yum.repos.d/ 目录下,文件名后缀是 .repo ,配置文件信息如下:


    [name] 库名称
    name=string 库描述
# 源池格式
    baseurl=url://server1 (支持 3 种协议file://http://ftp://)
                   url://server2
                   url://server3
                   ...... ~N (url)
    enabled=1 | 0 是否启用该源
    gpgcheck=0 (设置为0,否则为1 就需要设置 gpgkey 属性密钥) 
    gpgkey=url 

 2.1 配置本地源

Local.repo

    [Local] (本地源库名称一般和文件名一致)
    name=local
    baseurl=file:///mnt/iso (挂载 ISO 系统镜像的路径 /mnt/iso)
    enabled=1
    gpgcheck=0

设置好源后:

清除软件池缓存:yum clean all
刷新软件池缓存:  yum makecache

测试:    yum list 

2.2 国内网络源


3. ps 查看进程

[OPTIONS]...

  • -e :显示全部进程。
  • -f  :显示详细信息,如所属用户,位置。

ps -ef | grep ssh


4. kill 结束进程

-9 [PROGRAM_PID]

  • -9 :发送强制结束进程信号。

先用 ps 命令查看软件进程 PID ,再使用 kill 来强制结束。(或因为资源被某程序占用,手动结束进程)

kill -9 (PID)


 七、设备管理

1. fdisk 、lsblk 查看分区列表

  • fdisk -l :查看设备分区列表。
  • lsblk -pp (PATH) 显示设备设备完整路径 ,以树形式显示列出设备分区表

2. mount 、umount 挂载与卸载设备

mount [-t <FileSystemType>] [-o <modes...>] [SOURCE_DEVICE_FILE] [MOUNT_TARGET_PATH]

umount <MountDeviceed | MountedTargetPath> 

-t  :指定文件系统类型。

  • <iso9660> CD-ROM 光盘或光盘镜像。
  • <auto> 自动检测文件系统。(默认)
  • <minix> Linux 最早使用的文件系统。
  • <ext4 、ext3 、ext2> Linux 目前常用的文件系统。
  • <MS-DOS> fat16。
  • <vfat> Windows98/ Windows2000/ WindowsXP 文件系统。
  • <ntfs> WindowsXP/ Windows7/ Windows8/ Windows10 文件系统。
  • <nfs> Unix(Linux) 网络文件共享系统。
  • <cifs> Windows 网络文件共享系统。
  • <hpfs> OS/2 文件系统。

-o :指定挂载方式。

  • <looploop 设备是一种伪设备,使用文件来模拟块设备的一种技术,文件模拟成块设备后, 像一个磁盘或光盘一样使用
    • 如一个 .ISO 后缀的镜像文件,就可以模拟成一个设备来访问 ISO 镜像里的文件。
  • <ro> 以只读方式挂载。
  • <rw> 以读写方式挂载。
  • <remount> 重新挂载。
  • <iocharset> 指定访问文件系统所用字符集,例如 iocharset=utf-8

挂载ISO镜像 :(挂载本地源常用命令)

      mount -t iso9660 -o loop /home/iso/mydisk.iso /mnt/iso

挂载USB移动硬盘 :

      mount -t ntfs /dev/sdc /mnt/usb

挂载CDROM :

      mount  /dev/cdrom /mnt/cdrom | mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom

挂载windows文件共享 :

      mount -t cifs -o username=user,password=passwd //192.168.0.66/share /mnt/windows_share

挂载Linux文件nfs共享 :

      mount -t nfs -o rw 192.168.0.99:/usr/www /mnt/linux_share

单用户模式重新挂载根分区 :

      mount -o remount,rw /

取消挂载 :

      umount /dev/cdrom | /mnt/cdrom 

3. 自动挂载 

每次开机访问 Windows 分区或光驱、U 盘时。都要运行 mount 命令进行挂载,所以可以设置好配置文件后开机自动挂载。

  • 配置文件/etc/fstab
  • 配置格式 :<SourceDeviceFile> <MountTargetPath> <(auto) FileSystemType> <(defaults) MountMode> <0> <0>

编辑 /etc/fstab 配置文件,输入如下,自动挂载ISO镜像 :

      /home/iso/my.iso /mnt/iso iso9660 loop 0 0

通过系统分配给设备的固定 UUID 来自动挂载设备

  • 因为如果在系统中如果插入了新磁盘设备,如果有多个磁盘,但都被重新分配了 /dev/ 下的设备名,就可能之前设置的自动挂载名不对失效问题,所以为了解决这个问题可以使用系统固定分配给设备的 UUID 来解决!!!

      查看设备 UUID 目录:ll /dev/disk/by-uuid/   即可列出指向设备的 UUID 链接文件名
编辑 /etc/fstab 配置文件输入如下:

      UUID=UUID链接文件名    /mnt/dev   文件系统类型    defaults  0 0


4. dd 转换或拷贝文件 (制作 U 启动盘)

(其它使用方式详细请搜) 

[ if=<SourceFileISO> ] [ of=<TargetFile(Device)> ]

  • if :读取源文件。
  • of :写入目标文件。

dd if=/home/user/iso/my.iso of=/dev/sdb 


八、网络管理

1. ifconfig 网卡管理

  • -a :显示全部网卡信息。
  • -s :显示网络设备接口信息,类似 netstat -i 
  • ifconfig <interface> [-]arp :禁用或启用 ARP 协议。(arp 表示启用,-arp 表示禁用) 重启系统失效
  • ifconfig <interface> down | up:关闭或启用网卡。
  • ifconfig <interface> :查看指定网络设备接口信息。
  • 临时配置网卡信息重启网络服务失效 
    • ifconfig <interface> <address> netmask <netmask> :临时设置网卡 IPv4 地址。
    • ifconfig <interface[:<STRING_Name>]> <address> netmask <netmask> :临时添加虚拟网卡 (多 IP) 地址 IPv4网卡名后面带冒号 : + string ,及能用不同 IP 访问网络
      • Linux 虚拟网卡 (多 IP) 的原理就是IP 地址不同MAC 地址相同。(Linux 中 ifconfig 命令以及虚拟网卡配置文件只能是如此
  • ifconfig <interface> add | del <address>:临时设置网卡 IPv6 地址。或删除网卡 IPv4IPv6 地址。
  • ifconfig <interfacehw ether(类型:以太网) <HW_Address> :临时设置网卡 MAC 地址。
  • ifconfig <interface> mtu <bytes>:临时设置最大传输单元 ( bytes ) ,最大为 65535 bytes 。

启用或关闭网络接口:ifconfig eth0 down | up

临时设置网卡 IP :ifconfig eth0 192.168.60.10 netmask 255.255.255.0

临时添加虚拟网卡:ifconfig eth0:0 192.168.60.100 netmask 255.255.255.0 或者 ifconfig eth0:1 192.168.60.111 netmask 255.255.255.0

删除网卡 IP:ifconfig eth0 del 192.168.60.100

  1. 删除网卡多 IP 只需要输入 IP 地址,不需要输入子网掩码。
  2. 正常思想而言指定物理网卡删除多 IP 而不是虚拟网卡。(CentOS7以上适用。6.x 不适用,可以直接指定虚拟网卡)

临时设置网卡 MAC :ifconfig eth0 hw ether 00:00:00:00:00:11

永久修改 MAC

  1. cd /etc/sysconfig/network-scripts
  2. vi ifcfg-xxxx (主网卡配置文件)
  3. 修改其中的 HWADDR=xx:xx:xx:xx:xx:xx 为 MACADDR=xx:xx:xx:xx:xx:xx 
  4. CentOS6.x 重启网络服务(service network restart);CentOS7.x 重启网络服务(systemctl restart network)

END

 永久修改单网卡添加多 IP :

  1. cd /etc/sysconfig/network-scripts
  2. vi ifcfg-xxxx (主网卡配置文件)
  3. 修改其中的 BOOTPROTO=dhcp 为 BOOTPROTO=static
  4. 添加 IPADDR=你的主IP,IPADDR1=副IP1,IPADDR2=副IP2,IPADDR3=副IP3,...(其实就是添加多条 IPADDR 记录)
  5. CentOS6.x 重启网络服务(service network restart);CentOS7.x 重启网络服务(systemctl restart network)

END

  • 修改网卡配置文件永久属性
    • 网卡配置文件在 /etc/sysconfig/network-scripts/ ifcfg-xxx 下
部分参数描述
DEVICE=eth0网卡设备名
NAME=eth0网卡作用的描述,给用户看的。如在 Gnome 系统中,点击右上角网络图标时显示此名称。
TYPE=Ethernet网络类型,Ethernet 以太网
BOOTPROTO=dhcpstatic 固定 IP、none 不使用协议,dhcp 协议

IPADDR=192.168.0.100

IPADDR1=

IPADDR2=

IPADDR3=

...... 单网卡多IP

IPv4 地址
NETMASK=255.255.255.0网络掩码
PREFIX=24网络掩码用整数表示占用 4 段网络掩码的位数,可代替 NETMASK
GATEWAY=192.168.0.1默认网关 IP 地址,(默认路由)

DEFROUTE=yes | no

是否开启此网卡为默认路由。及通过此网卡访问默认网关。
NETWORK=192.168.0.0网络地址,一般不用进行手动配置
BROADCAST=192.168.0.255广播地址
IPV6INIT=yes | no是否启用IPv6的接口

HWADDR=00:00:00:00:00:00

MACADDR=00:00:00:00:00:00

MAC 地址。

HWADDR & MACADDR 的区别

  1. HWADDR :是内置网络设备的 ROM 中的 MAC 地址。修改此项后重启 Network 服务将 Faild 失败。
  2. MACADDR :手动配置的 MAC 地址。手动配置 MAC 地址应将 HWADDR 修改成 MACADDRR 才允许被修改。

所以这也跟字意有关。

DNS1 & DNS2

DNS3

DNS4

DNS5

​​​​​​​......

多DNS解析

DNS 域名解析 IP 地址,1 是首选,2 是备用。

  • 成功设置后会在 /etc/resolv.conf DNS 配置文件中生成,
            可以单独修改此文件中设置 DNS,添加 servername DNS即可,可添加多个
  • /etc/hosts 本地域名解析缓存文件,格式:<IP> <domians <空格>...> ,计算机访问一个域名并解析会先找 内存-->/etc/hosts-->DNS-Server 。
PEERDNS=yes | no是否允许 DHCP 获取的 DNS 覆盖本地手动设置的 DNS 地址。
MTU=1500

前 28 bytes 为 IP 数据包报头

  • MTU 是 Maximum Transmission Unit 的缩写。意思是网络上传送的最大 IP 数据包MTU 的单位是字节。大部分网络设备的 MTU 都是1500。如果本机的 MTU 比网关的 MTU 大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。把本机的 MTU 设成比网关的MTU小或相同,就可以减少丢包。一个局域网中如果电脑数量不大可以设置 大 MTU 提升网速,反之 MTU 设置小,平均
  • Linux 测试网关路由设置的 MTU :ping -f -s 1472 GatewayAddrerss ,增加或减少 1472 包大小,即可测出 网关路由 MTU 最大值 + 28 bytes IP 数据包报头。
  • Windows 测试网关路由设置的 MTU :ping -f -l 1472 GatewayAddrerss ,同 Linux 步骤。
  • 最大上传 IP 数据包为 65536 bytes 。
IPV4_ROUTE_METRIC网卡优先级,数值越小优先级越高,0~N
ONBOOT=yes | no是否启用此网卡。必须开启,否则无法启用网络
UUID=0cad6372-6ae7-4163-b24e-b24b53e54964

网卡识别码

  • 当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
NM_CONTROLLED=yes | no网卡允许被 NetworkManager 管理
USERCTL=yes | no是否允许非root用户控制该设备

1.1 多网卡配置(双网卡内外网)

  • 物理网卡与虚拟网卡的区别
    1. 真实物理网卡可以绑定添加多个虚拟网络会话。(虚拟网卡只能在物理网卡上添加。多个物理网卡则指定某一物理网卡上添加虚拟网卡。)
    2. 虚拟网卡 (多 IP) 的原理就是IP 地址不同MAC 地址相同。(Linux 如此,其它操作系统如 Windows 不同 MAC 地址)
    3. 虚拟网卡 同样可以用配置文件的方式表示。
      1. 配置文件 DEVICE 属性网卡设备名必须设置成 主网卡名+:NEW_NAME 才能是虚拟网卡文件。
      2. 虚拟网卡文件名也必须和虚拟网卡配置文件的 DEVICE 属性设备名相同。
    4. 网卡配置文件 /etc/sysconfig/network-scripts/ ifcfg-xxx 下:不允许出现两个 ifcfg-xxx (除了 ifcfg-lo 环回地址、以及虚拟网卡配置文件)。否则使用重启网络命令时会失败。
  • 计算机 & 网卡 & 物理网络接口 & 路由表的关系
    • 计算机要访问一个 IP 时,通过查询路由表,选择指定的网卡(或虚拟网卡)并通过物理网络接口发送 IP 数据包。
    • Interface 网络接口要知道网卡与网卡的点对点链路连接通信需要相同的网段。(记住这句话非常重要

开始步骤:通过这个阔谱图案例来完成双网卡内外网通信。

外网网卡
       IP 202.128.100.xxx/24
       NetMask 255.255.255.0
       Gateway 202.128.100.1

内网网卡
       IP 192.168.211.xxx/24
       Netmask 255.255.255.0
       Gateway 不设置

  1. DHCP 设置用于分配访问外网 的 IP 地址、子网掩码、外网网关、DNS。(我这里是 VMwareWorkstation 虚拟机,所以就在虚拟机设置了)

  2. 添加内网虚拟网卡配置文件。(/etc/sysconfig/network-scripts/ ifcfg-xxx 添加虚拟网卡
            # 内网网卡不要设置默认网关 IP 地址。
            # 为需要内网通信的主机内网网卡 IP 设置成 192.168.211.xxx/24 网络即可
            # 为内网网卡设置 MTU 值,提高局域网主机相互传输的 IP 数据包大小。

    ifcfg-ens33:0
    TYPE=Ethernet
    BOOTPROTO=static
    IPADDR=192.168.211.128
    NETMASK=255.255.255.0
    NAME=ens33:0
    DEVICE=ens33:0
    ONBOOT=yes
    MTU=65535
    # 添加虚拟网卡后,在终端重启网络服务
    systemctl restart network
    # 查看网络接口信息
    ifconfig

  3. Linux 路由表的配置。
           # 默认网关设置成访问外网的路由器 LAN 接口的 IP 202.128.100.1 。让所有不在局域网内的所有 IP 数据包都通过此网关转发。
    # 设置默认网关,其实 DHCP 以及设置了分配的默认路由 IP 地址,已自动生成及维护,所以不用执行此条命令
    route add default gw 202.128.100.1

注意:路由表项的 dev 接口设备指定的虚拟网卡及是虚拟网卡的父物理网卡。
END


2. route 路由管理

Options

  • -n :不执行 DNS 反向查找,直接显示数字形式的 IP 地址。( 常用命令显示 Route 表
  • -net :目标网络(一个网段;网络号)
  • -host :目标主机 IP 地址(表示连接到单部主机的路由)
  • -A :设置地址类型
  • -C :打印 Linux 内核的路由缓存
  • -v :显示详细信息
  • -ee :详细地列出路由表

Parameters

  • add :添加路由记录
  • del :删除路由记录
  • netmask :目标网络掩码
  • gw :访问目标网络在当前网卡接口要经过的网关(路由器)
  • dev :访问目标网络时所使用的网卡接口
  • metric :路由优先级,数值越小优先级越高,0~255
  • mss :设置TCP的最大区块长度(MSS),单位MB
  • window :指定通过路由表的TCP连接的TCP窗口大小
  • reject :设置到指定网络为不可达,避免在连接到这个网络的地址时程序过长时间的等待,直接就知道该网络不可达。

2.1 Linux 路由表

作用
Destination目标网络地址。(不是明确主机 IP ,而是网段网络)
Gateway访问的目标网络是否需要经过某一指定的网关地址。(路由器接口 IP 地址)
Genmask用于计算目标网络的网络掩码。
Flags

标记

  • U 路由是活动的
  • H 目标是个主机
  • G 需要经过网关
  • R 恢复动态路由产生的表项
  • D 由路由的后台程序动态地安装
  • M 由路由的后台程序修改
  • ! 拒绝路由
Metric路由距离,到达指定网络所需的中转数。数值越小优先级越大。(在 Linux 内核中并不使用此特性,但根据系统默认指定的正数值来对比优先级,0~255
Ref路由项被引用的次数。(不在 Linux 内核中使用)
Use路由项被路由软件查找的次数
Iface访问目标网络时所使用的网络接口(网卡)
Route TypeDestinationGatewayGenmaskIface
Default 默认路由0.0.0.0192.168.1.10.0.0.0eth0
Direct 直连路由192.168.2.00.0.0.0255.255.255.0eth0
Static 静态路由192.168.2.0192.168.1.1255.255.255.0eth0
  • Default 默认路由:(目标网络全0 + 目标网络掩码全0 + 网关)。作用:在路由表中没有找到需要访问网络的路由项时,所有 IP 数据包默认传送至网关,之后就是由网关(路由器)继续查找路由表进行转发数据包,以此类推直到找到目标主机为止(找不到这里不讲解)。
  • Direct 直连路由:(目标网络 + 目标网络掩码 + 网关全0)。作用:数据包不需要经过网关(路由器)转发,而是直接发送至当前局域网中的主机。
  • Static 静态路由:(目标网络 + 目标网络掩码 + 网关)。作用:需要传送至网关(路由器),由网关(路由器)继续查找路由表进行转发 IP 数据包,以此类推直到找到目标主机为止。
  • Interface 网络接口要知道网卡与网卡的点对点链路连接通信需要相同的网段。(记住这句话非常重要)。换句话说:所以网卡的 IP 地址要访问另一个网卡的 IP 地址需要网段一致。
  • 路由表自动生成与自动维护的路由:(静态和动态路由需要手动配置与设置)
    1. 直连路由:在一个设备中的多网卡(包括虚拟网卡)设置了 IP 地址后自动生成及维护的路由项。
    2. 默认路由:为网卡设置了默认网关后自动生成的路由项。(一般只给需要访问外网的网卡设置默认路由)(路由器不会自动生成默认路由)

2.2 路由优先级

Metric 需要一个正整数,范围 0~255,它用于指定路由协议的优先级。

  • Linux 路由表优先级:通过 Metric 标识的数值越小优先级越高。如上表格中路由网络都是 192.168.2.0 ,会选谁呢?(同 Metric 数值也是遵循如下)
    1. 静态路由
    2. 直连路由
    3. 默认路由

  • 路由器路由表优先级: 主机和服务器的路由表和路由器路由表优先级不同。
    1. (直连路由)具有最高优先级
    2. (静态路由)人工设置的路由条目优先级高于动态学习到的路由条目
    3. (动态路由:目标网络+网络掩码+网关)度量值算法复杂的路由协议优先级高于度量值算法简单的路由协议
      1. 路径长度
      2. 可靠性
      3. 延迟
      4. 带宽
      5. 负载
    4. 默认路由(路由器不会自动生成默认路由,需要手动添加)
    • 不同厂商之间的定义可能不太一样
路由种类路由优先级

Direct(直连路由)

0

STATIC(静态路由)

1

OSPF(动态)

110

RIPv1、v2(动态)

120

IBGP(动态)200
Special(动态)255
Default (默认)255

2.3 添加与删除路由表项

  • 计算机 & 网卡 & 物理网络接口 & 路由表的关系
    • 计算机要访问一个 IP 时,通过查询路由表,选择指定的网卡(或虚拟网卡)并通过物理网络接口发送 IP 数据包。
    • 注意虚拟网卡指定的是父物理网卡:路由表项的 dev 接口设备指定的虚拟网卡及是虚拟网卡的父物理网卡。
    • Interface 网络接口要知道网卡与网卡的点对点链路连接通信需要相同的网段。(记住这句话非常重要扩谱图

常用命令格式route [add | del] [-net <TargetNetwork> | -host <TargetHost>]  netmask <mask> [gw <GatewayIP> | dev <NetCardInterface>]

  • add :添加路由记录。
  • del :删除路由记录。
  • -net :目标网络。(一个网段;网络号)
  • -host :目标主机 IP 地址。(表示连接到单部主机的路由)
  • netmask :目标网络掩码。
  • gw :访问目标网络在当前网卡接口要经过的网关(路由器)
  • dev :访问目标网络时所使用的网卡接口
  • metric :路由优先级,数值越小优先级越高,0~255
  • mss :设置TCP的最大区块长度(MSS),单位MB
  • window :指定通过路由表的TCP连接的TCP窗口大小
  • reject :设置到指定网络为不可达,避免在连接到这个网络的地址时程序过长时间的等待,直接就知道该网络不可达。

(1)添加 & 删除默认网关

route add default gw <GatewayIP> [<NetCardInterface>] 
route del default gw [<GatewayIP>] [<NetCardInterface>] 

  1. GatewayIP:用于指定转发的路由器(网关)的 IP 地址。
  2. NetCardInterface:用于指定网卡接口与网关通信,如 eth0 | ens33。
# 添加默认网关
route add default gw 192.168.1.1
route add default gw 192.168.1.1 eth0
# 删除默认网关
route del default gw
route del default gw 192.168.1.1
route del default gw eth0
route del default gw 192.168.1.1 eth0

(2)添加 & 删除制定网络路由。

route [add | del] -net <NetworkAddress> netmask <Mask> [gw <GatewayIP>] [dev <NetCardInterface>]

  1. NetworkAddress:目标网络地址。
  2. Mask:目标网络掩码。
  3. GatewayIP:指定访问的目标网络要经过的网关。
  4. NetCardInterface:指定网卡接口与目标网关或主机通信,如 eth0 | ens33 。
# 添加路由规则,可不指定网卡接口
直连路由:route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
静态路由:route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.2.1 dev eth0
# 删除指定路由规则,可不指定网卡接口
直连路由:route del -net 192.168.1.0 netmask 255.255.255.0 dev eth0
静态路由:route del -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.2.1 dev eth0

注意:添加或删除(直连、静态、默认)路由,如不指定网卡接口,则默认使用主网卡(及 Linux /etc/sysconfig/network-scripts/ ifcfg-xxx 下的网卡(除 ifcfg-lo 环回网卡 127.0.0.1))。

备注:关于计算机网络的通信这里不多阐述!


3. arp IP 映射 MAC 地址缓存表

  • ARP(Address Resolution Protocol)地址解析协议。网卡硬件设备不能直接识别 IP 数据包,网卡与网卡硬件设备之间需要知道对方 IP &  MAC 物理地址才能互相通信,
    ( TargetIPAddress  TargetMACAddress )
  • arp 命令用于操作主机中的 ARP 缓存表,可以显示删除或添加条目。
  • 安全隐患:攻击者也会持续发送假 MAC 和其它主机或网关建立链路(被攻击者 ARP 缓存表中就存在了冒充的 IP & MAC 映射),欺骗其它主机冒充网关 | 或欺骗网关冒充其它主机。所以攻击者利用这一点能达到欺骗、监听、替换数据包等等操作。

[OPTIONS]...

  • -a <HOST>:显示 ARP 缓存表所有条目。(显示前会重新确认 ARP 缓存表中的 IP-MAC 在局域网中是否存在)
  • -v :显示 ARP 详细信息。(显示前会重新确认 ARP 缓存表中的 IP-MAC 在局域网中是否存在)
  • -n :以数字形式显示 IP 地址,而不是名。如 gateway 网关地址。(直接显示,不确认 ARP 缓存表中 IP-MAC 在局域网是否存在)
  • -d <HOST> :删除 ARP 缓存表中指定的主机 (IPAddress) 条目。
  • -s <HOST> <MAC> :添加 IP 地址 & MAC 地址静态映射。(在添加之前会先测试此地址是否可达才添加 ARP ,反之否)(登出或重启失效
  • -f [ FILE ] (默认 /etc/ethers  文件,可以不指定文件) :从文件中获取并设置主机的 IP & MAC 地址静态映射。
  • -i <interface> :指定要操作的网络接口。默认主网卡,每个网络接口(网卡) 都有一个自己的 ARP 缓存表 )
  • 清空动态 ARP 缓存ip neigh flush dev <interface>只清除 C Flag 标记 ARP 条目,不清除 M Flag 标记 Static 静态 ARP 条目(这个时间点的 arp 命令版本不能一键删除,所以用 ip 命令)

IP-MAC ARP 映射有两种

  1. 动态 IP-MAC 映射自动生成的。
  2. 静态 IP-MAC 映射表示手动设置的。
ARP 缓存表字段信息
AddressHWtypeHWaddressFlags MaskIface
目标 IP 地址网络类型 (ether)目标 MAC 地址
  • C :表示 Cache 缓冲区条目。
  • M :表示静态 static 手动设置条目。
使用的网络接口访问目标

显示 ARP 表arp -n (常用命令)

删除 ARParp -d 192.168.1.100

添加静态 ARParp -s 192.168.1.100 00:11:22:33:44:55

3.1 IP & MAC Static 静态地址绑定

  1. 默认配置文件/etc/ethers 。用于永久保存 IP & MAC 地址静态映射关系。(没有则自行创建)
  2. 映射格式<IPAddress> <MACAddress> 。(在默认 ARP 配置文件输入需要绑定的 MAC 地址并保存)
  3. 执行命令arp -f 。(从 /etc/ethers 文件刷新 ARP 缓存表)
  4. 增加开机启动命令:编辑 /etc/rc.local 增加 arp -f  并设置可执行权限 chmod +x /etc/rc.d/rc.local/etc/rc.local --> /etc/rc.d/rc.local)。

备注:经测试 CentOS7.x 后,需要在 /etc/rc.local 文件中增加 arp -f 命令并设置可执行权限 chmod +x /etc/rc.d/rc.local。CentOS6.x 则不需要,开机自动获取 /etc/ethers IP & MAC 映射。

END

3.2 ARP 攻击防范

简单概述 ARP 攻击原理:利用某些编程手段制作的 ARP 攻击程序,攻击者也会持续发送假 MAC 和其它主机或网关建立链路(被攻击者 ARP 缓存表中就存在了冒充的 IP & MAC 映射),欺骗其它主机冒充网关 | 或欺骗网关冒充其它主机。所以攻击者利用这一点能达到欺骗、监听、替换数据包等等操作。

举个例子

  1. PC1 和 PC2 连接同一个交换机且在相同网段,交换机连接一个路由器。
  2. 假设 PC1 冒充网关(路由器)欺骗 PC2 。此时 PC2 的访问网络的 IP 数据包都发送到了 PC1 中。
  3. PC1 现在能接收到 PC2 的数据包, ARP 攻击程序为了保证 PC2 能访问到外网,PC1 会转发来自 PC2 的 IP 数据包,应答数据再发送给 PC2 。此时就能监听与替换操作。

PC1 和 PC2 是如何建立链路的?ping 命令例子

  1. PC1 通过 ping PC2 的 IP 地址。
  2. PC1 和 PC2 在网络可达 ping 通的情况下。
  3. PC1 和 PC2 都用 arp 命令查看 ARP 缓存表都会有双方的 IP & MAC 地址映射!!!

简单的防御方法:(攻击者会刷新被攻击者的 ARP 缓存表,所以我们只需要 Static 静态手动绑定与之访问的 IP 正确的 IP & MAC 映射即可)

  • 静态绑定网关
    1. arp -s <网关 IP> <网关 MAC> 。(临时的,重启网卡失效)
    2. vi /etc/ethers 并输入正确 <网关 IP> <网关 MAC> 后保存,再输入 arp -f 从默认 /etc/ethers 获取 IP & MAC 映射。
    3. 编辑 /etc/rc.local 增加 arp -f  并设置可执行权限 chmod +x /etc/rc.d/rc.local/etc/rc.local --> /etc/rc.d/rc.local)。
    4. 此时就能防止攻击者伪装网关(路由器)
  • 静态绑定局域网内所有主机:(这里通过我写好的 Shell 脚本自动获取 IP-MAC)(防止攻击者冒充局域网主机监听信息

终端以超级用户执行脚本sudo bash scan_IP-MAC.sh 

#!/bin/bash
:<<! 
<<防 ARP 攻击>>
脚本仅支持 IPv4 地址
需要 root 权限执行
功能:使用 arping 命令结果获取 IP-MAC 并保存于默认静态 ARP /etc/ethers 文件中,
      随后可以使用 arp -f 刷新 ARP 缓存表达到 Static 绑定 IP-MAC 地址。
作者:傻笑哥    QQ:3328235655  VX:vx-kebin
!

# 判断当前执行用户,需要 root 权限执行
if [ $(whoami) != 'root' ];then
    echo '权限不足,需要超级用户权限!'
    exit
fi


:<<!
获取局域网内所有在线主机的 IP-MAC 地址。
需要手动修改网络接口参数以及网络地址。
!
netCard=ens33
netAddress=172.17.21.
startScanRange=1
endScanRange=254
pingCount=1 #此参数可调大,防止让数据包传输过程中丢失
successCount=0
faildCount=0

# 判断/etc/ethers文件是否存在
default_ARP_cache=/etc/ethers
default_ARP_cache_bak=${default_ARP_cache}.bak
if [  -e $default_ARP_cache ];then
    if [ ! -e $default_ARP_cache_bak ];then
        # 不存在 /etc/ethers.bak 时备份
        cp -p $default_ARP_cache $default_ARP_cache_bak
    fi
    # 防止和先前数据重复,清空 ARP 静态映射文件
    cat /dev/null > $default_ARP_cache
else
    touch $default_ARP_cache
fi

clear #清屏
echo 'Scan IP-MAC Running ......'
while [[ $startScanRange -ge 1 && $startScanRange -le $endScanRange ]]
do
    destinationIPAddress=${netAddress}${startScanRange}
    result_array=($(arping -c 1 -I $netCard $destinationIPAddress))
    if [ $? -eq 0 ];then
        # 让每个局域网的主机缓存自己的 IP-MAC。
        # (如:路由器配置 IP-MAC 静态绑定时,就不需要手动配置了,但 ARP 条目还是动态的)
        ping -c $pingCount $destinationIPAddress > /dev/null
        ipaddress=${result_array[8]}
        mac=${result_array[9]}
        IP_MAC="$ipaddress      ${mac:1:17}"
        let successCount++
        echo $IP_MAC >> $default_ARP_cache
        echo "$IP_MAC   Write IP-MAC Success."
    else
        echo "$destinationIPAddress     Get IP-MAC Faild!"
        let faildCount++
    fi
    let startScanRange++
done


#统计结果,检查错误
printf "\n\n\n"
statistics="SuccessCount= ${successCount}      FaildCount= ${faildCount}"
if [ $successCount == 0 ];then
    # 还原备份脚本
    cp -p  $default_ARP_cache_bak $default_ARP_cache
    echo $statistics
    echo 'There is Not Success get IP-MAC,  Exit !!!'
    exit # 退出脚本
else
    echo "查看静态 ARP 映射文件项 $default_ARP_cache"
    cat $default_ARP_cache
    echo $statistics
fi


#是否刷新 ARP 缓存表
readToast='is flush ARP cache table ? (Yes | No) :  '
printf "$readToast"
while read FLAG
do
    case $FLAG in
        'y'|'yes'|'Yes'|'YES')
            ip neigh flush dev $netCard
            flushResult=$(arp -f ${default_ARP_cache} -i $netCard)
            if [ -z "$flushResult" ];then
                bootScript=/etc/rc.d/rc.local
                targetCommand='arp -f'
                existResult=$(grep -o 'arp\ -f' $bootScript)
                if [ -z "$existResult" ];then
                    # 添加开机执行禁用网卡ARP协议 与 arp -f 从静态ARP文件刷新ARP缓存表命令
                    # ifconfig $netCard -arp # 禁用ARP协议,禁用后无法使用此脚本,需要重新打开网卡ARP协议才能继续使用
                    # echo "ifconfig $netCard -arp" >> $bootScript #开机自动禁用网卡ARP协议
                    echo $targetCommand >> $bootScript
                    chmod +x $bootScript
                fi
                clear; echo 'Show ARP cache table'; arp -n; echo 'Flush Success !'
            else
                echo $flushResult
                echo 'Unknown Error !!!'
                exit # 退出脚本
            fi
            break
        ;;
        'n'|'no'|'No'|'NO')
            echo '可手动执行  arp -f [Static_ARP_Table_File]  命令刷新 ARP 缓存表'
            break
        ;;
        *)
            printf "$readToast"
        ;;
    esac
done
echo 'run over!'
echo 'I super like super love 张雨烟'
  • 双向绑定:就是在局域网中所有的设备系统网卡自身支持 ARP 协议的全部静态 Static 绑定对方的 IP-MAC 地址。
  • 禁用网卡 ARP 协议:网卡禁用 ARP 协议后,Linux 的 ARP 缓存表还是可用的,禁用 ARP 协议后有些系统可能会清空 ARP 缓存表,所以需要手动添加需要访问的 IP 的 IP-MAC 映射到 ARP 表中。(禁用 ARP 协议后,攻击者就不能通过 ARP 协议骗你了
    • 原理只要禁用了某设备系统的 ARP 协议后,如要访问目标 IP,双方都必须手动添加对方的 IP-MAC 静态 ARP 映射才能互相通信
    • 注意:在设备A系统中禁用了 ARP 协议。在设备B系统中没有禁用 ARP 协议并且有可能在添加设备A的IP-MAC静态 ARP 映射时不允许添加(提示意思如:目标主机无法访问),这是设备B系统的程序问题。( 我在 CentOS6/7.x 可以直接添加目标 IP-MAC 静态 ARP 映射而不需要测试目标主机是否可以访问或存在。Windows 10 却不允许)
    • 缺点:系统与系统之间通信双方都需要手动添加对方的 IP-MAC 静态 ARP 映射,要不然访问不了网络。
    • 我的思路步骤
      1. 使用 Shell 脚本扫描局域网所有 IP-MAC 保存到 /etc/ethers (Linux 默认 ARP 静态文件)。
      2. 终端执行 ifconfig <interface 网卡设备名> -arp 。禁用 ARP 协议。(我在 Shell 脚本中加了#注释,可以去掉) ,禁用后无法使用此脚本,需要重新打开网卡ARP协议才能继续使用。
      3. 终端执行 arp -f <File 默认 /etc/ethers 文件,可以不指定文件> 。从静态缓存文件刷新 ARP 静态 IP-MAC 缓存。
      4. 编辑 /etc/rc.local 增加 ifconfig <网卡> -arp 另起行和 arp -f ,(我在 Shell 脚本中加了#注释,可以去掉), 并设置可执行权限 chmod +x /etc/rc.d/rc.local/etc/rc.local --> /etc/rc.d/rc.local)。

备注:网关(路由器)的 IP-MAC 静态绑定不想去配置的话。就先 ping <网关> 让双方互相缓存对方的 IP-MAC 的 ARP 缓存。


4. traceroute 测试访问目标经过路由

[OPTIONS]... <HostName | IPAddress>

  • -f :设置第一个检测数据包的存活数值 TTL 大小。
  • -m :设置检测数据包的最大存活数值 TTL 大小。
  • -v :详细显示指令的执行过程。

TTL (Time To Live) 生存时间:TTL的作用是限制IP数据包在计算机网络中的存在的时间。

  • TTL 的最大值是 255,TTL 推荐值是 64。
  • TTL 是 IP 数据包在计算机网络中可以转发的最大跳数,每经过一个路由器,路由器都会将这个 TTL 字段值 -1 ,然后再将 IP 包转发出去。如果在 IP 包到达目的 IP 之前 TTL 减少为 0,路由器将会丢弃收到的 TTL=0 的 IP 包并向 IP 包的发送者发送 ICMP time exceeded 消息。

traceroute 192.168.1.110
traceroute www.baidu.com

作用: 测试源主机与目标主机网络是否可达。如不可达可以知道在哪一设备出了问题。


5. netstat 网络状态

主要查看程序监听的端口。

[OPTIONS]...

  • -t  :列出 TCP 端口。
  • -u :列出 UDP 端口。
  • -n :不把监听端口解析成程序名称,显示端口。
  • -l  :显示监听服务器的 Socket 套接字。
  • -a :显示所有 Socket 套接字。
  • -p :显示 Socket 套接字的 PID / 程序名称。
  • -i  :显示网络设备接口信息。

常用命令 :netstat -tunlp

显示网络接口 :netstat -i


九、系统管理

1. service 服务管理

CentOS7 后改用 Systemctl 命令

service <ServiceName> COMMAND

  • start :启动服务。
  • stop :停止服务。
  • status :查看服务状态。
    • active :活动进程运行中。
      1. active(running):一个或多个进程正在运行中。
      2. active(exited):已结束的服务。
      3. active(waiting):正在运行,等待其它事件处理完毕才继续执行。
    • inactive :已停止。
    • activing :当前正在启动中。
    • deactiving :当前正在停止中。
    • failed :失败状态。(启动单元时的错误,如配置文件、运行崩溃等...)
    • dead :程序已经清除。
  • restart :重新启动服务。
  • reload :重新加载服务。

service sshd restart

sshd 中的 d 表示服务器服务。


2. chkconfig 服务自启管理

CentOS7 后改用 Systemctl 命令

[OPTIONS]... <ServiceName> COMMAND

[--level <levels...>] <ServiceName> <on | off>

  • --list :查看所有服务自启信息。 
  • --level :设置程序在哪个运行级别中开启或关闭。7 个运行级别,可多选

    • :关闭所有进程并关机。

    • :单用户无网字符界面。

    • :无网多用户字符界面。

    • :有网多用户字符界面,服务器一般运行级别。

    • :保留。

    • :有网多用户图形界面。

    • :关闭所有进程并重启。

  • on :开机自启。
  • off :禁止自启。

chkconfig --level 0123456 sshd on

chkconfig telnet on


3. systemctl 系统管理

由来CentOS7.X 以上使用 systemctl 代替并兼容 service & chkconfig 命令,以及 init 命令

历史上,Linux 的启动一直采用init进程。
下面的命令用来启动服务。

sudo /etc/init.d/apache2 start
# 或者
service apache2 start

缺点

  1. 启动时间长。init 进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
  2. 启动脚本复杂。init 进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

systemd & systemctl :

  • Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。
  • 根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。
  • 使用了 Systemd,就不需要再用 init 了。Systemd 取代了 initd,成为系统的第一个进程(PID = 1),其他进程都是它的子进程。

Linux 服务管理有两种方式 service 和 systemctl。而 systemd 是 Linux 系统最新的初始化系统 (init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动,systemd 对应的进程管理命令就是 systemctl。

  • 平行处理所有服务,加速开机流程:旧的init启动脚本(System V的那个)是“一项一项任务依序启动”的模式,因此不相依的服务也是得要一个一个的等待。而systemd可以让所有的服务同时启动,毕竟目前我们的硬件主机系统与操作系统几乎都支持多核心架构,因此你会发现到,系统启动的速度变快了;
  • 一经请求就响应的on-demand启动方式:systemd仅有一只systemd服务搭配systemctl指令进行处理,无须其他额外的指令来支持。不像systemV还要init,chkconfig,service...等等指令。此外,systemd由于常驻内存,因此任何请求(on-demand)都可以立即处理后续的daemon启动的任务;
  • 服务关联性的自我检查:由于systemd可以自行进行服务关联性的检查,因此如果B服务的启动前提是A服务,那当你在没有启动A服务的情况下仅手动启动B服务时,systemd会自动帮你启动A服务;
  • 根据daemon功能分类:systemd旗下管理的服务非常多,为了理清所有服务的功能,因此,首先systemd先定义所有的服务为一个服务单位(这里单位叫“unit”,挺重要的,后面详细说),并将该unit分类到不同的服务类型(type)中。systemd将服务单位(unit)区分为service,socket,target,path,snapshot,timer等多种不同的类型(type);
  • 将多个daemons集合成为一个群组:systemd将许多的功能集合成为一个所谓的target项目,这个项目主要用于设计操作环境的创建,所以集合了许多的daemons(执行某个target就是执行多个daemon);
  • 向下相容旧有的init服务脚本:基本上,systemd是可以兼容init的启动脚本,因此,旧的init启动脚本也能够通过systemd来管理,当然了,这里仅限于不使用systemd的某些高级功能;

备注:用 VM 虚拟机同时启动 CentOS6.x 与 CentOS7.x 明显是 7 版本后启动速度比 6.x 前快。

3.1 Unit 单元管理命令

systemctl COMMAND <Unit>

  • start :启动 unit。
  • stop :关闭 unit。
  • restart :关闭并启动(重启) unit,亦即执行 stop 再 start 的意思。
  • reload :不关闭 unit 的情况下,重新载入配置文件,让设置生效。
  • enable :设置 unit 开机启动。
  • disable :设置 unit 开机不启动。
  • status :查看 unit 程序进程状态。(显示的状态如下)
    • active :活动进程运行中。
      1. active(running):一个或多个进程正在运行中。
      2. active(exited):已结束的服务。
      3. active(waiting):正在运行,等待其它事件处理完毕才继续执行。
    • inactive :未运行。
    • activing :当前正在启动中。
    • deactiving :当前正在停止中。
    • failed :失败状态。(启动单元时的错误,如配置文件、运行崩溃等...)
    • dead :程序已经清除。
  • is-active :检查 unit 是否正在运行中。
  • is-enable :检查 unit 是否开机启动。
  • kill :结束进程。
  • show :显示 unit 的配置。
  • mask :注销 unit,注销后你就无法启动这个 unit 了。
  • unmask :取消对 unit 的注销。

systemctl COMMAND [--type | -t <TYPE>] [--state <STATE>] [-all | -a]

  • list-units :列出所有启动 Unit 单元。
  • list-unit-files :列出所有启动 Unit 单元文件。
  • --type | -t :指定列出一种类型 Unit 单元。
  • --state:仅列出指定 Unit 单元文件启用状态的文件 。
    1. enabled :开机启动。
    2. disabled :开机不启动。
    3. static :开机不启动,能被其它 enabled Unit 单元服务唤醒。(关联行性的服务 )
    4. mask :无法启动,已禁用状态。(systemctl [mask 注销 | unmask 取消注销])
  • -all | -a :显示全部。

systemctl COMMAND

  • systemctl get-default <Target> :获取当前默认 Target 启动目标。
  • systemctl set-default <Target> :设置默认 Target 启动目标。
  • systemctl isolate <Target> 临时切换 Target 启动目标。

3.2 单元类型

Unit Type说明
service后台服务进程。
socket后台服务进程,进程间通信套接字。
device设备文件。
mount挂载点(向后兼容 /etc/fstab)
automount挂载点,只有该文件系统被访问时才会进行挂载。
swap交换分区或交换文件。
path文件或路径,根据文件系统特定变化来启动服务。
slice进程组,控制特定 CGroup 内所有进程的总体资源占有。
scope管理不是由 systemd 启动的外部进程。
snapshot快照,管理系统服务状态。
timer由 systemd 管理的定时器,基于时间触发任务,取代 atd、crond 等计划任务。
target启动目标,多个 Unit 单元组合在一起同时启动。如系统开机启动的是命令字符窗口还是图形界面窗口,都是通过 target Unit 单元组启动需要的 Unit 单元即可。
  • 每一个 Unit 配置文件,告诉 Systemd 该这么启动这个 Unit 。
  • Systemd 能够处理各种依赖与冲突关系以及先后顺序,依赖与冲突、先后顺序两者之间是独立的。比如 service1 依赖 service2,而且启动 service1 必须先启动 service2。所以 Systemd 将同时启动这2个服务。 
Unit 单元配置文件存放目录
系统单元目录说明优先级
/lib/systemd/system本地配置的系统单元
/run/systemd/system运行时配置系统单元
/usr/lib/systemd/system软件包安装系统单元

3.3 Unit 单元文件状态 &  服务状态

Unit 单元文件状态
状态说明
enabled开机启动
disabled开机不启动
static开机不启动,能被其它 enabled Unit 单元服务唤醒。(关联行性的服务 )
mask无法启动,已禁用状态。(systemctl [mask 注销 | unmask 取消注销])
服务状态
状态说明

active

  1. active(running):一个或多个进程正在运行中。
  2. active(exited):已结束的服务。
  3. active(waiting):正在运行,等待其它事件处理完毕才继续执行。
活动进程运行中。
inactive未运行。
activing当前正在启动中。
deactiving当前正在停止中。
failed失败状态。(启动单元时的错误,如配置文件、运行崩溃等...)
dead程序已经清除。

3.4 CentOS6.x & CentOS7.x 系统运行级别设置

  • systemctl get-default <Target> :获取当前默认 Target 启动目标。
  • systemctl set-default <Target> :设置默认 Target 启动目标。
  • systemctl isolate <Target> 临时切换 Target 启动目标。

systemctl list-unit-files -type target 命令列出所有启动目标。

系统运行级别说明
CentOS6.x   SystemvCentOS7.x   Systemd (保留)CentOS7.x   Systemd系统命令变化
0runlevel0.targetpoweroff.target关闭所有进程并关机。 halt
1runlevel1.targetrecure.target单用户无网字符界面。 (用于维护,无需用户名、密码登录且 Root 权限)
2runlevel2.targetmulti-user.target无网多用户字符界面。
3runlevel3.targetmulti-user.target有网多用户字符界面。服务器一般运行级别
4runlevel4.targetmulti-user.target保留;未定义
5runlevel5.targetgraphical.target多用户有网图形界面。
6runlevel6.targetreboot.target关闭所有进程并重启。

获取当前默认运行级别systemctl get-default

设置默认运行级别systemctl set-default multi-user.target

临时切换运行级别systemctl isolate multi-user.target

3.4.1 永久修改系统默认运行级别配置文件

OS 系统配置文件说明
CentOS6.x/etc/inittabinittab 系统运行级别配置文件中的 id:5:initdefault: 中的 5 及为运行级别。修改 Number 运行级别数字即可。
CentOS7.x/etc/systemd/system/default.target

/etc/systemd/system/default.target 文件是软链接,软链接到 /lib/systemd/system/*.target 源文件启动目标即可更改默认系统运行级别。

切换级别 3 或 5

  • 3 级:ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  • 5 级:ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

3.4.2 临时切换系统运行级别

系统 OS命令
CentOS6.xinit <Number 0 ~ 6>
CentOS7.xsystemctl <target>  |  init <Number 0 ~ 6>

3.5 CentOS6.x 至 CentOS7.x 命令的升级

service <Unit> COMMAND chkconfig [Options...] <Unit> COMMAND (Unit 自启动)init <Number> (临时切换系统运行级别)
CentOS6.xCentOS7.xCentOS6.xCentOS7.xCentOS6.x & CentOS7.x 保留CentOS7.x

service network start

service network stop

service network restart

... N~

systemctl start network

systemctl stop network

systemctl restart network

... N~

chkconfig network on

chkconfig network off

systemctl enable network

systemctl disable network

init 3

init 5

... N~

systemctl isolate multi-user.target

systemctl isolate graphical.target

... N~

备注init 命令在 CentOS7.x 中保留了下来,所以可以使用 init 命令临时切换系统运行级别

3.6 电源模式管理

命令说明
systemctl poweroff关闭所有进程并关机
systemctl reboot关闭所有进程并重启
systemctl suspend挂起模式
systemctl hibernate休眠模式
systemctl rescue恢复模式
systemctl emergency紧急恢复模式

 挂起与休眠模式的区别

  • 挂起模式挂起(暂停)模式会将系统的状态数据保存到内存中,然后关闭大部分的系统硬件,此时计算机及并没有关机。当用户按下唤醒及其的按钮,系统数据会从内存中恢复,然后,重新驱动被大部分关闭的硬件。然后开始正常运行,唤醒的速度较快。
  • 休眠模式是将系统状态保存到硬盘当中,保存完毕后,将计算机关机。让用户尝试唤醒系统时,系统会开始正常运行,然后将保存在硬盘中的系统状态恢复回来。因为数据是由硬盘读出,所以唤醒的性能与你的硬盘速度有关。

3.7 systemctl 操作 Unit 单元默认后缀 & Unit 名@模板

默认后缀.service

如重启网络就不需要使用 .service 后缀,而其它类型单元则需要

systemctl restart network

Unit 名@模板

有一些单元的名称包括一个 @ 标记。(name@string.service):这意味着它是模板单元 name@.service 的一个 实例。 string 被称作实例标识符, 在 systemctl 调用模板单元时,会将其当作一个參数传给模板单元。模板单元会使用这个传入的參数取代模板中的 %I 指示符。
在实例化之前。systemd 会先检查 name@string.suffix 文件是否存在(假设存在,应该就是直接使用这个文件。而不是模板实例化了)。

大多数情况下,包换 @ 标记都意味着这个文件是模板。假设一个模板单元没有实例化就调用,该调用会返回失败,由于模板单元中的 %I 指示符没有被替换。


4. iptables 防火墙

null


5. firewall 防火墙

  • 查看防火墙状态:firewall-cmd --state
  • 查看防火墙当前配置:firewall-cmd --list-all
  • 查看全部区域配置:firewall-cmd --list-all-zones
  • 重新刷新装载配置:firewall-cmd --reload (当有新的配置时,需要使用此命令使其生效)

5.1 默认区域: 

区域描述
public(公共)

添加规则时,会默认添加到 public 区域

在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。

home(家庭)用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
work(工作)用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
internal(内部)用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接
external(外部)特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
trusted(信任)可接受所有的网络连接。
block(限制)任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。
drop(丢弃)任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
dmz(非军事区)用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
  • 设置给指定区域(默认 public):firewall-cmd --zone public

5.2 常用添加与删除防火墙规则:

固定格式添加 & 删除规则命令描述
firewall-cmd--addinterface

interface <name>

用ifconfig或者ip addr查询到的网卡名称

例:interfaces   ens33

source

sources  < IP or CIDR or MAC >

例:source   192.168.0.211

       source   192.168.0.0/24

       source   00:00:00:00:00:00

(放行的 IP 或 网络 或 MAC 地址)

service

service <name>

firewall-cmd --get-services命令 可以查询到所有的service。但是只能看到名字。(放行的服务)

--removeport

port  < PortID/<tcp | udp> >

一般用于设置除了 services 服务类的 port 端口,也就是自定义的端口。(放行的端口)

source-port

source-port   < PortID/<tcp | udp> >

跟前面的 port 一样的格式,这个指的是源port,port 指的是本机的 port。

protocol

protocol  < tcp | udp | icmp | ip ... >

设置放行的协议

永久设置:--permanent  。使用此选项开机重启依然有效!

5.3 示例

// 添加放行的服务,永久生效
firewall-cmd --zone public --permanent --add-service ssh
// 删除放行服务
firewall-cmd --zone public --remove-service ssh

// 放行指定端口
firewall-cmd --zone public --permanent --add-port 22/tcp
// 删除指定端口
firewall-cmd --zone public --remove-port 22/tcp

  • 最后一定要重新装载配置文件:firewall-cmd --reload
  • 以上操作均可不需要用  --zone public 区域选项,因为默认就是 public 区域

5.4 永久关闭防火墙 & SElinux

// 关闭防火墙
systemctl stop firewalld
// 禁止开机自启
systemctl disable firewalld

// 关闭 SElinux
setenforce 0   // 0 为关闭 1 为开启

// 修改 SElinux 配置文件
vi /etc/selinux/config
SELINUX=disabled       // 赋值  disabled

十、用户 & 组管理

  • Linux采用来组织和管理用户。一个用户如果属于多个组,那这个用户就能共享这些组的权限。
  • 在Linux中每个用户有用户标识符UID主组GID附加组,这些标识是一个无符号整数

1. groupadd 、groupdel 、groupmod 组的创建 & 删除 & 修改

用户所属组配置文件 /etc/group 格式

root:x:0:
  • 第1列:用户组。
  • 第2列:用户组加密口令 X,对应的口令文件 /etc/gshadow 。
  • 第3列:GID。
  • 第4列用户所属组成员列表,每个用户之间用逗号  "," 分隔,如果为空用户就是与组名相同的用户名

用户组密码配置文件 /etc/gshadow 格式 ,是 /etc/group 的加密文件

root:::
  • 第1列:用户组。
  • 第2列:用户组密码,空或 ! 表示没有密码。
  • 第3列:用户组管理者,多个用户管理者用逗号  "," 分隔。
  • 第4列用户所属组成员列表,多个成员用逗号  "," 分隔,如果为空用户就是与组名相同的用户名

groupadd [OPTIONS]... [GROUP]

  • -g :创建组时可指定 GID ,未指定则自动生成 。
  • -o :允许创建重复主组 GID。
  • -p :创建密码。

groupadd -g 1024 GroupName

groupdel [OPTIONS] [GROUP] 注意:删除某用户的主组时则删除失败。

  • -f :强制

groupmod [OPTIONS] [GROUP]

  • -n :修改组名。
  • -g :修改组 GID。
  • -o :允许使用重复的 GID。
  • -p :修改组密码。

groupmod -g 1024 TestUser

groupmod -n NewUserName TestUser

groupmod -p 521024 TestUser


2. useradd 、userdel 、usermod 用户的创建 & 删除 & 修改

用户账户信息文件 /etc/passwd 格式

root:x:0:0:root:/root:/bin/bash
  • 第1列:用户名。
  • 第2列:加密的用户口令 X,对应的密码文件 /etc/shadow
  • 第3列:UID。
  • 第4列:GID。
  • 第5列:用户描述。
  • 第6列:家目录,/home/ 目录下,创建用户时自动创建并且与用户名同名。
  • 第7列:登陆的 shell ,用户登陆后执行的命令程序。(默认 /bin/bash

好玩技巧将其它用户的 UID 和 GID 修改成和 root 用户一致,也就是 0 ,即可成为超级管理员!!!

查看登陆终端的用户列表cat /etc/passwd | grep bash

用户密码配置文件 /etc/shadow 格式

root:$6$pkc06.6SpTYnM04T$ZKO4dyJKhy.YHGtYChsBOYBremPpJplrciKnPXpoc3mh31n.9IUOjZfon6DFFikBqGkZTImI7PnOZcgvx59uE0::0:99999:7:::
  • 第1列:用户名。
  • 第2列:加密口令。为空则无需登陆口令,两个 !! 或一个 感叹号表示未设置密码则不能登陆系统
  • 第3列:最后一次修改口令时间,起点 1970 年 1 月 1 日。
  • 第4列:两次修改口令的最小时间间隔。
  • 第5列:口令已用的时间,保持有效的最大天数。
  • 第6列:系统警告到密码失效之间的天数。
  • 第7列:账号保持有效的最大天数。
  • 第8列:失效时间绝对天数,期满后无法登陆该账号。

useradd [OPTIONS]... [USER] 

  • -r  :创建一个系统账户,(bash#)。
  • -u :UID,未指定则自动生成。
  • -o允许使用重复的 UID
  • -g :主组 GID | GroupName,指定主组时必须存在,未指定则自动生成与用户名同名的组名 。组配置在 /etc/group/etc/gshadow 文件中。
  • -G:附加组 GID | GroupName, GroupName,GroupName......,指定附加组时必须存在。
  • -d :创建指定用户主目录 /home/UserName ,未指定则在 /home/ 下自动生成与用户名相同的主目录,有些系统需要自行创建主目录后并设置属主与属组
  • -s :指定登陆的 shell 命令程序。(默认 /bin/bash
  • -p :为用户设置密码,未设置密码的新账户默认不可登陆,可用 passwd 命令删除密码允许空口令登陆或设置新密码即可。

useradd -u 521024 -g TestUser1 -G 0,1000,TestUser2 -d /home/MyTestUser -p 521024 TestUser

TestUser1 主组以及 0,1000,TestUser2 附加组必须存在,否则提示没有此组,创建用户失败。

userdel [OPTIONS] [USER]

  • -r :(remove删除其和用户关联的主目录以及邮箱池目录(/var/mail/User)。(常用 )

usermod [OPTIONS]... [USER]

  • -l :(login) 新的登陆用户名。
  • -u :新的 UID。
  • -o允许使用重复的 UID
  • -g :新的主组 GID。
  • -G :新的附加组 GIDS 列表。
  • -d :新的主目录,有些系统需要自行创建主目录后并设置属主与属组
  • -s :新的登陆 shell 。
  • -p :新的登陆密码。
  • -L :锁定用户,无法登陆账号。
  • -U :解锁用户,恢复账号登陆。

usermod -l MyTestUser -o -u 0 -g 0 -G 0,1000,TestUser1,TestUser2 -p 666666 TestUser

把普通用户的 UID 和 GID 改成和 root 用户一样,那么此用户就变成了管理员,拥有管理员权限。


3. passwd 、gpasswd 用户口令 & 组用户添加删除

passwd [OPTIONS]... [USER]

  • -d删除密码允许空口令登陆
  • -l  :锁定账号无法登陆。
  • -u :解除账号锁定。

passwd -d user 删除用户密码

passwd user 更改用户密码,输入两次密码

gpasswd [OPTION] GROUP

  • -r :(remove)删除组密码。
  • -a :向组 Group 中添加单个用户 User。
  • -d :从组 Group 中删除单个用户 。
  • -A ,...:设置组的管理员列表。
  • -M ,...设置组的用户成员列表

gpasswd -r user

gpasswd -a user group

gpasswd -d user group

gpasswd -A user1,user2,user3 mygroup

gpasswd -M user1,user2,user3 mygroup


4. id 查看用户信息

id <UserName> ,不指定用户则默认显示当前登陆用户信息。


5. su 切换用户

su user 切换指定用户,未指定用户默认 root 用户


6. sudo 普通用户超级权限工具

  • sudo 是 linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的 root 命令。第一次使用 sudo 命令时只需要输入当前登陆用户的口令,之后一般在 5 分钟内都不需要再次输入口令。

  • 注意:若当前用户没有口令时,无需输入密码。

  • 语法< sudo > < 需要 root 权限才能执行的命令表达式 >

  • -l :列出 sudoers 配置文件中默认允许使用的命令,并列出当前用户可以使用的命令

  • -v :延长口令时间戳。

  • -k :重置口令时间戳。

如普通用户执行用户管理命令需要 root 权限

           sudo useradd -p 666666 TestUser

           sudo passwd -d TestUser

           sudo usermod -o -u 0 -g 0 TestUser

配置文件 /etc/sudoers 

  • 文件属性必须为 0440 (-r--r-----),所以使用 vi | vim 工具或其它编辑工具时,需要先修改此文件的权限才能编辑。有一个专门修改 sudoers 文件的命令程序 visudo ,使用这个工具是因为有专门的语法检查。

  • 语法五部分 <USERS | %GROUPS>    HOSTS = [ ( [ USERS_RUNAS ] [ GROUPS_RUNAS ] ) ]    TAG_SPEC:    COMMANDS
    1. Users | %Groups ( 必须 ) :该规则针对的用户列表或用户组列表的组合(用户组需要用 % 百分号标识)。每个用户或组用 ‘,’ 逗号隔开。
    2. Hosts ( 必须 ) :该规则针对来自哪些主机的用户。可以是主机名、IP 地址,IP地址可以使用 IP/NETMASK 加子网掩码的位表示或精准的子网掩码。每个主机名或 IP 用 ‘,’ 逗号隔开。
    3. User_Runas | Group_Runas ( 可选 ) :表示以什么身份运行此规则。, 默认以 root 超级权限用户身份运行 。每个用户或组用 ‘,’ 逗号隔开。
    4. Tag_Spec ( 可选 ) :NOPASSWD: | PASSWD: | NOEXEC: | EXEC: | SETENV: | NOSETENV: | LOG_INPUT: | NOLOG_INPUT: | LOG_OUTPUT: | NOLOG_OUTPUT: 。常用的 NoPasswd Passwd运行命令时是否需要输入用户口令
    5. Commands ( 必须 )  ​​​​​​:指定规则可以运行哪些命令。绝对路径命令、或使用通配符 *(匹配连续的字符) | ?(匹配单个字符) 。每个命令用 ‘,’ 逗号隔开。
  • 别名变量的定义变量类型关键字User_AliasHost_Alias Runas_Alias Cmnd_Alias 
    • 也就是把 用户、主机、运行方式、命令、都封装到一个变量中,每个属性用  ‘,’ 逗号隔开。
    • 格式变量类型 全大写变量名(可以有下划线、数字) = Attributes,Attributes,.....
  • 详细语法每部分格式 (其实有 6 个部分)
    1. <[USERS | USERS_ALIAS] | [%GROUPS | GROUPS_ALIAS]> 

    2. <HOSTS | HOST_ALIAS> 

    3. [ ( [<RUNS_USER | RUNS_USER_ALIAS>]:[<RUNS_GROUP | RUNS_GROUP_ALIAS>] ) ] 

    4. [SELINUX_SPEC] 

    5. [TAG_SPEC] 

    6. <COMMANDS | COMMANDS_ALIAS> 

  • 特殊关键字 ALL 代表全部的意思。可用在 Users、Hosts、Runas、Cmnds 。
  • 注意 User_Runas & Group_Runas & Tag_Spec :如 (user:group) NOPASSWD: /sbin/mount,/sbin/ifconfig,mount 和 ifconfig ...... 之后的命令都会受到前面指定的 Runas 和 Tag_Spec 的影响,所以要想为后面的命令如 ifconfig 后的命令都指定新的 Runas 和 Tag_Spec 就可以写新的 Runas 和 Tag_Spec。

使用 visudo 工具命令编辑 /etc/sudoers ,直接在终端输入 visudo 即可

# Test Alias
User_Alias      MY_USERS = kebin,TestUser
Host_Alias      MY_HOSTS = kebin-vm-centos7,127.0.0.1,localhost,192.168.0.50,192.168.0.99/24,192.168.0.100/255.255.255.0
Runas_Alias     MY_USER_RUNAS = root,kebin,TestUser,sshd,apach
Runas_Alias     MY_GROUP_RUNAS = root,kebin,TestUser,sshd,apach
Cmnd_Alias      MY_CMNDS = /bin/*,/sbin/*,/usr/bin/*,/usr/sbin/*,/usr/local/bin/*,/usr/local/sbin/*,ALL


# Test , 变量直接使用并和属性混合,用 ‘,’ 逗号隔开。
# kebin,TestUser,%wheel               127.0.0.1,localhost,kebin-vm-centos7 = (root,kebin:root,whell)  ALL,/sbin/arp,/sbin/mount/ifconfig
# MY_USERS      MY_HOSTS = (MY_USER_RUNAS:MY_GROUP_RUNAS)       NOPASSWD:       MY_CMNDS
MY_USERS,%wheel    MY_HOSTS,192.168.0.188 = (MY_USER_RUNAS:MY_GROUP_RUNAS)    NOPASSWD:  MY_CMNDS,/*,(sshd) NOPASSWD: /sbin/ifconfig,(ALL:ALL) NOPASSWD: /sbin/mount,(:wheel) NOPASSWD: /sbin/fdisk,NOPASSWD: /sbin/arp

ALL     ALL = (ALL)     NOPASSWD: ALL
ALL     ALL = (ALL)     ALL 

使用 sudo -l 命令列出当前用户可使用的命令规则: 

[kebin@kebin-vm-centos7 ~]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS
    DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
    LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
    LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
    XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 kebin 可以在 kebin-vm-centos7 上运行以下命令:
    (root, kebin, TestUser, sshd, apach : root, kebin, TestUser, sshd, apach) NOPASSWD: /bin/*, /sbin/*,
        /usr/bin/*, /usr/sbin/*, /usr/local/bin/*, /usr/local/sbin/*, ALL, /*
    (sshd) /sbin/ifconfig
    (ALL : ALL) /sbin/mount
    (kebin : wheel) /sbin/fdisk, /sbin/arp
    (ALL) NOPASSWD: ALL
    (ALL) ALL

十一、日常命令

1. shutdown 关机&重启

[OPTIONS]... [TIME]

  • 立即选项now
  • 立即关机-h nowpoweroff (这是一个命令)。
  • 定时关机或重启-h 00 : 30 (指定时间) ,-r 100 (无冒号则是多少分钟后)。
  • 立即重启-r now reboot (这是一个命令)。
  • 不加 now 则默认 1 分钟后

2. 常用快捷命令

  • Tab命令或字符补全
  • Ctrl + l :清屏,同 clear 命令。
  • Ctrl + < C | Z > :停止当前正在运行的命令。
  • Ctrl + D :结束 Shell 脚本循环。

3. date 显示或修改系统时间&日期

  • -s :设置日期 & 时间。日期格式 [ -s <year/month/day> ]。时间格式 [ -s <time:minute:second> ]。
  • date :显示日期和时间。

设置日期date -s 2000/11/05

设置时间date -s 11:30:00


4. df 显示磁盘占用空间

[OPTIONS]...

  • -h :以最易理解的方式显示文件大小。
  • -i  :查看 inode 空间。 inode 用来存放档案及目录的及基本信息,包括时间、档案名、使用者及群组等。在分割扇区时就已经生成多数量的 inodeinode 的数量关系着系统中可以建立的档案及目录总数

df -hi


5. free 显示系统内存状态

[OPTIONS]...

  • -b | -k | -m | -g :以 Bytes | KB | MB | GB 单位大小显示。
  • -h :以最易理解的方式显示内存使用大小。

显示字段含义

  • total :总大小。
  • used:已使用大小。
  • free  :剩余空间。
  • Shared :多进程共享内存空间总额。
  • buffers  :缓冲区大小。
  • cached :高速缓存大小。
  • available :可用空间。

free -m

free -h


十二、命令——长选项"--"、短选项 "-" 、无"-"选项、用法

  • 短选项"-" (short options):通常只包含一个大写或小写字母,如 ls -a 。短选项可组合使用,如 ls -as
  • 长选项"--" (long options):包含了大小写字母组成的单词,如 ls --allls --sizels --help
  • 无"-"选项 :选项前面没有任何连字号(横 "-"),可组合使用,如 tar xzvf
  • 短选项"-"+完整单词:如 find -name -fstypt 。这种是不被上述规则约束的。
  • 短选项"-"和长选项"--"的区别:如 ls -a ls --all 是等价的短选项是长选项的简写,长选项是短选项的单词写法,有些选项只有短选项或者只有长选项(无等价副本)


详细参考 :Linux命令长选项"--"和短选项"-"和没有"-"选项区别(选项的单双连字符'-'和'--'区别)

在Android 11的源码中,可以通过修改StatusBar.java文件来设置默认隐藏全局导航栏。具体操作如下: 1. 打开Android 11的源码,找到该文件:/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java。 2. 在该文件中找到以下代码: ```java private void initNavigationBar() { mNavigationBarView = mNavigationBarController.getView(); if (mNavigationBarView != null) { mNavigationBarView.setDisabledFlags(mDisabled1); mNavigationIconHints = mNavigationBarView.getIconPolicy().getIconHints(); setNavigationBarColor(mNavigationBarColor, mNavigationBarDividerColor); mNavigationBarView.setOnVerticalChangedListener(this::setQsScrimEnabled); mNavigationBarView.setOnTouchListener((v, ev) -> shouldDeadZoneConsumeHome(ev)); updateSystemUiStateFlags(-1, -1); } } ``` 这是StatusBar.java文件中初始化导航栏的代码,可以在其中添加以下代码来实现默认隐藏全局导航栏的功能: ```java private void initNavigationBar() { mNavigationBarView = mNavigationBarController.getView(); if (mNavigationBarView != null) { mNavigationBarView.setDisabledFlags(mDisabled1); mNavigationIconHints = mNavigationBarView.getIconPolicy().getIconHints(); setNavigationBarColor(mNavigationBarColor, mNavigationBarDividerColor); mNavigationBarView.setOnVerticalChangedListener(this::setQsScrimEnabled); mNavigationBarView.setOnTouchListener((v, ev) -> shouldDeadZoneConsumeHome(ev)); updateSystemUiStateFlags(-1, -1); // 隐藏全局导航栏 mNavigationBarView.setVisibility(View.GONE); } } ``` 3. 保存修改后的文件,重新编译系统,即可在Android 11中实现默认隐藏全局导航栏的功能。 需要注意的是,修改源码需要一定的技术水平,同时也需要对系统的稳定性和安全性进行考虑。建议在实际应用场景中,谨慎进行修改。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚妄狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值