当前位置: 首页 > article >正文

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挂载硬盘

  1. 列出所有硬盘和它们的分区信息

    fdisk -l
    
  2. 打开分区管理进行分区

    fdisk /dev/nvme0n1***
    
  3. 格式化分区为ext4文件系统

    mkfs.ext4 /dev/nvme1n1p1
    
  4. 创建目录

    mkdir /srv/BigData/elasticsearch
    
  5. 挂载分区到目录

    mount /dev/nvme0n1p1 /srv/BigData/elasticsearch/esnode1
    

挂载raw格式的镜像

  1. 获取可以挂载的环回设备

    losetup -f
    /dev/loop0
    
  2. 进行块设备挂载

    losetup /dev/loop0 abc.img
    
  3. 执行块设备的分区映射

    kpartx -a /dev/loop0
    
  4. 查看映射分区入口

    ls /dev/mapper/
    
  5. 查看磁盘情况(找到需要挂载的数据分区)

    fdisk -l
    
  6. mount分区

    mount /dev/mapper/loop0p1 /mnt/
    
  7. 去挂载步骤

    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
    
  • |从标准输入中搜索pattern

    cat 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
    

    这个命令在删除 file1file2file3 之前会询问用户确认。

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
  1. 虚系统设置IP为本机同IP段的IP
  2. 完成,别写错字尤其是GATEWAY(真TM坑)
  3. #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 服务共享挂载目录

  1. 安装 HTTP 服务器(如 Apache):

    yum install httpd -y
    
  2. 配置 HTTP 服务

    创建符号链接

    ln -s /media/iso /var/www/html/centos
    

    检查符号链接是否正确

    ls -l /var/www/html/
    

    正确的会显示浅蓝色,错误的符号链接显示会红色 或者 红底字闪烁

    如果符号链接创建不正确 可以删除重建

    rm -rf /var/www/html/centos
    
  3. 启动 HTTP 服务

    systemctl start httpd
    systemctl enable httpd
    
  4. 关闭防火墙或者放行 HTTP 端口(确保外部节点可以访问)

    firewall-cmd --permanent --add-service=http
    firewall-cmd --reload
    
  5. 测试http服务是否正常

    curl http://192.168.1.201/centos/
    

访问节点:配置yum源

  1. 创建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
    
  2. 清理并更新缓存

    yum clean all
    yum makecache
    
  3. 测试yum源可用性

    yum repolist
    
  4. 尝试安装个小包测试

    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
    

http://www.kler.cn/a/374406.html

相关文章:

  • 云途领航:现代应用架构助力企业转型新篇
  • AES 与 SM4 加密算法:深度解析与对比
  • Go C编程 第6课 无人机 --- 计算旋转角
  • PVE虚拟化平台之开启虚拟机IP显示方法
  • 2. SQL窗口函数使用
  • dify的ChatFlow自定义上传图片并通过HTTP请求到SpringBoot后端
  • 三网折扣话费充值接口对接详细步骤?
  • 速盾:海外CDN高防解析.提升网站安全与速度
  • 在 .NET 8 Web API 中实现 Entity Framework 的 Code First 方法
  • 【算法系列-二叉树】对称翻转二叉树
  • docker安装、设置非sudo执行、卸载
  • CesiumJS 案例 P15:检测标记、鼠标点击移动标记、鼠标拖动标记
  • CSS Text(文本)
  • HTML CSS
  • JavaEE初阶---网络原理/UDP服务器客户端程序
  • C# 第一阶段(桌面软件)
  • qt QProgressBar详解
  • 10.31学习
  • 【golang/navmesh】使用recast navigation进行寻路
  • Node.js UDP通信 dgram 组播
  • canvas自定义文本排列方法 + 自定义花字应用案例
  • 使用Python和OCR技术实现自动化办公:图片转文字
  • Vue3入门--[vue/compiler-sfc] Unexpected token, expected “,“ (18:0)
  • 安装Docker到指定目录
  • 学习stm32
  • 免费送源码:Java+ssm++MVC+HTML+CSS+MySQL springboot 社区医院信息管理系统的设计与实现 计算机毕业设计原创定制