基础
GNU 软件包列表:包含多个包软件:
SElinux
安全增强型 Linux(Security-Enhanced Linux),一个 Linux 内核模块,也是 Linux 的一个安全子系统。
SELinux 属于MAC(Mandatory Access Control )的具体实现。MAC机制的特点在于,资源的拥有者,并不能决定谁可以接入到资源。具体决定是否可以接入到资源,是基于安全策略。而安全策略则是有一系列的接入规则组成,并仅有特定权限的用户有权限操作安全策略。
基本信息
内核版本
uname -r
或 cat /proc/version
HostName
集群配置中需要注意
/etc/hosts 配置主机名到IP的映射
/etc/hostname 配置主机名,可以通过hostnamectl修改
Mount
挂载命令
默认所有的挂载状态都是私有的。
mount 命令用来挂载文件系统。其基本命令格式为:
mount -t type [-o options] device dir
device:指定要挂载的设备,比如磁盘、光驱等。 dir:指定把文件系统挂载到哪个目录。 type:指定挂载的文件系统类型,一般不用指定,mount 命令能够自行判断。 options:指定挂载参数,比如 ro 表示以只读方式挂载文件系统。
绑定挂载
联合挂载
自动挂载
/etc/fstab
配置文件
查看已经挂载的目录
回环设备
回环设备( 'loopback device')允许用户以一个普通磁盘文件虚拟一个块设备。
- 对它的所有读写操作都将被重定向到读写一个名为 disk-image 的普通文件而非操作实际磁盘或分区的轨道和扇区。
回环设备以 /dev/loop0、/dev/loop1 等命名。每个设备可虚拟一个块设备。注意只有超级用户才有权限设置回环设备。
虚存分配策略
overcommit_memory是一个内核对内存分配的一种策略。 具体见/proc/sys/vm/overcommit_memory
下的值
-
0, 表示内核将检查是否有足够的可用物理内存供应用进程使用;如果有,内存申请允许;否则,内存申请失败,并把错误返回给应用进程;
-
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何;
-
2, 表示内核拒绝等于或者大于总可用 swap 大小以及overcommit_ratio指定的物理RAM比例的内存请求
-
overcommit_ratio, 当overcommit_memory=2的时候,它一般是代表的是系统中总的内存的百分比
虚拟内存限制
CommitLimit = SwapTotal + MemTotal * overcommit_ratio
总的虚拟内存 = 总的交换分区 + 总的物理内存 * overcommit_ratio
清空系统缓存
```shell echo 1 > /proc/sys/vm/drop_caches
通过free -g 查看是否缓存被清空
```
0 – 不释放
1 – 释放页缓存
2 – 释放文件节点缓存和目录项缓存
3 – 释放所有缓存
用户共享文件配置
/etc/skel/目录
/etc/skel/目录是用来存放新用户配置文件的目录,当我们添加新用户的时候,这个目录下的所有文件会自动被复制到新添加的用户的家目录下。
- 初始统一的环境配置;
- 数据共享的场景;
文件和路径
链接
符号链接:ln -s src dst
- 不同的 inode,删除源文件,符号链接失效;
硬链接:ln src dst
- 指向同一个inode,一个文件有多个路径名(防止误删),源文件删除后,硬链接仍可读取;
内容清空
ls
文件大小为0:
cat /dev/null > filename
Unzip
批量解压
find
find 的结果默认按文件/目录的创建顺序排序,不要依赖find的结果顺序,需要顺序的时候加上sort;
find searchdir -name searchfilename
文件属性
file
命令确定所处理的文件类型。
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=94943a89d17e9d373b2794dcb1f7e38c95b66c86, stripped
stat -c %U file
:显示 file 所属用户的名称
获取路径的最后文件名
basename /root/a.tar.gz
返回 a.tar.gz
。
获取当前脚本的绝对路径
-
常见错误命令
-
pwd : 获取当前工作目录, 不是脚本所在的目录,取决于脚本是
./script.sh
还是./a/script.sh
; -
$0 :
- 使用一个文件调用bash,那$0的值,是那个文件的名字(没说是绝对路径)
- 使用-c选项启动bash的话,真正执行的命令会从一个字符串中读取,字符串后面如果还有别的参数的话,使用从$0开始的特殊变量引用(跟路径无关了)
- 除此以外,$0会被设置成调用bash的那个文件的名字(没说是绝对路径)
-
正确命令
用户
Linux kernel 2.6之后,最大的用户/用户组数目超过4 billion;
id
显示当前用户名,/usr/bin/id -u -n
useradd
$ useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号]
- -m 自动建立用户的登入目录(默认);
- -M 不要自动建立用户的登入目录;
- -n 取消建立以用户名称为名的群组;
- -g 指定用户的群组;
- -r 建立系统帐号;
- -u 指定用户id,0~499默认是保留给系统用户账号使用的,所以该值必须大于499
userdel
-f 强制删除用户,即使用户当前已登录
-r 删除用户的同时,删除与用户相关的所有文件
sudo免密码执行文件
编辑 /etc/sudoers
# userA 可以在任何主机(由 ALL 表示)上以 root 用户(由 (root) 表示)的身份,不需要密码(NOPASSWD)运行特定命令
userA ALL=(root) NOPASSWD:/opt/sudobin2/commoninstall.sh
用户组
groupadd group_test
设置某个用户所在的用户组
usermod -g 用户组 用户名
进制转换
hexdump
二进制转 ASCII、十进制、十六进制或八进制显示文件内容。
- -n length:格式化输出文件的前length个字节
- -C:输出规范的十六进制和ASCII码
- -b:单字节八进制显示
- -c:单字节字符显示
- -d:双字节十进制显示
- -o:双字节八进制显示
- -x:双字节十六进制显示
- -s:从偏移量开始输出
$ hexdump -C /bin/ls | head
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 3e 00 01 00 00 00 d4 42 40 00 00 00 00 00 |..>......B@.....|
00000020 40 00 00 00 00 00 00 00 f0 c3 01 00 00 00 00 00 |@...............|
00000030 00 00 00 00 40 00 38 00 09 00 40 00 1f 00 1e 00 |....@.8...@.....|
printf
文本相关
多行字符输入
grep
- -x:匹配多行
- -v:不匹配的项
- -F:指定pattern,每行一个pattern
示例:寻找在文件B中出现的,但是文件A中未出现的行
# 直接文件操作
cat B | grep -x -v -F “$(cat A)”
# 字符串可以是以下形式
C_A=$(cat A)
C_B=$(cat B)
echo "$C_B" | grep -x -v -F echo "$C_A"
cut
cut :字符串分割
-d
:指定字段的分隔符,默认的字段分隔符为“TAB”;-f
:显示指定字段的内容
awk
awk [-F 字段分隔符] 'BEGIN{actions} /pattern1/{actions1} /pattern2/{actions2} END{actions}' input_file
# awk -F ':' '{print $2}' a.txt
- 若不指定字段分隔符,则使用环境变量的IFS的值(通常为空格)
- 其中
BEGIN{actions}
和END{actions}
是可选的; - 相关变量
- 字段变量:
$0
,$1
,$2
... $NF
: 最后一个变量- ARGC:命令行参数个数;ARGV:命令行参数数组
awk 和 sed:
- awk适合按列(域)操作,sed适合按行操作
- awk适合对文件的抽取整理,sed适合对文件的编辑
sed
sed不管匹配没有匹配到,状态返回码都是0
主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,格式如下:
常用选项:
-
-i
∶直接修改读取的档案内容,而不是由屏幕输出。 -
-n
∶安静模式,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。 -e
∶直接在指令列模式上进行 sed 的动作编辑;-f filename
∶直接将 sed 的动作写在一个文件内;-r
:支持正则语法;
常用命令 command:
a \str
∶追加行,在匹配行后面追加str
并换行,$
表示最后一行;- c
\ str
∶替换行; d
∶删除匹配行;i
∶插入行,在匹配行前面;p
∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作;s
∶替换字符串,将匹配的字符串替换掉;
如何匹配行:
# 行数匹配,在第一行到最后一行,每行后面添加add one新的一行
$ sed '1,$a \add one' input.txt
# 字符串匹配,包含first字符串行 后面加上add one新的一行
$ sed '/first/a \add one' input.txt
# 正则字符串匹配,包含 以ha开头,day结尾的行 后面加上add one新的一行
$ sed '/^ha.*day$/a \add one' input.txt
获取匹配内容
\(.*\)
匹配的内容,可用\1
的形式进行使用;
cat mail.xml | sed 's/.*<title>\(.*\)<\/title.*<author><name>\([^<]*\)<\/name><email>\([^<]*\).*/Authot: \2 [\3] \nSubject: \1\n/'
磁盘
获取扇区大小
获取磁盘块的大小
操作系统获取页(Page)的大小
网络相关
查看可用的端口号范围
查看带宽大小
$ etchtool em1
Settings for em1:
Supported ports: [ FIBRE ]
# 支持 1Gbps/10GB 全双工以太网连接
Supported link modes: 1000baseT/Full
10000baseT/Full
Supported pause frame use: Symmetric Receive-only
# 接口支持自动协商功能,用于确定最佳的连接速度和双工模式。
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 1000baseT/Full
10000baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
# 当前接口的运行速度是 10Gbps
Speed: 10000Mb/s
Duplex: Full
# 直接连接的铜缆
Port: Direct Attach Copper
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: g
Wake-on: d
Current message level: 0x00000000 (0)
# 接口与网络设备之间的物理连接是活动
Link detected: yes
查看网桥和端口连接信息
brctl show
netstat
格式:
-a (all)
显示所有选项,默认不显示LISTEN相关-n
拒绝显示别名,能显示数字的全部转化成数字。-p
显示建立相关链接的程序名-t (tcp)
仅显示tcp相关选项-u (udp)
仅显示udp相关选项-l
仅列出有在 Listen (监听) 的服務状态-r
显示路由信息,路由表-e
显示扩展信息,例如uid等-s
按各个协议进行统计-c
每隔一个固定时间,执行该netstat命令。
netstat结果信息分两类
- Active Internet connections,有源TCP连接,
Proto Recv-Q Send-Q LocalAddress ForeignAddress State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE
- Active Unix domain sockets,有源Unix域套接口,RefCnt表示连接到本套接口上的进程号
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 1 [ ] STREAM CONNECTED 16176 @000000dc
unix 9 [ ] DGRAM 5292 /dev/log
unix 1 [ ] STREAM CONNECTED 16182 @000000df
证书
创建自签名证书(Generated By ChatGpt)
# 生成私钥
openssl genrsa -out mykey.key 2048
# 创建证书签名请求(CSR)
openssl req -new -key mykey.key -out mycsr.csr -subj "/C=CN/ST=GuangDong/L=ShenZhen/O=Huawei/OU=CBC/CN=172.16.1.129"
# 自签名证书
openssl x509 -req -days 365 -in mycsr.csr -signkey mykey.key -out mycert.crt
# 可选(将证书和私钥转换为其他格式),如PKCS#12(.pfx或.p12)或Java KeyStore(.jks)
openssl pkcs12 -export -out mycert.pfx -inkey mykey.key -in mycert.crt
进程相关
nohup
nohup command > myout.file 2>&1 &
& : 指在后台运行,但当用户退出(挂起)的时候,命令自动也跟着退出
nohup : 不挂断的运行,注意并没有后台运行的功能。
kill
kill -Signal pid
kill:
- kill 会默认传15代表的信号为SIGTERM,这是告诉进程你需要被关闭,请自行停止运行并退出,进程可以清理缓存自行结束,也可以拒绝结束
kill -HUP 或 kill -1:
- 根据约定,当您发送一个挂起信号(信号 1 或 HUP)时,大多数服务器进程(所有常用的进程)都会进行复位操作并重新加载它们的配置文件
kill -3:
- 可以打印进程各个线程的堆栈信息,不会杀进程,kill -3 pid 后文件的保存路径为:/proc/${pid}/cwd,文件名为:antBuilderOutput.log
kill -9:
- SIGKILL,表示进程被终止,需要立即退出,强制杀死该进程,这个信号不能被捕获也不能被忽略
- 对于 Java 进程,其 ShutDownHook 不会被执行;
kill -0:
- 不发送信号,但是仍然进行错误检查,可用作检查进程id是否存在;
组合信息杀进程:
-
根据线程名kill:ps -au xliu | grep gedit | awk '{print $1}' | xargs kill -9
-
根据jps来kill : jps | grep JobManage | awk '{print $1}' | xargs kill -9
杀掉远程的进程不一样,上面的awk,需要转义。
jps | grep JobManage | awk '{print \$1}' | xargs kill -9
父子进程退出
进程意外退出时,如何将主进程创建的子进程终止,有两种做法。
- 一种是将是将主进程中创建的子进程信息保存,使用信号处理机制,在主进程收到终止信号SIGTERM时,保存的子进程信息terminate,之后主进程退出;
- 另一种是更加直接,通过进程组id(
getpgid(pid)
)将整个进程组中的进程杀死。
判断命令是否存在
-
which,非内置命令,依赖于平台,
-
type、hash 或 command,内置命令;再判断
$?
的值
if command -v foo >/dev/null 2>&1; then echo 0; else echo 1; fi
type foo >/dev/null 2>&1
hash foo 2>/dev/null
crontab
-
crontab -l 列出定时任务,crontab -e 编辑定时任务;
-
定时任务格式:f1 f2 f3 f4 f5 program
-
f1表示分钟,f2表示小时,f3表示一月中第几日,f4表示月份,f5表示星期中第几天;
- f1为*/n表示每个n分钟执行一次;
调试相关命令
工具命令
[Coreutils - GNU core utilitieshttps://www.gnu.org/software/binutils/)
Yum
代理
proxy=http://代理服务器IP地址:端口号
proxy_username=代理服务器用户名
proxy_password=代理服务器密码