【linux指南--命令大全】

linux常用的命令,命令很全所以篇幅很长,自己查阅命令的手册。也欢迎大佬们评论区补充。

文章目录

常见目录介绍

• / 根目录
• /root root 用户的家目录
• /home/username 普通用户的家目录
• /etc 配置文件目录
• /bin 命令目录
• /sbin 管理命令目录
• /usr/bin /usr/sbin 系统预装的其他命令

配置文件

  1. /etc/profile:这是一个全局的配置文件,用于设置系统环境变量和 PATH 等全局设置。
  2. /etc/bashrc:这个文件类似于 ~/.bashrc,用于自定义 bash 终端的行为和设置环境变量,但是是全局的。
  3. ~/.bash_profile:这是用户级别的配置文件,用于自定义 bash 终端的行为和设置环境变量。
  4. /etc/passwd:这个文件包含所有的用户账户信息,如用户名、用户 ID、用户家目录等。
  5. /etc/group:这个文件包含所有的用户组信息,如组名、组 ID、组成员等。
  6. /etc/fstab:这个文件用于定义文件系统的自动挂载规则,可以指定特定文件系统的挂载点和权限等。
  7. /etc/hosts:这个文件用于将域名映射到 IP 地址,可以用于本地测试网站或屏蔽一些网站。
  8. /etc/sudoers:这个文件定义了哪些用户可以使用 sudo 命令以及他们能够使用的权限。

每个配置文件都有其特定的作用,但是在执行顺序上可能有所不同。一般来说,全局的配置文件会先于用户级别的配置文件执行。具体来说,Linux 系统的配置文件执行顺序如下:

  1. /etc/profile
  2. /etc/bashrc
  3. ~/.bash_profile
  4. ~/.bashrc

这是一个基本的执行顺序,实际上还可能会受到其他因素的影响。例如,某些系统可能会在 ~/.bash_profile 中包含 ~/.bashrc 文件,或者使用其他自定义的配置文件。用户可以根据自己的需要和实际情况进行配置。

系统操作

帮助命令

man 帮助

  • man 是 manual 的缩写
  • man 帮助用法演示
    • # man ls
    • man 也是一条命令,分为 9 章,可以使用 man 命令获得 man 的帮助
    • # man 7 man

help 帮助

• shell(命令解释器)自带的命令称为内部命令,其他的是外部命令

  • 通过 type [命令] 查看是内部还是外部命令

• 内部命令使用 help 帮助
• # help cd
• 外部命令使用help帮助
• # ls --help

info 帮助

• info 帮助比 help 更详细,作为 help 的补充
• # info ls

显示当前的目录名称

• pwd 显示当前的目录名称

文件查看

  • ls 查看当前目录下的文件
    ls [选项,选项… ] 参数 …

  • 常用参数:
    • -l 长格式显示文件
    • -a 显示隐藏文件
    • -r 逆序显示
    • -t 按照时间顺序显示
    • -R 递归显示

建立目录

• mkdir 建立目录
• 常用参数
-p 建立多级目录

删除空目录

• rmdir 删除空目录

复制文件

• cp 复制文件和目录
• cp [选项] 文件路径
• cp [选项] 文件… 路径
• 常用参数
• -r 复制目录
• -p 保留用户、权限、时间等文件属性
• -a 等同于 -dpR

移动文件

• mv 移动文件
• mv [选项] 源文件 目标文件
• mv [选项] 源文件 目录

删除文件

• rm 删除文件
• 常用参数
• -r 删除目录(包括目录下的所有文件)
• -f 删除文件不进行提示
• 注意: rm 命令可以删除多个目录,需谨慎使用

查找文件

  • find 文件路径 参数

通配符

• 通配符
• 定义:shell 内建的符号
• 用途:操作多个相似(有简单规律)的文件
• 常用通配符
• * 匹配任何字符串
• ? 匹配1个字符串
• [xyz] 匹配xyz任意一个字符
• [a-z] 匹配一个范围
• [!xyz] 或[^xyz] 不匹配

  • 示例:用通配符同时查看多个有规律文件 路径下同时存在 filea fileb …
    • ls -l /fie*

打包命令

  • tar 命令

    • 常用参数
      • -c 打包
      • -x 解包
      • -v 代表verbose,显示解压过程(文件列表)
      • -f 指定操作类型为文件
      • -C 指定需要解压到的目录。
      • -z gzip 格式压缩和解压缩
      • -j bzip2 格式压缩和解压缩
  • Linux 下 打包和压缩是单独分开的 也就出现 .tar 和 .tar.gz 的后缀,前者是只进行打包未压缩的,后者是压缩过的

  • 可以将打包和压缩一起执行 举例

    • 用 gzip 格式压缩 /etc 到 /tmp目录下 名为 etc-backup.tar.gz

      gzip 格式压缩速度快
      tar czf /tmp/etc-backup.tar.gz /etc
      
      bzip2 格式压缩体积小
      tar cjf /tmp/etc-backup.tar.bz2 /etc
      

