linux 中文实用型手册 基于RHEL(红帽系)
硬件系统
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
硬件信息
-
机器型号
dmidecode | grep "Product Name"
-
CPU型号
cat /proc/cpuinfo |grep "model name" | uniqWWW
-
CPU详情
lscpu
-
CPU个数
cat /proc/cpuinfo |grep "physical id" | sort | uniq|wc -l
-
CPU核数
export vc=`cat /proc/cpuinfo |grep "cores"|uniq` export text='单颗CPU核数为: ' echo $text$vc
-
CPU线程
cat /proc/cpuinfo | grep "processor" | wc -l
cat /proc/cpuinfo | grep -c "processor"
grep 'processor' /proc/cpuinfo | sort -u | wc -l
-
内存
# l 显示最高最低 free -m # m 以M为单位 free -lm
-
硬盘
fdisk -l
fdisk -l | grep Disk
fdisk -l | grep "磁盘 "
系统信息
-
系统版本
cat /etc/os-release
-
系统版本(红帽系)
cat /etc/redhat-release cat /etc/centos-release
-
内核版本
cat /proc/version
-
机器名
hostname
-
系统位数
file /sbin/init
-
系统字符集
locale
系统时钟
-
直接修改系统时间
date -s "2020-06-30 22:20:00"
-
配置ntp时钟自动同步
-
手动同步
# 服务启动之前可用 ntpdate 10.8.1.102
-
修改配置
vim /etc/ntp.conf
# WA时钟服务器 server 10.8.1.102 prefer server 10.8.1.103
-
增加配置
echo "server 10.8.1.102 prefer" > /etc/ntp.conf echo "server 10.8.1.103" > /etc/ntp.conf
-
启动服务
systemctl status ntpd
systemctl restart ntpd
-
开机自启
systemctl enable ntpd.service
-
检查时差
ntpdate -d 10.8.1.102
ntpdc -c loopinfo
存储挂载
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
mount挂载硬盘
-
列出所有硬盘和它们的分区信息
fdisk -l
-
打开分区管理进行分区
fdisk /dev/nvme0n1***
-
格式化分区为ext4文件系统
mkfs.ext4 /dev/nvme1n1p1
-
创建目录
mkdir /srv/BigData/elasticsearch
-
挂载分区到目录
mount /dev/nvme0n1p1 /srv/BigData/elasticsearch/esnode1
挂载raw格式的镜像
-
获取可以挂载的环回设备
losetup -f /dev/loop0
-
进行块设备挂载
losetup /dev/loop0 abc.img
-
执行块设备的分区映射
kpartx -a /dev/loop0
-
查看映射分区入口
ls /dev/mapper/
-
查看磁盘情况(找到需要挂载的数据分区)
fdisk -l
-
mount分区
mount /dev/mapper/loop0p1 /mnt/
-
去挂载步骤
umount kpartx -d losetup -d
用户权限
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
-
查看登陆历史
-
last
-
查看在线用户
w who
user
-
查看所有用户
cat -n /etc/passwd
-
创建用户
useradd username
这里会自动创建一个与用户同名的组,并作为这个用户的主组
-
创建用户并添加到组
useradd -g groupname username
-
删除用户
不加参数
-r
不会删除/home下的用户目录userdel -r username
-
强制删除用户
强制删除用户会导致该用户的所有登录会话被强制下线,系统会终止用户的所有进程,并立即断开用户连接。
userdel -f username
group
-
查看用户所属组
groups testuser
-
创建用户组
groupadd testgroup
-
删除用户组
groupdel testgroup
passwd
passwd
更改用户密码或其他密码信息
-
语法参数
用法: passwd [选项...] <帐号名称> -k, --keep-tokens 保持身份验证令牌不过期 -d, --delete 删除已命名帐号的密码(允许用户不输密码登录) -l, --lock 锁定指名帐户的密码 -u, --unlock 解锁指名账户的密码 -e, --expire 终止指名帐户的密码 -f, --force 强制执行操作 -x, --maximum=DAYS 密码的最长有效时限 -n, --minimum=DAYS 密码的最短有效时限 -w, --warning=DAYS 在密码过期前多少天开始提醒用户 -i, --inactive=DAYS 当密码过期后经过多少天该帐号会被禁用 -S, --status 报告已命名帐号的密码状态 --stdin 从标准输入读取令牌(可以绕过密码强度限制)
更改当前用户密码
passwd
-
更改其他用户密码
passwd username
-
强制用户在下次登录时更改密码
passwd -e username
-
锁定用户账户
passwd -l username
-
显示用户密码的状态
passwd -S username
-
绕过密码强度检查
echo "123" | passwd --stdin root
shadow
-
查看用户是否设置密码
cat /etc/shadow
:
是分隔符,第一列是密码,如果第一列为!!
则证明此用户未设置密码,无法使用密码方式登录如果第一列为空则表示用户可以不输入密码登录
chown
chown (Change Owner)
更改或目录所有者
-
语法参数
chown [OPTION]... [OWNER][:[GROUP]] FILE... -R:递归更改指定目录及其下所有文件和子目录的属主和属组。 -v:详细显示所有更改。 --reference=<ref_file>:将指定文件的属主和属组信息应用到目标文件上。
-
更改文件属主
chown user1 file.txt
-
更改文件属主和属组
chown user1:group1 file.txt
-
递归更改目录及其子目录下所有文件的属主
chown -R user1 /path/to/directory
-
使用参考文件的属主和属组信息更改目标文件
chown --reference=ref_file target_file
chmod
chmod (Change Mode)
更改文件或目录权限
-
语法参数
chmod [OPTION]... MODE[,MODE]... FILE... -R:递归更改指定目录及其下所有文件和子目录的权限。 -v:详细显示所有更改。 --reference=<ref_file>:将指定文件的权限信息应用到目标文件上。 # 八进制模式: 4:读权限 (r) 2:写权限 (w) 1:执行权限 (x) # 符号模式: u:属主 (user) g:属组 (group) o:其他用户 (others) a:所有用户 (all),相当于 u, g, o 组合 ## 权限符号: +:增加权限 -:去除权限 =:设置为指定权限 ## 权限类型: - `r`:读权限 - `w`:写权限 - `x`:执行权限
-
文件权限标识
[type][owner][group][others]
-
使用八进制模式更改文件权限
7(4+2+1):rwx 6(4+2): rw- 5(4+1): r-x
- 修改文件权限为u7-g5-o4
chmod 754 flie1
递归更改目录及其子目录下所有文件的权限
chmod -R 644 /path/to/directory
-
使用符号模式更改文件权限
所有用户和组都可执行
chmod +x script.sh
为文件增加执行权限。
chmod u+rwx,g+rx,o+r file.txt
为属主增加读、写、执行权限,属组增加读、执行权限,其他用户增加读权限。
-
复制
ref_file
的权限到target_file
:chmod --reference=ref_file target_file
文件目录
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
ls
ls (List)
-
语法参数
ls [选项] [文件...] -l:使用长格式显示文件信息。 -a:显示所有文件,包括隐藏文件(以 `.` 开头的文件)。 -h:以人类可读的格式显示文件大小。 -t:根据修改时间排序。 -r:逆序排列。 -R:递归列出子目录内容。 -S:根据文件大小排序。 --time-style=long-iso:指定时间显示格式,如 ISO 标准格式。
- 显示标准日期格式
ls -l --time-style=long-iso
- 列出当前目录的所有文件,包括隐藏文件
ls -la
- 列出目录内容,并以人类可读的格式显示文件大小
ls -lh
- 根据修改时间逆序列出文件
ls -ltr
- 递归列出目录内容
ls -R
du
du (Disk Usage)
磁盘使用
-
语法参数
du [选项] [文件或目录] -h:人类可读 -s:总计,仅显示指定文件或目录的总大小。 -a:显示每个文件,包括目录下的所有文件,而不仅是目录本身的大小。 -c:累计,显示总计大小。 -d N 或 --max-depth=N:指定深度,限制目录遍历的深度,例如 -d 1 只显示当前目录,不递归子目录。 -k:以 KB 为单位显示文件大小。 -m:以 MB 为单位显示文件大小。
-
当前目录大小
du -h
-
子目录大小
du -h -d 1
-
子目录和文件大小
du -ah -d 1
-
目录大小排名
du -ah /path/to/directory | sort -rh | head -10
touch
-
创建空文件或更新文件时间戳
touch file1.txt
wc
wc (Word Count)
-
语法参数
# word count wc [选项] 文件名 -l:统计行数。 -w:统计单词数。 -c:统计字节数。 -m:统计字符数(字符数与字节数在 ASCII 文件中相同,但在多字节编码文件中可能不同)。 -L:显示最长行的长度。
-
统计文件行数
wc -l sample.txt
-
统计当前目录中的文件和目录数量
ls | wc -l
awk
awk (Aho、Weinberger、Kernighan)
作者,一种用于文本处理的编程语言
-
语法参数
awk [选项] '脚本' 文件名 -F:指定输入字段分隔符。 -v:设置变量。 '{print $n}':打印第 n 个字段。 '{action}':对每一行执行指定的操作。
-
打印文件的所有行
awk '{print}' sample.txt
-
使用分隔符提取字段
awk -F ',' '{print $1}' sample.csv
-
统计某列的总和
awk '{sum += $1} END {print sum}' sample.txt
find
find 查找文件和目录
语法参数
-
语法
find [路径] [选项] [表达式] # 路径:指定要查找的目录,默认为当前目录(.) # 选项:默认print(打印查找结果)
-
参数
-name:根据文件名查找(区分大小写) -iname:根据文件名查找(不区分大小写) -type [f,d,;]:指定查找的文件类型 f:查找普通文件 d:查找目录 l:查找符号链接 -mtime:按修改时间查找(以天为单位) +n:在 n 天前修改 -n:在 n 天内修改 -size:按文件大小查找 +n:大于 n 的文件 -n:小于 n 的文件 -empty:查找空文件或空目录 -user:查找属主为指定用户的文件 -group:查找属组为指定组的文件 -perm:按权限查找文件 -exec:对找到的文件执行指定命令 -delete:直接删除找到的文件(小心使用) 表达式: 可以组合多个条件,使用逻辑操作符如 -and、-or、-not 来构建复杂查询
文件和目录查找
-
按照文件名查找(不区分大小写)
find path -iname "*.log"
按修改时间查找
-
查找 7 天前修改的文件
find path -mtime +7
按文件大小查找
-
查找大于 1GB 的文件
find path -size +1GB
按文件权限查找
-
按属主查找文件
find path -user username
-
按权限查找文件
find path -perm 644
排除目录查找
-
排除特定目录不进行查找
find path -path "path/dir_to_exclude" -prune -o -name "*.txt" -print
复合示例
-
对找到的 .log 文件执行删除命令(此命令极度危险)
find path -name "*.log" -exec rm {} \;
-
查找修改时间为 3 天前,类型为文件
find path -type f -mtime +3
-
查找 5 天前类型为文件的对象,并删除
find path -type f -mtime +5 | xargs rm -rf
-
查找大于 100MB 且 7 天前修改的 .log 文件
find path -name "*.log" -size +100M -mtime +7
-
查找空目录
find path -type d -empty
-
查找空文件(文件大小为 0 字节的文件)
find path -type f -empty
-
限制查找的最大目录深度
find path -maxdepth 2 -name "*.txt"
tar
tar (Tape Archive)
磁带归档
打包(.tar)
tar -cvf file.tar.gz filedir
打包压缩(.tar.gz)
# 正常打包.tar.gz
tar -czvf file.tar.gz file
解包解压(.tar.gz)
# 解压.tar.gz 到指定目录(需先创建目录)
tar -xzvf file.tar.gz -C /path/to/directory
创建归档文件
- -c:创建新的归档文件(create)
tar -cf archive.tar file1 file2
- -z:使用 gzip 压缩归档文件
tar -czf archive.tar.gz file1 file2
- -j:使用 bzip2 压缩归档文件
tar -cjf archive.tar.bz2 file1 file2
- -J:使用 xz 压缩归档文件
tar -cJf archive.tar.xz file1 file2
解压归档文件
- -x:从归档文件中提取文件(extract)
tar -xf archive.tar
- -z:解压 .gz 格式的归档文件
tar -xzf archive.tar.gz
- -j:解压 .bz2 格式的归档文件
tar -xjf archive.tar.bz2
- -J:解压 .xz 格式的归档文件
tar -xJf archive.tar.xz
查看归档文件内容
- -t:列出归档文件中的内容(list)
tar -tf archive.tar
追加内容到现有归档文件
- -r:将文件追加到现有归档文件中(append)
tar -rf archive.tar file3
更新归档文件中的内容
- -u:只添加修改过的文件到归档中(update)
tar -uf archive.tar file1
删除归档中的文件
- --delete:从归档文件中删除指定的文件(通常不与压缩选项一起使用)
tar --delete -f archive.tar file1
文件和目录选项
- -C:切换到指定目录,然后再执行 tar 操作
tar -czf archive.tar.gz -C /path/to/directory .
- -v:显示操作过程中的详细信息(verbose)
tar -cvf archive.tar file1
- -P:保留绝对路径名(默认 tar 忽略路径的 /)
tar -cvPf archive.tar /etc/hosts
- --exclude=PATTERN:在打包时排除符合模式的文件
tar -czf archive.tar.gz --exclude='*.log' /path/to/directory
归档完整性校验
- -W 或 --verify:在归档后校验归档文件的完整性
tar -cf archive.tar file1 --verify
归档格式
- --format=FORMAT:指定归档的格式(如 ustar、gnu、posix)
tar --format=gnu -cf archive.tar file1
特别重要的 f 参数
- -f:指定归档文件名(file),用来告诉 tar 归档到某个文件,而不是设备。-f 参数通常必须与 c, x, t 等操作符一起使用,它指明了操作的是哪个归档文件。
tar -cf archive.tar file1
tar -xf archive.tar
若未指定 -f,tar 默认操作的是磁带设备文件。
示例组合用法
1. 创建并压缩目录:
tar -czvf backup.tar.gz /home/user
2. 只查看归档内容,不解压:
tar -tvf archive.tar.gz
3. 解压归档文件到指定目录:
tar -xzf archive.tar.gz -C /path/to/extract
zip
-
语法参数
-r:递归,将目录及其内容压缩。 -j:忽略目录结构,仅压缩文件。 -q:安静模式,不输出压缩过程信息。 -v:详细模式,显示压缩的详细信息。 -9:最高压缩率(压缩率从 -0 到 -9,-9 最慢但压缩效果最好)。 -m:压缩后删除源文件,移动文件到 .zip 文件中。 -o:设置压缩文件的日期为最新文件的日期。 -e:加密,压缩过程中需要输入密码。 -P:设置密码(不安全,建议用 -e 代替)。
-
压缩目录递归子目录及文件
zip -r archive.zip directory/
-
压缩单个文件
zip archive.zip file.txt
-
加密压缩
# 提示输入密码 zip -e archive.zip file.txt # 命令行直接设置密码 zip -P your_password archive.zip file.txt
-
解压到当前目录
unzip archive.zip
-
解压到指定目录
unzip archive.zip -d /path/to/destination/
-
rm
rm参数
# rm 命令的常用参数:(rm是个高危操作)
-f:# 强制删除,不提示确认。 不加f删除每个文件前都需要确认
-i:# 每次删除时提示一次确认。
-I:# 在删除多个文件或目录时才提示确认。
-r:# 等同于-R 递归删除目录及其中的文件。
-v:# 显示正在删除的文件或目录。
-d:# 删除空文件夹?
比较安全的删除方式
# 先显示会被删除的文件 然后删除前会进行一次确认
echo rm -rf 20240908*
rm -rf -I 20240908*
删除前提示 双与符方式
echo rm -rf dir1* && rm -rf -I dir1* && echo rm -rf dir2* && rm -rf -I dir2*
删除前提示 多行命令方式
echo rm -rf dir1* && rm -rf -I dir1*; \
echo rm -rf dir2* && rm -rf -I dir2*
scp
scp (Secure Copy)
-
语法参数
# secure copy scp [选项] 源文件 目标路径 -r:递归复制文件夹。 -P:指定 SSH 端口(默认是 22 端口)。 -C:在传输过程中压缩数据。 -i:指定私钥文件,用于身份验证。 -q:安静模式,抑制非错误信息。
-
scp文件(上传)
scp会直接覆盖目标端文件 没有提示
不加用户默认使用当前登录用户
目标端不加文件名也行
scp -P 5000 zxrw_jjzx_yjj.dmp 14.16.4.42:/srv/BigData/elasticsearch/esnode4/backup20240911
scp -P 5000 ./file1.log root@14.16.4.59:/srv/file1.log
- scp文件(下载)
scp -P 5000 root@14.16.4.57:/srv/file1.log ./file1.log
- scp目录
scp -r -P 5000 ./dir1 root@14.16.4.59:/srv/dir1
-
A to B
此命令会将 host1 上的文件复制到 host2,无需将文件下载到本地。
scp user1@host1:/path/to/file user2@host2:/path/to/destination/
rsync
rsync (Remote Sync)
-
远程同步文件
rsync -av -e "ssh -p 5000" ./iso7.5.repo 192.168.1.66:/etc/yum.repos.d
文本操作
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
grep
grep (Global Regular Expression Print)
全局正则表达式打印
-
语法参数
grep [选项] '模式' [文件...] -i:不区分大小写。 -v:反向匹配,显示不匹配模式的行。 -r 或 -R:递归查找子目录。 -n:显示行号。 -l:仅显示匹配模式的文件名。 -c:只显示匹配的行数。 -A NUM:显示匹配行及其后面 NUM 行。 -B NUM:显示匹配行及其前面 NUM 行。 -C NUM:显示匹配行及其前后各 NUM 行。
-
默认
在文件中查找包含 pattern 的所有行grep "pattern" file.txt
-
|
从标准输入中搜索patterncat file.txt | grep "pattern"
-
-i
默认`在文件中查找包含 pattern 的所有行(不区分大小写)grep -i "attern" file.txt
-
-v
反向查找,排除匹配的行grep -v "pattern" file.txt
-
-l
只显示包含匹配内容的文件名,不显示具体内容(用于在多个文件中搜索时快速定位文件)。grep -l "pattern" *.txt
-
-c
只输出匹配的行数,不显示具体内容grep -c "pattern" file.txt
-
-n
显示匹配行的行号grep -n "pattern" file.txt
-
-rin
复合查找grep -rin 'hello' /path/to/directory
递归查找
/path/to/directory
中包含hello
的行,且不区分大小写,并显示行号。 -
与
逻辑| grep 5000 |grep 9000
-
或
逻辑grep -E "8123|9000"
注意只要是引号内对象前后不能加空格!空格也会被认定为参数内容
xargs
xargs(extended arguments)
扩展参数
-
语法参数
xargs [options] [command [command-args]] -n, --max-args=MAX-ARGS:每个命令行最多使用 MAX-ARGS 个参数(每次传递给命令的参数数量) -P, --max-procs=MAX-PROCS:最多同时运行 MAX-PROCS 个进程 -p, --interactive:在运行命令之前进行提示 -t, --verbose:在执行命令之前打印命令 -0:与 -print0 结合使用,处理包含空格或特殊字符的文件名
-
逐行处理输出
-n
ls | xargs -n 1 echo
这个命令将
ls
输出的每个文件名逐个传递给echo
命令。 -
**对特殊字符处理
-0
**find . -name "*.log" -print0 | xargs -0 rm
这个命令安全地删除包含空格或特殊字符的
.log
文件。 -
执行每一
批
命令前确认echo "file1 file2 file3" | xargs -p rm
这个命令在删除
file1
、file2
和file3
之前会询问用户确认。
sort
# 正排序
sort
# 倒排序
sort -r
# 按指定行
sort - k
cat
cat (Concatenate)
连接
-
语法参数
cat [OPTION]... [FILE]... -n:为所有输出的行加上行号。 -b:为非空行加上行号(空行不编号)。 -s:压缩多个空行为一个空行。
-
合并文件
cat file1.txt file2.txt > merged.txt
-
创建文件
cat > newfile.txt
-
追加内容
cat anotherfile.txt >> targetfile.txt
-
tac行倒序输出行
echo -e "1\n2\n3" > a.txt tac a.txt 3 2 1
head
head -n 30 prolog.txt
tail
tail -100 ggserr.log
# tail follow
tail -f -n 100 ggserr.log
more
# 逐页阅读文本
more file1
less
大文件工具 分页加载 不占内存
-
语法参数
less filename.txt -N:显示行号 -S:不自动换行 -X:不清屏 -F:内容适合一页时直接显示 -i:忽略大小写搜索 -p <pattern>:自动定位到匹配的模式 -g:只高亮当前匹配项 -m:显示详细提示信息 +/ <pattern>:启动时搜索 -r / -R:显示控制字符
-
操作说明
向下翻页:按 Space(空格键)或者 PgDn(Page Down)。 向上翻页:按 b 或 PgUp(Page Up)。 向下滚动一行:按 j 或箭头键 ↓。 向上滚动一行:按 k 或箭头键 ↑。 跳至文件开头:按 g。 跳至文件末尾:按 G。 搜索:按 / 后输入搜索关键词,然后按回车。可以使用 n 和 N 在匹配项之间跳转(n 向下查找,N 向上查找)。 退出 less:按 q。
vim
vim (Visual IMproved)
改进版Vi
-
向下搜索
pattern
。/pattern
-
向上搜索
pattern
?pattern
-
搜索并替换
# 在整个文件中将 old 替换为 new。 :%s/old/new/g # 在替换前提示确认 :%s/old/new/gc # 其他标志: i: 忽略大小写 c: 确认每次替换 g: 替换每一行中的所有匹配项
网络管理
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
IP
IP (Internet Protocol)
互联网协议
ip a
ifconfig
dns
DNS (Domain Name System)
域名系统
cat /etc/resolv.conf
-
虚系统设置IP为本机同IP段的IP
-
完成,别写错字尤其是GATEWAY(真TM坑)
-
#Centos7之前 vi /etc/sysconfig/network-scripts/ifcfg-eth0 #Centos7之后 vi /etc/sysconfig/network-scripts/ifcfg-ens33
IP参数注释
UUID=39b9e1b8-73b2-4eb3-bb79-72cdbacdd997 #唯一识别码
DEVICE=eth0 # 网卡设备名
HWADDR=00:0C:29:01:4D:22 # MAC地址
TYPE=Ethernet # 类型为以太网
ONBOOT=yes # 是否启动网络服务,eth0生效
BOOTPROTO=static # 是否自动获取IP(none、static、dhcp)
IPADDR=192.168.0.118 # IP地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.0.1 # 网关
DNS1=111.11.1.1 # 主DNS
DNS1=111.11.1.1 # 备DNS
IPV6INIT=no # IPV6未开启
NM_CONTROLLED=yes # 是否可以由network manager图形管理工具托管
USERCTL=no # 禁止非root用户控制次网卡
重新加载网络配置
#entos6
service network restart
#centos7查看状态
systemctl status network.service
#centos7重启
systemctl restart network
不能使用service和systemctl
没有安装NetMamager的情况
nmcli c reload ens33
# 重载所有ifcfg或route到connection(不会立即生效)
nmcli c reload ifcfg-ens33
# 重载指定ifcfg或route到connection(不会立即生效)
nmcli c load /etc/sysconfig/network-scripts/ifcfg-eth0
nmcli c load /etc/sysconfig/network-scripts/route-eth0
# 立即生效connection,有3种方法
nmcli c up ens33
nmcli d reapply eth0
nmcli d connect eth0
netstat
netstat (Network Statistics)
网络统计
netstat -anutp
netstat -anltup | grep 808
netstat -tunlp | grep 7809
lsof
lsof (List Open Files)
列出已打开文件
lsof -i
lsof -i:7809
firewall
- firewall file command
systemctl restart firewalld
systemctl status firewalld.service
- 显示防火墙白名单列表(基于配置文件)
firewall-cmd --list-all
# 增加IP/端口(基于配置文件)
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="14.31.107.58" port protocol="tcp" port="5000" accept"
# 移除IP/端口(基于配置文件)
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="14.16.4.75" port protocol="tcp" port="9100" accept"
text area
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="14.31.107.66" port protocol="tcp" port="8123" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="14.121.160.63" port protocol="tcp" port="16200" accept"
vim /etc/firewalld/zones/public.xml
<-->开放14.31.107.66的9111端口</-->
<rule family="ipv4">
<source address="14.31.107.66"/>
<port protocol="tcp" port="9111"/>
<accept/>
</rule>
- 端口段
<rule family="ipv4">
<source address="14.16.3.0/24"/>
<port protocol="tcp" port="1-65535"/>
<accept/>
</rule>
- firewall configration command
永久生效,需要reload或restart
不加 “–permanent” 参数默认为临时生效
以下命令不会显示在配置文件中,只能使用 “–list-ports” 参数查询
# 开放端口列表
firewall-cmd --list-ports --permanent
# 增加端口
firewall-cmd --zone=public --add-port=1521/tcp --permanent
# 移除端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --zone=public --remove-port=8081/tcp --permanent
- firewall for services
# 已开放的服务
firewall-cmd --list-services
# 可操作的服务列表
firewall-cmd --get-services
# 开放指定服务
firewall-cmd --enable service=ssh
# 移除指定服务
firewall-cmd --disable service=ssh
# 常用示例
firewall-cmd --add-service=mysql
firewall-cmd --add-service=http
- firewall service disable / enable
# status
systemctl list-unit-files | grep firewalld.service
# enable
systemctl enable firewalld.service
# disable
systemctl disable firewalld.service
- firewalld start / stop
# status
systemctl status firewalld.service
# start
systemctl start firewalld.service
# stop
systemctl stop firewalld.service
# reload
systemctl reload firewalld
# restart
systemctl restart firewalld
- 漏洞扫描-禁用 ICMP
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p ICMP --icmp-type timestamp-request -m comment --comment "deny ICMP timestamp" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p ICMP --icmp-type timestamp-request -m comment --comment "deny ICMP timestamp" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p ICMP --icmp-type timestamp-reply -m comment --comment "deny ICMP timestamp" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p ICMP --icmp-type timestamp-reply -m comment --comment "deny ICMP timestamp" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p ICMP --icmp-type 0 -m comment --comment "deny traceroute" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p ICMP --icmp-type 3 -m comment --comment "deny traceroute" -j DROP
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p ICMP --icmp-type 11 -m comment --comment "deny traceroute" -j DROP
firewall-cmd --direct --get-all-rules
firewall-cmd --reload
- 端口转发transpond
# 将80端口的流量转发至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
# 将80端口的流量转发至192.168.0.1的8080端口
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080
远程交互安全
远程SSH限制
-
限制所有
vim /etc/hosts.deny
插入一行:
sshd:ALL
-
开放指定IP
vim /etc/hosts.allow
插入一行:
sshd:192.168.0.241
远程端口修改
auth:wangjing
date:2021-03-24 01:06
sshd
listener statuts
netstat -tunlp | grep sshd
service status
systemctl status sshd
edit config
vim /etc/ssh/sshd_config
restart service
systemctl restart sshd.service
selinux管理
yum install policycoreutils-python
yum provides semanage
selinux status
semanage port -l | grep ssh
add port
semanage port -a -t ssh_port_t -p tcp 5555
delete port
semanage port -d -t ssh_port_t -p tcp 5555
SELINUX Sets
不建议的操作
vi /etc/selinux/config
SELINUX=enforcing(强制)
permissive(宽容)
disabled(关闭)
hints
使用ssh工具连接5000端口,测试是否成功。如果连接成功,则再次编辑sshd_config的设置,将里边的Port22删除
之所以先设置成两个端口,测试成功后再关闭一个端口,是为了方式在修改的过程中,万一出现掉线、断网、误操作等未知情况时候,还能通过另外一个端口连接上去调试以免发生连接不上必须派人去机房,导致问题更加复杂麻烦。
远程超时时间
查看超时时间
echo $TMOUT
设置超时时间
vim /etc/profile
export TMOUT=600 # 600秒无操作自动退出登录
readonly TMOUT # 防止非root用户更改
使配置生效
source /etc/profile
取消超时
unset TMOUT
进程程序
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
kill
kill -9
kill -15
ps -ef | grep chrome | awk '{print $2}' | xargs kill -9
ps auxw | grep orarootagent.bin | grep -v grep
nohup
nohup (No Hang Up)
不挂起
- 后台运行
nohup java -jar /path/to/mhlg69.jar > /path/to/mhlg69.log &
- 不挂断运行+后台运行
(2定向到&1 定向到 test.log)0输入 1输出 2错误
nohup java -jar /path/to/mhlg69.jar > /path/to/mhlg69.log 2>&1 &
crontab
查看日志
grep CRON /var/log/cron
编辑 crontab
crontab -e
添加定时任务,按照以下格式添加定时任务
* * * * * <你的命令>
每个星号代表的时间单位为: - 第1个星号:分钟(0 - 59) - 第2个星号:小时(0 - 23) - 第3个星号:日期(1 - 31) - 第4个星号:月份(1 - 12) - 第5个星号:星期几(0 - 7,0和7都是星期日) 例如,如果你想每天上午8点执行命令:0 8 * * * <你的命令>
- 超长命令方案:
创建一个脚本文件:
vim /path/to/script.sh
在脚本中写入你的长命令:
#!/bin/bash
/path/to/command --option1 value1 --option2 value2 --option3 value3 --option4 value4
保存并关闭编辑器。然后确保脚本有可执行权限:
chmod +x /path/to/script.sh
在 crontab中调用脚本:
0 8 * * * /path/to/script.sh
软件管理
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
rmp
rpm (Red Hat Package Manager)
红帽包管理器
-
rpm查看是否安装
rpm -qa|grep cpp
yum
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
yum (Yellowdog Updater, Modified)
Yellowdog 更新管理器的修改版
1.挂载本地iso镜像
-
将系统镜像拷贝到
opt
目录(常规路径) -
创建挂载目录
mkdir -p /media/iso
-
临时一次性挂载
mount -o loop /opt/CentOS-7-x86_64-DVD-1908.iso /media/iso
-
配置自动挂载方式
编辑
/etc/fstab
文件,添加以下行以在启动时自动挂载:/opt/CentOS-7-x86_64-DVD-1908.iso /media/iso iso9660 loop 0 0
-
使fstab配置生效
[root@192 iso]# mount -a mount: /dev/loop0 is write-protected, mounting read-only
-
检查挂载是否成功
# 列出所有已挂载的文件系统 mount
ls -l /media/iso
2.配置本地yum
源
-
创建或编辑 yum 源配置文件
/etc/yum.repos.d/local.repo
,并指定挂载目录:[LocalRepo] name=Local Repository baseurl=file:///media/iso enabled=1 gpgcheck=0
-
禁用其他yum源
如果仍然存在其他 YUM 源(如
/etc/yum.repos.d/CentOS-Base.repo
或其他 repo 文件),请禁用它们。可以通过在文件中将enabled=1
改为enabled=0
来实现(当然也可以直接将其他库移出备份到其他目录)。vim /etc/yum.repos.d/CentOS-Base.repo # 在其他yum源增加或者修改参数(每一个都加) enabled=0
-
更新缓存
sudo yum clean all sudo yum makecache
-
现在本地可以使用yum了
sudo yum install -y gcc readline-devel zlib-devel bison flex perl
3.远程yum
源服务
服务节点:配置 HTTP 服务共享挂载目录
-
安装 HTTP 服务器(如 Apache):
yum install httpd -y
-
配置 HTTP 服务:
创建符号链接
ln -s /media/iso /var/www/html/centos
检查符号链接是否正确
ls -l /var/www/html/
正确的会显示浅蓝色,错误的符号链接显示会红色 或者 红底字闪烁
如果符号链接创建不正确 可以删除重建
rm -rf /var/www/html/centos
-
启动 HTTP 服务:
systemctl start httpd systemctl enable httpd
-
关闭防火墙或者放行 HTTP 端口(确保外部节点可以访问)
firewall-cmd --permanent --add-service=http firewall-cmd --reload
-
测试http服务是否正常
curl http://192.168.1.201/centos/
访问节点:配置yum源
-
创建yum源文件
cd /etc/yum.repos.d/ vim /etc/yum.repos.d/repo201.repo
[repo201] name=Repo201 baseurl=http://192.168.1.201/centos enabled=1 gpgcheck=0
-
清理并更新缓存
yum clean all yum makecache
-
测试yum源可用性
yum repolist
-
尝试安装个小包测试
yum install wget
4.yum
管理软件包
-
查看yum源中所有可用包
yum list available
-
查询
# 已安装
yum list installed
# 带@是已经安装的
# base是linux自带的软件包
# Centos7.4-BM 是安装BM时,BM提供的软件包
# 软件详细信息
# 查资源库里的
yum list zip
yum info clickhouse
yum search ifconfig
yum -y install net-tools.x86_64
资源库目录
/etc/yum.repos.d
- 安装
yum -y install clickhouse-server
yum -y install clickhouse-client
yum 资源库和本地列表
带@是已安装的
yum list | grep clickhouse
yum 已安装列表
yum list installed | grep clickhouse
yum 增加库
/etc/yum.repo.d/xxx.repo
scp iso7.6.repo 14.16.4.20:/etc/yum.repos.d/iso7.6.repo
yum 重新加载库
yum clean all
vsftpd
vsftpd (Very Secure FTP Daemon)
非常安全的FTP守护进程
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
说明: 匿名用户模式和本地用户模式只可同时配置一种。
一、安装
yum方式
yum install -y vsftpd
rpm方式
#查看
rpm -qa | grep vsftp
#安装
rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm
#卸载
rpm -e vsftpd
开机自启
systemctl enable vsftpd.service
二、操作
重启
systemctl restart vsftpd.service
查看监听端口
netstat -antup | grep ftp
查看进程
ps -aux|grep vsftpd
三、用户
创建用户
useradd zcdj
passwd zcdj
查看用户
cat /etc/passwd
删除用户
userdel zcdj
四、目录
创建目录
mkdir /data2/ftp/upload
目录授权
chown -R zcdj:zcdj /data2/ftp/upload
查看授权
此命令也可设置权限,待补充
getfacl /data2/ftp/upload
五、配置
主配置文件
#打开以下参数
pasv_min_port=61001
pasv_max_prot=62000
#启动服务就会出现如下报错:
Jan 04 11:09:53 13.novalocal systemd[1]: Starting Vsftpd ftp daemon...
Jan 04 11:09:53 13.novalocal vsftpd[131021]: 500 OOPS: unrecognised variable in config file: pasv_max_prot
Jan 04 11:09:53 13.novalocal systemd[1]: vsftpd.service: control process exited, code=exited status=2
Jan 04 11:09:53 13.novalocal systemd[1]: Failed to start Vsftpd ftp daemon.
Jan 04 11:09:53 13.novalocal systemd[1]: Unit vsftpd.service entered failed state.
Jan 04 11:09:53 13.novalocal systemd[1]: vsftpd.service failed.
#如不增加此参数则无法打开防火墙?
其他配置文件
添加例外用户名单
使用vim命令编辑chroot_list文件,添加例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。
说明: 没有例外用户时,也必须创建chroot_list文件,内容可为空。
vim /etc/vsftpd/chroot_list
Shell脚本
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
man
man (Manual Pages)
查看命令的手册页
-
语法参数
man [OPTION]... [COMMAND] -k:通过关键字搜索手册页。 -f:显示与命令匹配的手册页概述。 -a:显示所有匹配的手册页。
-
查看命令的手册页
man ls
-
通过关键字搜索手册页
man -k keyword
-
查看命令的手册页概述
man -f command
-
显示所有匹配的手册页
man -a command
which
# 显示命令全路径
which cd
多行命令续行
echo "This is a \
multi-line \
command"
逻辑符命令拼接
# 双与符 && 执行成功后执行后面的命令
echo 111 && echo 222
# 双或符 && 执行失败后执行后面的命令,执行成功后不执行
echo 111 || echo 222
cd XXX || echo 222
# 分号 && 无论是否成功都执行后面的命令
echo 111 ; echo 222
设置会话字符集
export LANG=en_US.UTF-8
管道符
-
语法和参数
|(管道符):将一个命令的标准输出(stdout)作为下一个命令的标准输入(stdin)。
-
示例:
-
cat
输出文件内容,grep
过滤包含"pattern"
的行,sort
对结果进行排序。cat file.txt | grep "pattern" | sort
-
ps aux
显示进程信息,grep
过滤包含"apache"
的进程,awk
提取进程号。ps aux | grep apache | awk '{print $2}'
重定向符
重定向符 <, >(1>), >>, 2>, &>, |&
-
标准输出
>
和 追加输出>>
>
:将命令的标准输出重定向到文件,覆盖原有内容。ls > files.txt
>>
:将命令的标准输出追加到文件末尾。echo "New entry" >> files.txt
-
标准输入
<
<
:将文件内容作为命令的输入。sort < file.txt
-
错误输出
2>
2>
:将标准错误输出(stderr)重定向到文件。command 2> error.log
-
同时重定向输出与错误输出
&>
&>
:将标准输出和标准错误输出都重定向到文件。command &> output.log
-
错误通过管道传递
|&
|&
:将标准输出和标准错误一起通过管道传递给下一个命令。command1 |& command2
按日期统计文件数
ls -l --time-style=+%Y-%m-%d | awk '{print $6}' | sort | uniq -c
-
按日期统计注释
--time-style=+%Y-%m-%d:将文件的修改日期格式化为“年-月-日”,忽略具体时间。 awk '{print $6}':ls -l 输出的第 6 列是文件的修改日期,awk 提取这一列。 sort:对提取出的日期进行排序。 uniq -c:统计每个日期出现的次数,也就是统计每天的文件数量。
拙劣的脚本
-
生成删除命令的脚本
#!/bin/bash # 生成带确认的删除命令 # 2024-09-14 17:58:54:wangjing power by chatgpt4 # 1. 日期格式:脚本接受的日期格式是 YYYYMMDD,并根据输入的开始和结束日期生成命令。 # 2. 日期递增:脚本使用 date 命令递增日期,并将其格式化为 YYYYMMDD 格式。 # 3. 生成命令:每次循环都会生成一行 echo rm -rf -I <date>* && rm -rf -I <date>; 的命令。 # 示例用法: # 假设你需要从 20240911 到 20240913 生成命令,你可以这样运行: # ./script.sh 20240911 20240913 # 生成的输出将会是: # echo rm -rf -I 20240911* && rm -rf -I 20240911; # echo rm -rf -I 20240912* && rm -rf -I 20240912; # echo rm -rf -I 20240913* && rm -rf -I 20240913; # 生成带确认的删除命令 # 2024-09-14 17:58:54:wangjing power by chatgpt4 # 检查输入参数 if [ "$#" -ne 2 ]; then echo "Usage: $0 <start_date> <end_date>" echo "Dates should be in format YYYYMMDD" exit 1 fi start_date=$1 end_date=$2 current_date=$start_date while [ "$current_date" -le "$end_date" ]; do # 生成并输出命令 if [ "$current_date" -ne "$end_date" ]; then echo "echo rm -rf -I ${current_date}* && rm -rf -I ${current_date}; \\" else echo "echo rm -rf -I ${current_date}* && rm -rf -I ${current_date}" fi # 日期递增(使用 date 命令) current_date=$(date -I -d "$current_date + 1 day" | sed 's/-//g') done
工具配置
Updated by wangjing on 2024-10-28 at 02:36:57 in Tongzhou District, Beijing.
常见问题
-
xhell删除键映射问题
属性 终端 键盘 把backspace和delete改成 ASCII 127
-
linux Terminal too wide
vi报错 屏幕太宽
# q退出 stty -a stty columns 132