系统的学习linux常用的命令,命令很全所以篇幅很长,可以作为你查阅命令的手册。也欢迎大佬们评论区补充。
文章目录
- 常见目录介绍
- 配置文件
- 系统操作
- 帮助命令
- man 帮助
- help 帮助
- info 帮助
- 显示当前的目录名称
- 文件查看
- 建立目录
- 删除空目录
- 复制文件
- 移动文件
- 删除文件
- 查找文件
- 通配符
- 打包命令
- 压缩和解压缩
- 文本
- VIM
- 四种模式
- 正常模式
- 命令模式
- 可视模式
- 多用户操作系统
- 用户管理常用命令
- 组管理命令
- 用户切换
- 用户和用户组配置文件
- 文件权限的表示方法
- 目录权限的表示方法
- 修改权限命令
- 特殊权限
- 网络管理
- ⽹网络状态查看⼯工具
- ⽹网络状态查看命令
- ⽹网络接⼝口命名修改
- 查看⽹网络情况
- 查看⽹网关命令
- ⽹网络配置命令
- ⽹网关配置命令
- ⽹网络命令集合:ip 命令
- ⽹网络故障排除命令
- ⽹网络服务管理理
- 软件管理
- 软件包管理理器器
- rpm 包
- rpm 命令
- yum 包管理理器器
- yum命令常⽤用选项
- 进程管理理
- 进程的概念
- 进程的查看命令
- 进程的优先级调整
- 进程间通信
- 守护进程
- 系统⽇日志
- 服务管理
- SELinux
- 内存与磁盘管理理
- 内存使⽤用率查看
- 磁盘使⽤用率的查看
- 常⻅见⽂文件系统
- 磁盘分区与挂载
- ⽤用户磁盘配额
- 交换分区
- RAID 与软件 RAID 技术
- 逻辑卷管理理
- 系统综合状态查询
- Shell
- 什么是 Shell
- 标准的 Shell 脚本要包含哪些元素
- 内建命令和外部命令的区别
- 管道与管道符
- 重定向符号
- 变量
- 变量的定义
- 变量的赋值
- 变量的查看
- 变量的作用范围
- 系统环境变量
- 环境变量配置文件
- 转义与引用
- 特殊字符
- 运算符
- 测试与判断
- 退出与退出状态
- 测试命令 test
- if
- 使用 if-then语句
- 使用 if-then-else 语句
- 嵌套 if 的使用
- 循环
- 使用 for 循环遍历命令的执行结果
- 使用 for 循环遍历变量和文本
- C 语言风格的 for 命令
- while 循环
- *until 循环*
- *循环的使用*
- *使用循环处理命令行参数*
- 函数
- 自定义函数
- 系统脚本
- 计划任务
- 文本操作
- 正则表达式与文本搜索
- 元字符(区别通配符!文本搜索用元字符)
- 扩展元字符
- 文件查找命令
- 文本内容的查找
- grep
- 行编辑器介绍
- sed 的基本用法
- AWK 的基本用法演示
- 防火墙
- 防火墙分类
- iptables 的表和链
- 表、链、规则
- 一个规则一般分为两大部分:
- iptables 的 filter 表
- iptables 的 nat 表
- firewallD 服务
- SSH 命令
- SSH 公钥认证
- scp 和 sftp 远程拷贝
- 其他常用命令
- tail
- head
- echo
- du
- curl
- <<EOF
- tree
常见目录介绍
• / 根目录
• /root root 用户的家目录
• /home/username 普通用户的家目录
• /etc 配置文件目录
• /bin 命令目录
• /sbin 管理命令目录
• /usr/bin /usr/sbin 系统预装的其他命令
配置文件
- /etc/profile:这是一个全局的配置文件,用于设置系统环境变量和 PATH 等全局设置。
- /etc/bashrc:这个文件类似于 ~/.bashrc,用于自定义 bash 终端的行为和设置环境变量,但是是全局的。
- ~/.bash_profile:这是用户级别的配置文件,用于自定义 bash 终端的行为和设置环境变量。
- /etc/passwd:这个文件包含所有的用户账户信息,如用户名、用户 ID、用户家目录等。
- /etc/group:这个文件包含所有的用户组信息,如组名、组 ID、组成员等。
- /etc/fstab:这个文件用于定义文件系统的自动挂载规则,可以指定特定文件系统的挂载点和权限等。
- /etc/hosts:这个文件用于将域名映射到 IP 地址,可以用于本地测试网站或屏蔽一些网站。
- /etc/sudoers:这个文件定义了哪些用户可以使用 sudo 命令以及他们能够使用的权限。
每个配置文件都有其特定的作用,但是在执行顺序上可能有所不同。一般来说,全局的配置文件会先于用户级别的配置文件执行。具体来说,Linux 系统的配置文件执行顺序如下:
- /etc/profile
- /etc/bashrc
- ~/.bash_profile
- ~/.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 和自己可以删除
网络管理
⽹网络状态查看⼯工具
-
- net-tools
• ifconfig
• route
• netstat - iproute2
• ip
• ss
- net-tools
⽹网络状态查看命令
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
• 配置格式:
分钟 小时 日期 月份 星期 执行的命令
注意命令的路径问题
- cron
-
计划任务加锁
• 如果计算机不能按照预期时间运行
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的访问,也要将其拒绝
甚至,我们可能还有多个互斥的规则,这多个规则,哪个规则先执行? 这就涉及到链这个概念。简单来讲,链就是将多个规则从上大小串起来的一个集合单位。规则按从上倒下依次进行匹配。
详细:https://blog.csdn.net/weixin_38166318/article/details/127344897
- 规则表
- filter
- 可以决定一个数据包是否可以到达目标进程端口
- nat
- 可以修改源和目标的ip地址,从而进行包路由
- mangle
- 可以修改数据包的内容
- raw
- 能基于数据包的状态进行规则设定
- filter
- 规则链
- INPUT
- 外部主机进入本主机
- OUTPUT
- 当前主机发出去数据包
- FORWARD
- 数据包经过本主机
- PREROUTING
- 路由前
- POSTROUTING
- 路由后
- INPUT
一个规则一般分为两大部分:
- 匹配: 即哪些数据包会命中这个规则,比如一个指定的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
- 表示包的来源ip即source。除了指定固定的ip外,我们还可以指定ip范围,比如
- -d
- 允许的目的ip
- –dport 允许访问本主机的端口号
- -i
- 进入的物理网络接口 网卡
- 如 新增eth0 -i ech0
- -o
- 出去的网络接口
- -j
- 表示jump 也即是我们最终的动作,这里的动作是拒绝
- -p
-
-
示例:
在已知链末尾添加规则(举例,拒绝某个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-service=https
-
–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
- 用root用户远程连接39.108.108.234服务器ssh对应的22端口
- SecureCRT
- Xshell
- putty
- ssh [ -p 端口 ] 用户@远程ip
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
- 本地 kpi.txt 拷贝到39.108.108.234服务器root用户下的/tmp/ 文件
- sftp
- winscp
- scp
其他常用命令
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
树形显示文件目录