压缩和解压缩

  • 可以使用 gzip 和 bzip2 命令单独操作
  • 通常和 tar 命令配合操作
  • 常用参数
    • -z gzip 格式压缩和解压缩
    • -j bzip2 格式压缩和解压缩

文本

cat 文本内容显示到终端
• head 查看文件开头
• tail 查看文件结尾
• 常用参数 -f 文件内容更新后,显示信息同步更新
• wc 统计文件内容信息

VIM

四种模式

• 正常模式 (Normal-mode)
• 插入模式 (Insert-mode)
• 命令模式 (Command-mode)
• 可视模式 (Visual-mode)

正常模式

  • 进入其他模式转换命令
    • i I a A o O 进入插入模式
    • v V ctrl+v 进入可视化模式
    • : 进入命令模式
    • esc 从其他模式回到正常模式

  • 基本操作
    • y 复制
    • d 剪切
    • p 粘贴
    • u 撤销
    • ctrl + r 重做

    • x 删除单个字符
    • r 替换单个字符

    • G 定位指定的行
    • ^ 定位到行首
    • $ 定位到行尾

命令模式

• 基本操作
• :w 写入
• :q 退出
• :! 执行 Shell 命令
• 😒 替换 (默认针对光标所在行查找)

  • :%s/old/new 全文查找并替换(单词替换)
    • :%s/x/X :将小写x替换为大写X
  • :%s/old/new/g 全文查找并替换全部(多次替换)

• / 查找
• :set 设置命令

  • :set nu 显示行号

可视模式

• 三种进入可视模式的方式
• v 字符可视模式
• V 行可视模式
• ctrl+v 块可视模式
• 配合 d 和 I(大写 i ) 命令可以进行块的便利操作

多用户操作系统

  • 多用户操作系统的目的是隔离
    • 用户权限隔离
    • 系统资源隔离
  • root 用户与普通用户的区别

用户管理常用命令

• useradd 新建用户
• userdel 删除用户
• passwd 修改用户密码
• usermod 修改用户属性
• chage 修改用户属性

组管理命令

• groupadd 新建用户组
• groupdel 删除用户组

用户切换

• su 切换用户

​ su - USERNAME 使用 login shell 方式切换用户

• sudo 以其他用户身份执行命令(赋予其他用户/组 指定root权限)

​ visudo 设置需要使用 sudo 的用户(组)

用户和用户组配置文件

用户配置文件
• /root root 用户的家目录
• /home/USERNAME 普通用户默认家目录位置
• /etc/passwd 用户配置文件
• /etc/shadow 用户密码相关配置文件
• /etc/group 用户组配置文件

vim /etc/passwd

用户信息会追加在文末
如:
mikasa:x:1000:1000:注释:/home/mikasa:/bin/bash
mikasa:用户名
x: 是否需要密码验证
1000: 用户ID linux根据这个区分用户,如果重复则选ID值最小的
1000: 用户组ID
注释
/home/mikasa: 家目录
/bin/bash shell

vim /etc/shadow
用户和用户密码文件

vim /etc/gruop
用户组文件

文件权限的表示方法

• 字符权限表示方法
• r 读
• w 写
• x 执行
• 数字权限的表示方法
• r = 4
• w = 2
• x = 1

  • rw- r-x r- - 1 userame groupname mtime filename
    • rw- 文件属主的权限
    • r-x 文件属组的权限
    • r- - 其他用户的权限
    • 创建文件有默认权限,根据 umask 值计算

目录权限的表示方法

• x 进入目录
• rx 显示目录内的文件名
• wx 修改目录内的文件名

修改权限命令

• chmod 修改文件、目录权限
• chown 更改属主、属组
• chgrp 可以单独更改属组,不常用

特殊权限

• SUID 用于二进制可执行文件,执行命令时取得文件属主权限
• SGID 用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组
• SBIT 用于目录,该目录下新建的文件和目录,仅 root 和自己可以删除

网络管理

⽹网络状态查看⼯工具

    1. net-tools
      • ifconfig
      • route
      • netstat
    2. iproute2
      • ip
      • ss

⽹网络状态查看命令

ifconfig
• eth0 第⼀一块⽹网卡(⽹网络接⼝口)
• 你的第⼀一个⽹网络接⼝口可能叫做下⾯面的名字
• eno1 板载⽹网卡
• ens33 PCI-E⽹网卡
• enp0s3 ⽆无法获取物理理信息的 PCI-E ⽹网卡
• CentOS 7 使⽤用了了⼀一致性⽹网络设备命名,以上都不不匹配则使⽤用 eth0

⽹网络接⼝口命名修改

• ⽹网卡命名规则受 biosdevname 和 net.ifnames 两个参数影响
• 编辑 /etc/default/grub ⽂文件,增加 biosdevname=0 net.ifnames=0
• 更更新 grub
• # grub2-mkconfig -o /boot/grub2/grub.cfg
• 重启
• # reboot
biosdevname net.ifnames ⽹网卡名
默认 0 1 ens33
组合1 1 0 em1
组合2 0 0 eth0

