系统的学习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
- <
- tree
• / 根目录
• /root root 用户的家目录
• /home/username 普通用户的家目录
• /etc 配置文件目录
• /bin 命令目录
• /sbin 管理命令目录
• /usr/bin /usr/sbin 系统预装的其他命令
每个配置文件都有其特定的作用,但是在执行顺序上可能有所不同。一般来说,全局的配置文件会先于用户级别的配置文件执行。具体来说,Linux 系统的配置文件执行顺序如下:
这是一个基本的执行顺序,实际上还可能会受到其他因素的影响。例如,某些系统可能会在 ~/.bash_profile 中包含 ~/.bashrc 文件,或者使用其他自定义的配置文件。用户可以根据自己的需要和实际情况进行配置。
• shell(命令解释器)自带的命令称为内部命令,其他的是外部命令
• 内部命令使用 help 帮助
• # help cd
• 外部命令使用help帮助
• # ls --help
• 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 命令可以删除多个目录,需谨慎使用
• 通配符
• 定义:shell 内建的符号
• 用途:操作多个相似(有简单规律)的文件
• 常用通配符
• * 匹配任何字符串
• ? 匹配1个字符串
• [xyz] 匹配xyz任意一个字符
• [a-z] 匹配一个范围
• [!xyz] 或[^xyz] 不匹配
tar 命令
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
cat 文本内容显示到终端
• head 查看文件开头
• tail 查看文件结尾
• 常用参数 -f 文件内容更新后,显示信息同步更新
• wc 统计文件内容信息
• 正常模式 (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 命令
• 替换 (默认针对光标所在行查找)
• / 查找
• :set 设置命令
• 三种进入可视模式的方式
• v 字符可视模式
• V 行可视模式
• ctrl+v 块可视模式
• 配合 d 和 I(大写 i ) 命令可以进行块的便利操作
• 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
• x 进入目录
• rx 显示目录内的文件名
• wx 修改目录内的文件名
• chmod 修改文件、目录权限
• chown 更改属主、属组
• chgrp 可以单独更改属组,不常用
• SUID 用于二进制可执行文件,执行命令时取得文件属主权限
• SGID 用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组
• SBIT 用于目录,该目录下新建的文件和目录,仅 root 和自己可以删除
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 <接⼝口>
• ifup <接⼝口>
• ifdown <接⼝口>
• 添加⽹网关
• route add default gw <⽹网关ip>
• route add -host <指定ip> gw <⽹网关ip>
• route add -net <指定⽹网段> netmask <⼦子⽹网掩码> gw <⽹网关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
常⽤用选项
• 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
服务(提供常⻅见功能的守护进程)集中管理理⼯工具
service
systemctl
• 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
• 逻辑卷和⽂文件系统的关系
• 为 Linux 创建逻辑卷
• 动态扩容逻辑卷
• Shell 是命令解释器,用于解释用户对操作系统的操作
• Shell 有很多
cat /etc/shells
• CentOS 7 默认使用的 Shell 是 bash
• Sha-Bang
#!/bin/bsh
• 命令
• “#”号开头的注释
• chmod u+rx filename 可执行权限
• 执行命令
• 内建命令不需要创建子进程
• 内建命令对当前 Shell 生效
• 管道和信号一样,也是进程通信的方式之一
• 匿名管道(管道符)是 Shell 编程经常用到的通信工具
一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
输入重定向符号 “ <” (用文件代替键盘输入
# 等待用户从终端输入 并统计行数(ctr+d结束)
wc -l
# 统计文件 替代用户输入
wc -l < /etc/passwd
输出重定向符号 “>” “>>” “2>” “&>” 输出到控制台的内容重定向到指定文件
• 变量名的命名规则
• 字母、数字、下划线
• 不以数字开头
为变量赋值的过程,称为变量替换
变量名=变量值
使用 let 为变量名赋值
将命令赋值给变量
将命令结果赋值给变量
数组
变量值有空格等特殊字符可以包含在””或’’ 中
• 变量的查看方法
• echo
• ${变量名} 在部分情况下可以省略为 $变量名
环境变量:每个 Shell 打开都可以获得到的变量
set 和 env 命令
$?
上一条命令是否执行成功
$!
$$
$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
_
特殊字符:一个字符不仅有字面意义,还有元意(meta-meaning)
# 注释
; 分号
\ 转义符号
引号
" 双引号 是不完全引用
’ 单引号 完全引用
var1=123
echo "var1"
输出: 123
echo 'var1'
输出:var1
赋值运算符
• = 赋值运算符,用于算数赋值和字符串赋值
• 使用 unset 取消为变量的赋值
• = 除了作为赋值运算符还可以作为测试操作符
基本运算符
• + - * / ** %
• 使用 expr 进行运算
数字常量的使用方法
• let “变量名 = 变量值”
• 变量值使用 0 开头为八进制
• 变量值使用 0x 开头为十六进制
双圆括号是 let 命令的简化
• (( a = 10 ))
• (( a++ ))
• echo $((10+20))
test 命令利用程序是否正常退出返回 0 或 1
• test 可以做以下测试:
• 文件测试
• 整数比较测试
• 字符串测试
test 测试语句可以简化为 [ ] 符号
if-then 语句的基本用法
if [ 测试条件成⽴立 ]
then 执⾏行行相应命令
fi 结束
if-then-else 语句可以在条件不成立时也运行相应的命令
if [ 测试条件成⽴立 ]
then 执⾏行行相应命令
else 测试条件不不成⽴立,执⾏行行相应命令
fi 结束
• if 条件测试中可以再嵌套 if 条件测试
• 嵌套的结果和复合比较语句 && 结果相同
for 循环的语法
for 参数 in 列列表
do 执⾏行行的命令
done 封闭⼀一个循环
使用反引号或 $() 方式执行命令,命令的结果当作列表进行处理
for((变量量初始化;循环判断条件;变量量变化))
do
循环执⾏行行的命令
done
while test测试是否成⽴立
do
命令
done
• until 循环与 while 循环相反,循环测试为假时,执行循环,为真时循环停止
• 循环和循环可以嵌套
• 循环中可以嵌套判断,反过来也可以实现嵌套
• 循环可以使用 break 和 continue 语句在循环中退出
• 命令行参数可以使用 $1 $2 … ${10}… $n 进行读取
• $0 代表脚本名称
• $* 和 $@ 代表所有位置参数
• $# 代表位置参数的数量
• 使用 $1_ 方式代替 $1 避免变量为空导致的遗产
• 函数用于“包含”重复使用的命令集合
• 自定义函数
function fname(){
命令
}
• 函数的执行
fname
• 函数作用范围的变量
local 函数名
• 函数的参数
$1 $2 $3 … $n
系统自建了函数库,可以在脚本中引用*
自建函数库*
脚本优先级控制
一次性计划任务
周期性计划任务
计划任务加锁
• 如果计算机不能按照预期时间运行
anacontab 延时计划任务
flock 锁文件
• . 匹配除换行符外的任意单个字符
• * 匹配任意一个跟在它前面的字符
• [ ] 匹配方括号中的字符类中的任意一个
• ^ 匹配开头
• $ 匹配结尾
• \ 转义后面的特殊字符
• + 匹配前面的正则表达式至少出现一次
• ? 匹配前面的正则表达式出现零次或一次
• | 匹配它前面或后面的正则表达式
find
命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
格式
find 路径 查找条件 [补充条件]
参数
示例: 查找根路径下文件名为 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 递归读取每一个目录下的所有文件
查找文本中含有关键字的一行
# 查找 含有password关键字,从/root/anaconda-ks.cfg文件中找
grep password /root/anaconda-ks.cfg
规则(rule)
来自192.168.2.31的访问,就要将其拒绝,这即是一条规则
链(chain)
往往我们的安全策略不只一条规则,除了
来自192.168.2.31的访问,就要将其拒绝 这条规则之外,我们还有其它规则,比如:
来自192.168.43.22的访问,也要将其拒绝
甚至,我们可能还有多个互斥的规则,这多个规则,哪个规则先执行? 这就涉及到链这个概念。简单来讲,链就是将多个规则从上大小串起来的一个集合单位。规则按从上倒下依次进行匹配。
详细:https://blog.csdn.net/weixin_38166318/article/details/127344897
iptables -t filter 命令 规则链 规则
命令
-L
-A
-I
-D
-F
-P
修改链的默认规则
Iptables -P INPUT DROP :默认阻止全部,允许设定规则
Chain INPUT (policy ACCEPT) -> Chain INPUT (policy DROP)
-N -X -E
规则
59.45.175.0/24
示例:
在已知链末尾添加规则(举例,拒绝某个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
https://blog.csdn.net/weixin_38166318/article/details/127344897
iptables -t nat 命令 规则链 规则
PREROUTING 目的地址转换
POSTROUTING 源地址转换
隐藏源地址如VPN服务器
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 获取激活区域
添加端口和服务的区别:
–add-service
–add-port=81/tcp –permanent
–reload
–remove
密钥认证原理
常用命令
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 ] ...] [user@]hostname
示例将公钥拷贝到远程主机 39.108.108.234
ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
拷贝需要远程主机的密码,可以用别的方式将公钥上传到服务器
显示文件的末尾内容。默认情况下,它显示文件的最后 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
命令会显示文件的前 10 行内容,可以使用 -n
参数来指定要显示的行数。
head [-n count | -c bytes] [file …]
查询记录数限制:
ls | head -5
用于将文本或变量输出到终端屏幕上。它的语法格式为:
echo [字符串或变量]
也可用管道符将输出到终端上的字符串或变量输出到文件
echo 'export PATH=/usr/local/opt/[email protected]/Frameworks/Python.framework/Versions/3.9/bin:$PATH' >> ~/.bash_profile
用于显示文件或目录磁盘使用情况的命令
du [选项] [文件或目录]
参数
用来与网络服务器进行交互,支持多种协议,如HTTP、HTTPS、FTP等等。它最常用的功能是下载和上传文件,但它还可以执行其他网络操作,如发送HTTP请求,处理API响应等等。
常用参数:
使用场景:
表示将标准输入中从当前行开始直到遇到指定结束符的所有内容,作为一段文本输入到当前命令或脚本中。其中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
树形显示文件目录