查看⽹网络情况

• 查看⽹网卡物理理连接情况
• mii-tool eth0

查看⽹网关命令

• 查看⽹网关
• route -n
• 使⽤用 -n 参数不不解析主机名

⽹网络配置命令

• ifconfig <接⼝口> <IP地址> [netmask ⼦子⽹网掩码 ]
• ifup <接⼝口>
• ifdown <接⼝口>

⽹网关配置命令

• 添加⽹网关
• route add default gw <⽹网关ip>
• route add -host <指定ip> gw <⽹网关ip>
• route add -net <指定⽹网段> netmask <⼦子⽹网掩码> gw <⽹网关ip>

⽹网络命令集合:ip 命令

• ip addr ls
• ifconfig
• ip link set dev eth0 up
• ifup eth0
• ip addr add 10.0.0.1/24 dev eth1
• ifconfig eth1 10.0.0.1 netmask 255.255.255.0
• ip route add 10.0.0/24 via 192.168.0.1
• route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.0.1

⽹网络故障排除命令

• ping
• traceroute 检测发出数据包的主机到⽬标主机之间所经过的网关数量的工具
• mtr 动态路由追踪
• nslookup 查询DNS的记录,查询域名解析是否正常
• telnet 测试远程端口通不通
• tcpdump 将网络中传送的数据包完全截获下来提供分析
• netstat 列出所有正在监听的端口

// 列出正在监听22端口
netstat -ntpl | grep 22

• ss 获取socket统计信息同上

⽹网络服务管理理

• ⽹网络服务管理理程序分为两种,分别为SysV和systemd
• service network start|stop|restart
• chkconfig -list network
• systemctl list-unit-files NetworkManager.service
• systemctl start|stop|restart NetworkManger
• systemctl enable|disable NetworkManger

软件管理

软件包管理理器器

  • 包管理理器器是⽅方便便软件安装、卸载,解决软件依赖关系的重要⼯工具
    • CentOS、RedHat 使⽤用 yum 包管理理器器,软件安装包格式为 rpm
    • Debian、Ubuntu 使⽤用 apt 包管理理器器,软件安装包格式为 deb

rpm 包

  • rpm 包格式
    • vim-common -7.4.10- 5.el7. x86_64.rpm
    软件名称 软件版本 系统版本 平台

rpm 命令

  • rpm 命令常⽤用参数
    • -q 查询软件包
    • -i 安装软件包
    • -e 卸载软件包

yum 包管理理器器

  • rpm 包的问题
    • 需要⾃自⼰己解决依赖关系
    • 软件包来源不不可靠
  • CentOS yum 源
    • http://mirror.centos.org/centos/7/
  • 国内镜像
    • https://opsx.alibaba.com/mirror

yum命令常⽤用选项

  • 常⽤用选项
    • install 安装软件包
    • remove 卸载软件包
    • list| grouplist 查看软件包
    • update 升级软件包

    1.使用 yum 查找软件包
    命令:yum search
    2.列出所有可安装的软件包
    命令:yum list
    3.列出所有可更新的软件包
    命令:yum list updates
    4.列出所有已安装的软件包
    命令:yum list installed
    
  • yum-utils包 设置存储库

    • 安装yum-utils包(提供yum-config-manager实用程序)并设置存储库。
      
      $ sudo yum install -y yum-utils
      
      $ sudo yum-config-manager \
          --add-repo \
         https://download.docker.com/linux/centos/docker-ce.repo
      

进程管理理

进程的概念

  • 进程—运⾏行行中的程序,从程序开始运⾏行行到终⽌止的整个⽣生命周期是可管理理的
    • C 程序的启动是从 main 函数开始的
    • int main(int agrc, char *argv[])
    • 终⽌止的⽅方式并不不唯⼀一,分为正常终⽌止和异常终⽌止
    • 正常终⽌止也分为从 main 返回、调⽤用 exit 等⽅方式
    • 异常终⽌止分为调⽤用 abort、接收信号等

进程的查看命令

  • 查看命令
    • ps
    • pstree
    • top
  • 结论:
    • 进程也是树形结构
    • 进程和权限有着密不不可分的关系

进程的优先级调整

  • 调整优先级
    • nice 范围从-20 到 19 ,值越⼩小优先级越⾼高,抢占资源就越多
    • renice 重新设置优先级
  • 进程的作业控制
    • jobs
    • & 符号

进程间通信

  • 信号是进程间通信⽅方式之⼀一,典型⽤用法是:终端⽤用户输⼊入中断命令,通过信号机制
    停⽌止⼀一个程序的运⾏行行。
  • 使⽤用信号的常⽤用快捷键和命令
    • kill -l
    • SIGINT 通知前台进程组终⽌止进程 ctrl + c
    • SIGKILL ⽴立即结束程序,不不能被阻塞和处理理 kill -9 pid

守护进程

  • 使⽤用 nohup 与 & 符号配合运⾏行行⼀一个命令
    • nohup 命令使进程忽略略 hangup(挂起)信号
  • 守护进程(daemon)和⼀一般进程有什什么差别呢?
  • 使⽤用 screen 命令
    • screen 进⼊入 screen 环境
    • ctrl+a d 退出 (detached) screen 环境
    • screen -ls 查看 screen 的会话
    • screen -r sessionid 恢复会话

系统⽇日志

  • 常⻅见的系统⽇日志
    • /var/log
    • message
    • dmesg
    • cron
    • secure

服务管理

  • 服务(提供常⻅见功能的守护进程)集中管理理⼯工具

    • service

      • service iptables stop :停止iptables服务
    • systemctl

      • systemctl start firewalld.service :启用firewalld服务

SELinux

  • MAC(强制访问控制)与 DAC(⾃自主访问控制)
  • 查看 SELinux 的命令
    • getenforce
    • /usr/sbin/sestatus
    • ps -Z and ls -Z and id -Z
  • 关闭 SELinux
    • setenforce 0
    • /etc/selinux/sysconfig

内存与磁盘管理理

内存使⽤用率查看

  • 常⽤用命令介绍
    • free
    • top 监控面板详解:https://blog.csdn.net/msbjy/article/details/124618010

磁盘使⽤用率的查看

  • 查看命令
    • fdisk
    • df
    • du
    • du 与 ls 的区别

常⻅见⽂文件系统

  • Linux ⽀支持多种⽂文件系统,常⻅见的有
    • ext4
    • xfs
    • NTFS(需安装额外软件)

磁盘分区与挂载

  • 常⽤用命令
    • fdisk
    • mkfs
    • parted
    • mount
  • 常⻅见配置⽂文件
    • /etc/fstab

⽤用户磁盘配额

• xfs⽂文件系统的⽤用户磁盘配额 quota
• mkfs.xfs /dev/sdb1
• mkdir /mnt/disk1
• mount -o uquota,gquota /dev/sdb1 /mnt/disk1
• chmod 1777 /mnt/disk1
• xfs_quota -x -c ‘report -ugibh’ /mnt/disk1
• xfs_quota -x -c ‘limit -u isoft=5 ihard=10 user1’ /mnt/disk1

交换分区

  • 增加交换分区的⼤大⼩小
    • mkswap
    • swapon
  • 使⽤用⽂文件制作交换分区
    • dd if=/dev/zero bs=4M count=1024 of=/swapfile

RAID 与软件 RAID 技术

  • RAID 的常⻅见级别及含义
    • RAID 0 striping 条带⽅方式,提⾼高单盘吞吐率
    • RAID 1 mirroring 镜像⽅方式,提⾼高可靠性
    • RAID 5 有奇偶校验
    • RAID 10 是RAID 1 与 RAID 0 的结合
  • 软件 RAID 的使⽤用

逻辑卷管理理

• 逻辑卷和⽂文件系统的关系
• 为 Linux 创建逻辑卷
• 动态扩容逻辑卷

系统综合状态查询

  • 使⽤用 sar 命令查看系统综合状态
  • 使⽤用第三⽅方命令查看⽹网络流量量
    • yum install epel-release
    • yum install iftop
    • iftop -P

Shell

什么是 Shell

• Shell 是命令解释器,用于解释用户对操作系统的操作
• Shell 有很多
cat /etc/shells
• CentOS 7 默认使用的 Shell 是 bash

标准的 Shell 脚本要包含哪些元素

• Sha-Bang

#!/bin/bsh

• 命令
• “#”号开头的注释
• chmod u+rx filename 可执行权限
• 执行命令

  • 产生一个新的子进程执行 bash
    • bash ./filename.sh.
    • ./filename.sh
  • 不产生子进程 对当前运行环境造成影响
    • source ./filename.sh
    • . filename.sh

内建命令和外部命令的区别

• 内建命令不需要创建子进程
• 内建命令对当前 Shell 生效

管道与管道符

• 管道和信号一样,也是进程通信的方式之一

• 匿名管道(管道符)是 Shell 编程经常用到的通信工具

  • 管道符是“|”,将前一个命令执行的结果传递给后面的命令
  • 同时为第一二条命令建立子进程
  • 以子进程方式运行,如果有内建命令则不会传递给父进程
  • • ps | cat
    • echo 123 | ps

重定向符号

  • 一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符

  • 输入重定向符号 “ <” (用文件代替键盘输入

    # 等待用户从终端输入 并统计行数(ctr+d结束)
    wc -l 
    # 统计文件 替代用户输入
    wc -l < /etc/passwd 
    
  • 输出重定向符号 “>” “>>” “2>” “&>” 输出到控制台的内容重定向到指定文件

    • 示例:echo 123 > /path/to/a/file
    • > :把文件全部清空再把内容输入进去
    • >> :追加
    • 2> :错误重定向->当前命令如果产生错误会把错误重定向到文件中
    • &> :无论正确错误全部输出到文件中

变量

变量的定义

• 变量名的命名规则
• 字母、数字、下划线
• 不以数字开头

变量的赋值

  • 为变量赋值的过程,称为变量替换

    • 变量名=变量值

      • a=123
    • 使用 let 为变量名赋值

      • let a=10+20
    • 将命令赋值给变量

      • l=ls
    • 将命令结果赋值给变量

      • letc=$(ls -l /etc)
  • 数组

    • 定义数组
      • IPTS=(10.0.0.1 10.0.0.2 10.0.0.3)
    • 显示所有元素
      • echo ${IPTS[@]}
    • 显示元素个数
      • echo ${#IPTS[@]}
    • 显示第一个
      • echo ${IPTS[0]}
  • 变量值有空格等特殊字符可以包含在””或’’ 中

变量的查看

• 变量的查看方法
• echo
• ${变量名} 在部分情况下可以省略为 $变量名

变量的作用范围

  • 变量的默认作用范围: 当前shell
  • 变量的导出 :子进程能使用父进程的变量
    • export
  • 变量的删除
    • unset

系统环境变量

  • 环境变量:每个 Shell 打开都可以获得到的变量

    • set 和 env 命令

    • $?

    • 上一条命令是否执行成功

    • $!

    • $$

      • 当前进程pid
    • $0

    • 当前进程名称

    • $PATH

      • 命令搜索路径
    • $PS1

    • 位置变量:$1 ~$9 ${10}…

      • # 编写脚本
        vim pos.sh
        
        #!/bin/bash
        
        #位置1
        pos1=$1
        #位置2
        pos2=$2
        
        echo $1
        echo $2
        
      • # 执行 pos.sh
        ./pos.sh -a -l
        
        # 终端输出
        -a
        -l
        
        如果第二个参数为空即
        ./pos.sh -a
        可以用下划线方式替代null
        pos2=${2}_
        
        输出
        -a
        _
        

环境变量配置文件

  • 配置文件
    • /etc/profile :系统启动时系统的环境
    • /etc/bashrc :
    • ~/.bashrc
    • ~/.bash_profile
  • etc:凡是保存在etc目录下的是所有用户通用的
  • ~:用户家目录,用户独有
  • su - [username]
    • Login 账户 加载所有配置文件
  • su [username]
    • 未login账户, 只会加载 bashrc文件

转义与引用

特殊字符

  • 特殊字符:一个字符不仅有字面意义,还有元意(meta-meaning)

    • # 注释

    • ; 分号

    • \ 转义符号

    • 引号

    • " 双引号 是不完全引用

    • ’ 单引号 完全引用

    • var1=123
      
      echo "var1"
      输出: 123
      echo 'var1'
      输出:var1
      

运算符

  • 赋值运算符
    • = 赋值运算符,用于算数赋值和字符串赋值
    • 使用 unset 取消为变量的赋值
    • = 除了作为赋值运算符还可以作为测试操作符

  • 基本运算符
    • + - * / ** %
    • 使用 expr 进行运算

  • 数字常量的使用方法
    • let “变量名 = 变量值”
    • 变量值使用 0 开头为八进制
    • 变量值使用 0x 开头为十六进制

  • 双圆括号是 let 命令的简化
    • (( a = 10 ))
    • (( a++ ))
    • echo $((10+20))

测试与判断

退出与退出状态

  • 退出程序命令
    • exit
    • exit 10 返回10给 Shell,返回值非 0 位不正常退出
    • $? 判断当前 Shell 下前一个进程是否正常退出

测试命令 test

  • test 命令利用程序是否正常退出返回 0 或 1
    • test 可以做以下测试:
    • 文件测试
    • 整数比较测试

    • 字符串测试

  • test 测试语句可以简化为 [ ] 符号

if

使用 if-then语句
  • if-then 语句的基本用法

    if [ 测试条件成⽴立 ]
    then 执⾏行行相应命令
    fi 结束
    
使用 if-then-else 语句
  • if-then-else 语句可以在条件不成立时也运行相应的命令

    if [ 测试条件成⽴立 ]
    then 执⾏行行相应命令
    else 测试条件不不成⽴立,执⾏行行相应命令
    fi 结束
    
嵌套 if 的使用

• if 条件测试中可以再嵌套 if 条件测试
• 嵌套的结果和复合比较语句 && 结果相同

循环

使用 for 循环遍历命令的执行结果
  • for 循环的语法

    for 参数 in 列列表
    do 执⾏行行的命令
    done 封闭⼀一个循环
    
  • 使用反引号或 $() 方式执行命令,命令的结果当作列表进行处理

使用 for 循环遍历变量和文本
  • 列表中包含多个变量,变量用空格分隔
  • 对文本处理,要使用文本查看命令取出文本内容
    • 默认逐行处理,如果文本出现空格会当做多行处理
C 语言风格的 for 命令
  • for((变量量初始化;循环判断条件;变量量变化))
    do
    循环执⾏行行的命令
    done
    
while 循环
while test测试是否成⽴立
do
命令
done
until 循环

until 循环与 while 循环相反,循环测试为假时,执行循环,为真时循环停止

循环的使用

循环和循环可以嵌套

循环中可以嵌套判断,反过来也可以实现嵌套

循环可以使用 break 和 continue 语句在循环中退出

使用循环处理命令行参数

命令行参数可以使用 $1 $2 … ${10}… $n 进行读取

$0 代表脚本名称

$* 和 $@ 代表所有位置参数

$# 代表位置参数的数量

使用 $1_ 方式代替 $1 避免变量为空导致的遗产

函数

自定义函数

• 函数用于“包含”重复使用的命令集合
• 自定义函数

function fname(){
命令
}

• 函数的执行
fname

• 函数作用范围的变量
local 函数名
• 函数的参数
$1 $2 $3 … $n

系统脚本

  • 系统自建了函数库,可以在脚本中引用*

  • 自建函数库*

    • 使用 source 函数脚本文件“导入”函数
  • 脚本优先级控制

    • 可以使用 nice 和 renice 调整脚本优先级

计划任务

  • 一次性计划任务

    • 计划任务: 让计算机在指定的时间运行程序
    • 计划任务分为: 一次性计划任务 周期性计划任务
    • 一次性计划任务
    • at
  • 周期性计划任务

    • cron
      • 配置方式 crontab -e
      • 配置格式:
      分钟 小时 日期 月份 星期 执行的命令
      注意命令的路径问题
  • 计划任务加锁
    • 如果计算机不能按照预期时间运行
    anacontab 延时计划任务
    flock 锁文件

文本操作

正则表达式与文本搜索

元字符(区别通配符!文本搜索用元字符)

• . 匹配除换行符外的任意单个字符
• * 匹配任意一个跟在它前面的字符
• [ ] 匹配方括号中的字符类中的任意一个
• ^ 匹配开头
• $ 匹配结尾
• \ 转义后面的特殊字符

扩展元字符

• + 匹配前面的正则表达式至少出现一次
• ? 匹配前面的正则表达式出现零次或一次
• | 匹配它前面或后面的正则表达式

文件查找命令

  • find

    命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

    • 格式

      • find 路径 查找条件 [补充条件]
        
    • 参数

      • -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
      • -type : 指定文件类型
        • 目录:d
        • 文件:f
      • stat [文件名] 查看文件详细{Inode、权限、访问/更新/改动时间}
      • -atime : 文件访问时间
      • -ctime : i节点变化
      • -mtime: 文件内容变化
    • 示例: 查找根路径下文件名为 fileA.txt 的文件

      • find / -iname fileA.txt
        
    • 示例:查找 /etc 下文件或目录

      • find /etc -type f passwd*
        find /etc -type d passwd
        
    • 示例:8小时以前访问的文件、更新的文件

      • find /etc -atime 8
        find /etc -mtime 8
        

文本内容的查找

• 文本内容查找命令 grep

grep 选项 文本文件1 [ … 文本文件n ]

• 常用选项
• -i 忽略大小写
• -r 递归读取每一个目录下的所有文件

grep
  • 查找文本中含有关键字的一行

  • # 查找 含有password关键字,从/root/anaconda-ks.cfg文件中找
    grep password /root/anaconda-ks.cfg
    

行编辑器介绍

  • Vim 和 sed、AWK 的区别
    • Vim 是整个文本编辑器 是交互式的
    • Sed 、AWK 是行编辑器 非交互的

sed 的基本用法

AWK 的基本用法演示

防火墙

防火墙分类

  • 软件防火墙和硬件防火墙
  • 包过滤防火墙和应用层防火墙
    • CentOS 6 默认的防火墙是 iptables (底层使用 netfilter)
    • CentOS 7 默认的防火墙是 firewallD(底层使用 netfilter 并对iptables进行包装)

iptables 的表和链

表、链、规则

  • 规则(rule)
    来自192.168.2.31的访问,就要将其拒绝,这即是一条规则

  • 链(chain)
    往往我们的安全策略不只一条规则,除了
    来自192.168.2.31的访问,就要将其拒绝 这条规则之外,我们还有其它规则,比如:
    来自192.168.43.22的访问,也要将其拒绝

​ 甚至,我们可能还有多个互斥的规则,这多个规则,哪个规则先执行? 这就涉及到链这个概念。简单来讲,链就是将多个规则从上大小串起来的一个集合单位。规则按从上倒下依次进行匹配。

image-20230311090016391

详细:https://blog.csdn.net/weixin_38166318/article/details/127344897

  • 规则表
    • filter
      • 可以决定一个数据包是否可以到达目标进程端口
    • nat
      • 可以修改源和目标的ip地址,从而进行包路由
    • mangle
      • 可以修改数据包的内容
    • raw
      • 能基于数据包的状态进行规则设定
  • 规则链
    • INPUT
      • 外部主机进入本主机
    • OUTPUT
      • 当前主机发出去数据包
    • FORWARD
      • 数据包经过本主机
    • PREROUTING
      • 路由前
    • POSTROUTING
      • 路由后

一个规则一般分为两大部分:

  • 匹配: 即哪些数据包会命中这个规则,比如一个指定的ip,即是一个匹配规则
  • 动作: 匹配到规则之后,需要做什么动作,是放行,还是拒绝
    • ACCEPT: 直接接受该数据包,不会再走其他链条和规则。比如filter中的input表中的某个规则命中后,动作是ACCEPT,那么该数据包将被直接送达目标进程端口。
    • DROP: 直接抛弃该数据包,并且没有任何返回。且不会再走其他链和规则
    • REJECT: 跟DROP类似,但好歹还是会跟请求方返回一些拒绝信息,比如我们拒绝掉ICMP协议后,ping该主机,会返回“destination host unreachable”
    • RETURN: 当前规则不做任何处理,返回。让给下一个规则处理
    • LOG : 同RETURN类似,但只是会将请求信息记录到系统日志中,记录路径为:/var/log/syslog or /var/log/messages

iptables 的 filter 表

  • iptables -t filter 命令 规则链 规则

    • 命令

      • -L

        • :查看本机实现的过滤规则
        • 常用 -vnL
      • -A

        • 表示Append,在原有规则连中进行追加 其后紧跟的是链的名称,表示该条规则要被添加到哪个链中。
      • -I

        • 将规则插入链首
      • -D

        • 删除某一条规则
      • -F

        • 清除自定义所有规则
      • -P

        • 修改链的默认规则

        • Iptables -P INPUT DROP :默认阻止全部,允许设定规则

          • Chain INPUT (policy ACCEPT) -> Chain INPUT (policy DROP)
            
      • -N -X -E

    • 规则

      • -p
        • 指定协议名称
      • -s
        • 表示包的来源ip即source。除了指定固定的ip外,我们还可以指定ip范围,比如59.45.175.0/24
      • -d
        • 允许的目的ip
        • –dport 允许访问本主机的端口号
      • -i
        • 进入的物理网络接口 网卡
        • 如 新增eth0 -i ech0
      • -o
        • 出去的网络接口
      • -j
        • 表示jump 也即是我们最终的动作,这里的动作是拒绝
  • 示例:

在已知链末尾添加规则(举例,拒绝某个ip的访问)
iptables -t filter -A INPUT -s 59.45.175.62 -j REJECT

# 查看本机实现的过滤规则
[root@mikasa ~]# iptables -t filter -L
Chain INPUT (policy ACCEPT) #外部主机进入本主机
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT) #当前主机发出去数据包
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT) #数据包经过本主机
target     prot opt source               destination 

policy:默认规则

# 添加一条规则 :允许源为10.0.0.1的主机访问本机
iptables -t filter -A INPUT -s 10.0.0.1 -j ACCEPT

# 允许某一个ip通过某一个网络接口访问指定协议的指定端口 
# 添加一条规则:允许源为10.0.0.1的主机通过 eth0网卡 通过tcp协议访问80端口
iptables -t filter -A INPUT -i eth0 -s 10.0.0.1 -p tcp --dport 80 -j ACCEPT

iptables 的 nat 表

https://blog.csdn.net/weixin_38166318/article/details/127344897

  • iptables -t nat 命令 规则链 规则

    • PREROUTING 目的地址转换

      • 代理
    • POSTROUTING 源地址转换

    • 隐藏源地址如VPN服务器

firewallD 服务

  • firewallD 的特点
    • 支持区域“zone”概念

  • 通过systemctl 的 status | start | stop | enable | disable 命令来管理 firewalld.service服务

  • firewall-cmd 管理firewall服务

    • –state 状态

    • –list-all 配置列表

      • public
          target: default
          icmp-block-inversion: no
          # 网络接口
          interfaces: eth0
          # 源IP
          sources: 10.0.0.1 
          # 服务 允许指定IP访问 ssh服务22端口
          services: dhcpv6-client ssh
          # 端口
          ports: 80/tcp 23/tcp
          protocols: 
          masquerade: no
          forward-ports: 
          source-ports: 
          icmp-blocks: 
          rich rules: 
        
    • –list-interfaces 查看接口

    • –list-ports 端口

    • –get-zones 获取所有区域

    • –get-default-zone 获取默认区域

    • –get-active-zone 获取激活区域

    • 添加端口和服务的区别:

      • 例如ssh服务默认端口是22,直接添加ssh服务即可允许22端口访问
      • 假如你的ssh服务指定的端口是21,那么如果要进行ssh服务则需要开放端口21才能访问服务
    • –add-service

      • –add-service=https
        • https使用默认的43端口就会开放给指定sources对应的ip(未指定则开放给所有人)
    • –add-port=81/tcp –permanent

      • 直接使用–add-* 不会永久保存,追加–permanent则永久生效(需要重新加载firewalld.service
    • –reload

      • 重新加载服务
    • –remove

      • 移除规则
      • –remove-port=10.0.0.1

SSH 命令

  • systemctl status | start | stop | restart | enable | disable sshd.service
  • 客户端连接服务端命令
    • ssh [ -p 端口 ] 用户@远程ip
      • 用root用户远程连接39.108.108.234服务器ssh对应的22端口
        • ssh -p 22 root@39.108.108.234
    • SecureCRT
    • Xshell
    • putty

SSH 公钥认证

  • 密钥认证原理

  • 常用命令

    • ssh-keygen -t rsa :产生公钥和密钥

      • 公钥不怕被泄露:其他人导入你的公钥你就可以不受限制连接其服务器

      • 密钥怕泄露:其他人可以通过密钥不受限制连接本主机

      • 默认存放位置(产生时可指定)

        • Your identification has been saved in /root/.ssh/id_rsa.
          Your public key has been saved in /root/.ssh/id_rsa.pub.
          
    • ssh-copy-id :拷贝

    • Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
      
      • 示例将公钥拷贝到远程主机 39.108.108.234

        • ssh-copy-id -i /root/.ssh/id_rsa.pub root@39.108.108.234
          
      • 拷贝需要远程主机的密码,可以用别的方式将公钥上传到服务器

scp 和 sftp 远程拷贝

  • 常用命令
    • scp
      • 本地 kpi.txt 拷贝到39.108.108.234服务器root用户下的/tmp/ 文件
        • scp kpi.txt root@39.108.108.234:/tmp/
      • 远程拷贝到本地
        • scp root@39.108.108.234:/root/kpi.txt /tmp
    • sftp
    • winscp

其他常用命令

tail

显示文件的末尾内容。默认情况下,它显示文件的最后 10 行。

tail [-F | -f | -r] [-q] [-b number | -c number | -n number] [file …]

example:

tail -n 20 file.txt 将显示 file.txt 文件的最后 20 行内容。

参数:

  • -f

    • 参数表示“跟随”,使 tail 命令保持打开状态并显示新添加到文件末尾的内容,直到用户手动停止该命令。

    • tail -f sonar.log
      
  • -n

    • 用于指定要显示的行数。例如 tail -n 20 file.txt 将显示 file.txt 文件的最后 20 行内容。

head

用于显示文件的前几行内容。默认情况下,head 命令会显示文件的前 10 行内容,可以使用 -n 参数来指定要显示的行数。

head [-n count | -c bytes] [file …]

查询记录数限制:

ls | head -5

echo

用于将文本或变量输出到终端屏幕上。它的语法格式为:

echo [字符串或变量]

也可用管道符将输出到终端上的字符串或变量输出到文件

echo 'export PATH=/usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/bin:$PATH' >> ~/.bash_profile 

du

用于显示文件或目录磁盘使用情况的命令

du [选项] [文件或目录]

参数

  • -h
    • 使用 KB、MB、GB 等单位显示当前目录的所有子目录的磁盘使用情况
  • -s
    • 显示总的磁盘使用情况

curl

用来与网络服务器进行交互,支持多种协议,如HTTP、HTTPS、FTP等等。它最常用的功能是下载和上传文件,但它还可以执行其他网络操作,如发送HTTP请求,处理API响应等等。

常用参数:

  • -X:指定HTTP请求的方法(GET、POST、PUT等)。
  • -d:发送HTTP POST请求时附带的数据。
  • -H:添加HTTP请求头部信息。
  • -i:包含HTTP响应头部信息。
  • -o:将服务器响应保存到本地文件。
  • -u:指定服务器认证信息。
  • -s:静默模式,不输出任何信息。
  • -v:显示详细的信息,包括请求和响应头部信息。

使用场景:

  • 下载文件:curl -O http://example.com/file.zip
  • 上传文件:curl -F “file=@/path/to/localfile” http://example.com/upload
  • 发送POST请求:curl -X POST -d “username=test&password=123” http://example.com/login
  • 添加HTTP头信息:curl -H “Authorization: Bearer token” http://example.com/api
  • 基本认证:curl -u username:password http://example.com/private
  • 下载并保存响应:curl -o output.txt http://example.com/file.txt
  • 显示详细信息:curl -v http://example.com

<<EOF

表示将标准输入中从当前行开始直到遇到指定结束符的所有内容,作为一段文本输入到当前命令或脚本中。其中EOF可以是任何不包含空格的字符串,用于表示文本的结束位置。

例如:

cat <<EOF
This is a
multi-line
text.
EOF	

则会将三行文本作为标准输入传递给cat命令,最终输出如下:

This is a
multi-line
text.

可以将cat命令替换成任何其他命令,从而将这些文本作为标准输入传递给其他命令进行处理。

示例:给centos7配置 kubeadm 的安装源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
apiVersion: kubeadm.k8s.io/v1beta2 
kind: Cluster
Configuration controller
Manager: extra
Args: horizontal-pod-autoscaler-use-rest-clients: "true" horizontal-pod-autoscaler-sync-period: "10s" node-monitor-grace-period: "10s" apiServer: extraArgs: runtime-config: "api/all=true" imageRepository: registry.aliyuncs.com/google_containers kubernetesVersion: v1.20.0

tree

树形显示文件目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

mikasa_akm

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

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

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

打赏作者

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

抵扣说明:

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

余额充值