linux常用命令

常用命令

grep

  • -n:输出行号
  • -v:取反
  • -i:忽略大小写
# 显示非空行
grep -v ^$ /etc/default/useradd

# 显示有效数据,被#注释的不显示,空白行不显示
grep -v ^\# /etc/default/useradd | grep -v ^$

tar

tar压缩:tar 选项 /path/压缩包名字 /源数据 ...

tar解包:tar 选项 /path/压缩包名字 选项 /释放的位置

  • -c:创建归档
  • -z:.gz格式
  • -j:.bz2格式
  • -J:.xz格式
  • -x:释放归档
  • -C:指定释放路径
  • -t:查看压缩包里面的文件
  • -f:用到tar包名字就得用,必须在所有选项最后
# 压缩
tar -zcf /root/test.tar.gz /etc/passwd /home/bhlu
tar -jcf /root/test.tar.bz2 /etc/passwd /home/bhlu
tar -Jcf /root/test.tar.xz /etc/passwd /home/bhlu

# 解压
tar -xf test.tar.gz -C /data/test

# 检查压缩包
tar -tf test.tar.gz

find

格式:find 目录 条件

  • -type:d代表目录,f代表文件,l代表快捷方式
  • -name:指定名称
  • -size:+或-文件大小(k、M、G),-1M/-1G/-1k无效
  • -user:指定属主
  • -mtime:+或-文件修改时间
  • -exec 命令 {} \;:高级用法
# 按类型查找
find /boot -type d
find /boot -type f
find /boot -type l

# 按名称查询
find /etc -name "*.conf"

# 统计行数
find /etc -name "*.conf" | cat -n
find /etc -name "*.conf" | wc -l

# 查询文件大小10M~50M
find /boot -size +10M -size -50M
find /boot -size +10k -size -500k

# 查询home目录下属主为bhlu的文件和文件夹
find /home -user bhlu

# 查找90天之前的数据  查找10天以内的数据
find /var -mtime +90
find /root -mtime -10

# 将/boot下面大于10M的文件拷贝到/data上
find /boot -size +10M -exec cp {} /data/ \;

# 将/etc下面的名称为tab结尾的文件拷贝到/root/mytab下
find /etc -name "*tab" -type f -exec cp {} /root/mytab \;

rpm

  • -q:查询是否安装
  • -qa:显示已安装软件
  • -qi:查询软件功能
  • -ql:查询软件安装清单
  • -qf:查询生成该文件的软件
  • -qpl:查看软件包安装清单
  • -qpi:查看软件包功能
  • -ivh:安装软件包,显示详细信息,显示进度条
  • --force:强制安装
# 查询软件相关
rpm -q firefox
rpm -qa | grep firefox
rpm -qi firefox
rpm -ql firefox | less

# 查询软件包相关
rpm -qpl /mnt/Packages/vsftpd-3.0.2...
rpm -qpi /mnt/Packages/vsftpd-3.0.2...

# 导入红帽签名信息
rpm --import /mnt/RPM-GPG-KEY-CentOS-7

yum

  • 仓库配置文件:/etc/yum.repos.d/test.repo

    [test]							# 仓库名称
    name=bhlu-repos			# 仓库描述信息
    baseurl=file:///mnt	# 指定服务端位置file://标识本地服务端
    enabled=1						# 本文件启用
    gpgcheck=0					# 不检测红帽签名信息,如果需要检测,需要在下面添加秘钥位置
    
  • yum repolist:列出仓库信息

  • yum -y install 软件包:安装软件包

  • yum -y remove 软件包:卸载软件包

  • yum search 软件包:查找相关软件包

  • yum list 软件包:查找指定软件包

  • yum provides 命令:查询命令或文件对应的软件,跟rpm -qf类似

  • yum info 软件包:查看软件包描述信息

  • yum -y reinstall 软件包:重新安装软件包

  • yum clean all:清空缓存

date

  • date:显示当前时间
  • date -s "2024-01-01 11:11:35":修改时间
  • date +"%Y-%m-%d~%H:%M:%S":按格式显示当前时间
  • date +%Y:显示年
  • date +%m:显示月
  • date +%d:显示日期
  • date +%H:显示时
  • date +%M:显示分
  • date +%S:显示秒
  • date +%F:显示年-月-日
  • date +%R:显示时分

du

  • -sh:统计目录大小
du -sh /etc/

# 查看指定目录下最大的五个文件或目录
du -h | sort -h -r | head -5

ln

软链接

  • 格式:ln -s /路径/源数据 /路径/快捷方式的名称
  • 源数据消失,快捷方式失效
  • 目录和文件都可以
  • 支持跨分区

硬链接

  • 格式:ln /路径/源数据 /路径/快捷方式的名称
  • 源数据消失,快捷方式仍然有效
  • 支持文件,不支持目录
  • 不支持分区

zip

zip归档工具,跨平台

格式:zip [-r] 备份文件.zip 被归档文件...

  • -r:压缩的数据中有目录,就需要加上这个
# 压缩
zip -r test.zip /home /etc/passwd

# 解压到/opt/test下
mkdir /opt/test
unzip test.zip -d /opt/test

# 查看test.zip里面有什么
unzip -l test.zip

scp

格式:scp [选项] 源数据路径 目标数据路径

  • -r:目录
# 将/etc/passwd复制到192.168.1.2服务器的/root下
scp /etc/passwd root@192.168.1.2:/root

# 将192.168.1.2的/root复制到本机的/home下
scp -r root@192.168.1.2:/root /home

rsync

数据同步

格式:rsync [选项] 源目录 目标目录

  • -n:测试同步过程,不做实际更改
  • --delete:删除目标目录中多余的文档
  • -a:归档模式,相当于-rlptgoD
  • -v:显示详细操作信息
  • -X:保持acl策略不变
# 将mydir同步到todir,这里的/mydir/后面的/不能省略
rsync -avX --delete /mydir/ /todir/

# 写一个shell脚本,保证192.168.1.101上面的/mnt和本机的/mydir上的数据一致
# 首先配置好ssh的免密登录,inotifywait是监控目录和文件变化的软件
while /opt/tools/bin/inotifywait -rqq /mydir/
do
    rsync -aX --delete /mydir/ root@192.168.1.101:/mnt
done

源码编译

源码编译步骤

  1. 安装开发工具gccmake,释放源代码至指定目录
  2. tar解包,释放源代码至指定目录
  3. ./configure配置,指定安装目录--prefix=/opt/test/功能模块等选项
  4. make编译,生成可执行的二进制程序文件
  5. make install安装,将编译好的文件复制到安装目录

用户权限相关

useradd

创建用户

  • -d:指定用户家目录位置
  • -G:指定附加组
  • -g:指定基本组
  • -s:指定用户的登录解释器
  • -M:不需要自动创建用户的家目录
  • -n:取消建立以用户名成为名的群组
  • -r:建立系统账号
  • -c:备注
  • -e:有效期限
  • -f:密码过期多少天后关闭该账号

创建用户的时候,用户家目录下默认的文件是存放在/etc/skel下的

groupadd

创建组

  • -g:指定UID
  • -r:创建系统工作组,UID小于500
  • -k:覆盖配置文件/etc/login.defs
  • -o:允许添加UID不唯一的工作组
  • -f:不存在则创建,存在就取消,不输出

usermod

改名

格式:usermod 选项 ...

  • -l:修改用户名
  • -u:修改uid
  • -s:修改登录解释器
  • -d:修改家目录,但是不会创建新的目录
# 修改test  用户的UID,登录解释器,用户名修改为bhlu
usermod -u 1600 -s /sbin/nologin -l bhlu test

userdel

删除用户

  • -r:删除用户的同时将家目录也删除

gpasswd

  • -a:将指定用户添加到指定组中
  • -M:重置组的成员列表
  • -d:将组中的指定用户删除
  • -A:设置指定组的组管理员,会替换之前的组管理员
# 添加bhlu到test组中
gpasswd -a bhlu test

# 设置test组只有haha和heihei两个用户,其他的全部删除
gpasswd -M 'haha,heihei' test

# 将haha从test中移除
gpasswd -d haha test

# 设置bhlu是test的管理员,通过bhlu添加haha到test中
gpasswd -A bhlu test
su - bhlu
gpasswd -a haha test

# 设置test的组管理员是test01,test02
gpasswd -A 'test01,test02' test

# 删除test组的所有管理员
gpasswd -A '' test

crontab

格式:分 时 日 月 周 任务命令行(绝对路径)

  • -e:编辑计划任务
  • -l:列出计划任务
  • -r:清除计划任务
# 每分钟执行一次
* * * * * 命令行

# 每天早上8:30执行一次
30 8 * * *

# 周一到周五的6点整执行
0 6 * * 1-5

# 周一,周三,周五的12点执行
0 12 * * 1,3,5

# 每月1号或者周一23点执行
0 23 1 * 1

# 每隔6分钟执行一次
*/6 * * * *

# 每隔两个小时执行一次
0 */2 * * *

setfacl

能够针对个人用户,个别组设置独立的权限

命令格式

  1. setfacl -m u:用户名:权限 文件...
  2. setfacl -m g:组名:权限 文件...

选项

  • -m:修改ACL策略
  • -x:清除指定的ACL策略
  • -b:清除所有已设置的ACL的策略
  • -R:递归设置ACL策略
# 设置bhlu对/data目录的查看和执行权限,并且查看/data的acl策略
setfacl -m u:bhlu:rx /data
getfacl /data

# 添加test组对目录的全部权限
setfacl -m g:test:7 /data

# 修改bhlu对/data目录的权限
setfacl -m u:bhlu:r /data

# 删除bhlu对/data目录的权限
setfacl -x u:bhlu /data

# 清除所有acl
setfacl -b /data

# 不管怎么样,lisi都不能操作这个目录
setfacl -m u:lisi:--- /data

# 设置了acl策略的目录权限后面有个+

chmod

修改权限:rwxSUIDSGIDt

格式:chmod [-R] 文件/目录

  • SUID:用于可执行权限,占用属主的x位,若属主本身没有x,最后一位会变成S,没有意义,如果有x,会变成s

    • 作用:设置了SUID后,所有人执行这个程序的时候,会默认使用程序的属主进行执行
    • 命令:chmod u+s /usr/bin/test
  • SGID:用于目录,占用属组的x位,若属组本身没有x,最后一位会变成S,没有意义,如果有x,会变成s

    • 作用:添加SGID权限后,目录中的创建的目录或者文件的属组都会默认和最上面一层的一样
    • 命令:chmod g+s test
  • t:用于目录,占用其他的x位,若其他本身没有x,最后一位会变成T,没有意义,如果有x,会变成s

    • 作用:设置了t权限的文件夹下,即使用户有写入权限,也不能删除或改名其他用户的文档
    • 命令:chmod o+t test

chown

修改属主和属组

格式:chown [-R] 属主:属组 文件/目录

sudo

  • 一般用于普通用户执行需要root权限的命令
visudo

# 添加这一行,用户就可以使用sudo提权,会提示输入密码,输入bhlu的密码即可
bhlu  ALL=(ALL)   ALL

# 添加这一行,用户就可以使用sudo提权,不需要输入密码
bhlu  ALL=(ALL) NOPASSWD: ALL

硬盘相关

fdisk

MBR分区

  • m:列出指令帮助
  • p:查看现有的分区表
  • n:新建分区
  • d:删除分区
  • q:放弃更改并退出
  • w:保存并退出
# 示例
fdisk /dev/sdb
n       # 创建新的分区
p/回车	# 分区类型,选择主分区
回车		# 分区编号
回车    # 起始扇区
+2G	   # 分区大小
p      # 查看分区表

n      # 再次创建新的分区
p/回车	# 分区类型,选择主分区
回车		# 分区编号
回车  	# 起始扇区
+1G	 	 # 分区大小
p      # 查看分区表

w      # 保存并退出

# 如果分错,可以ctrl+c退出

# 重新刷新读取分区表
partprobe

# 将新的分区添加到交换分区中
mkswap /dev/sdb1  # 格式化交换文件系统
blkid /dev/sdb1   # 查看文件系统类型
swapon            # 查看交换空间组成成员信息
swapon /dev/sdb1  # 启用交换分区
swapon            # 查看交换空间组成成员信息
free -h           # 查看交换空间的大小
swapoff /dev/sdb1 # 停用交换分区
swapon            # 查看交换空间组成成员信息
free -h           # 查看交换空间大小
# 设置开机自动启用交换分区
vim /etc/fstab
/dev/sdb1  swap  swap defaults  0  0
swapon -a         # 校测交换分区的书写
swapon

mkfs

格式化文件系统

格式:mkfs.格式 分区

mkfs.ext4 /dev/sdb1
mkfs.xfs /dev/sdb2

# 使用-f强制格式化xfs
mkfs.xfs -f /dev/sdb1

blkid

查看文件系统类型

格式:blkid 分区

blkid /dev/sdb1
blkid /dev/sdb2

mount

  • 临时挂载:mount 分区 目录

  • 开机自动挂载

    vim /etc/fstab
    
    # 设备路径      挂载点    文件系统类型   参数        备份标记   检测顺序
      /dev/sdb1  /mypart     ext4       defaults       0        0
      
    mount -a
    

总结过程

  1. 识别硬盘:lsblk
  2. 划分分区(MBR分区模式):fdisk
  3. 查看是否分区成功:blkid 分区
  4. 格式化文件系统:mkfs.xfs mkfs.ext4 blkid
  5. 挂载使用:mount -a
  6. 查看是否挂载成功:df -h

parted

GPT分区命令

  • parted /dev/sdc

  • help:查看命令帮助

  • mktable gpt:初始化并建立指定模式分区表

  • mkpart 分区名称 文件系统类型 start end:指定大小或百分比%作为起始、结束位置

  • print:查看分区表

  • rm 序号:删除指定分区

  • quit:退出交互环境

parted /dev/sdd
# 进入parted交互模式
mktable gpt	 # 初始化并指定分区模式,注意这里只能指定一次,再次输入会初始化硬盘的
print				 # 查看分区模式和分区表信息
mkpart			 # 使用交互模式划分分区模式

# mkpart交互模式开始
bhlu-sdd     # 分区名称,随便填
ext4	       # 分区系统类型,随便填,不会进行格式化
0            # 起始点,第一次填0,第二次
2G					 # 结束点,注意这里是结束点,不是多大
Ignore			 # 从0开始会提示一个警告,忽略即可
# mkpart交互模式结束

print				 # 查看分区表信息
unit GB			 # 使用GB为单位
print        # 查看分区表信息
rm 1				 # 删除分区,后面的1可以根据上面的print输出来输入
mkpart bhlu-sdd1 ext4 0 5G    # 使用命令直接分区,从0开始,大小5G
mkpart bhlu-sdd2 xfs 5G 100%  # 使用命令直接分区,从5G开始,全部分完
print        # 查看分区表信息
quit         # 退出
# 退出parted交互模式

# 查看分区
lsblk

# 格式化
mkfs.xfs /dev/sdd1   # 这里的格式可以和上面mkpart填的不一样,这里才是真正的格式化
mkfs.ext4 /dev/sdd2

# 查看是否格式化成功
blkid /dev/sdd1
blkid /dev/sdd2

# 挂载
mount /dev/sdd1 /data1
mount /dev/sdd2 /data2

# 添加开机自动挂载
vim /etc/fstab
/dev/sdd1  /data1  xfs   defaults  0  0
/dev/sdd2  /data2  ext4  defaults  0  0

虚拟磁盘技术

物理卷(PV)–> 卷组(VG)–> 逻辑卷(LV)

  1. 物理卷,使用fdisk或者parted

  2. 卷组

    # 创建卷组,名称叫systemvg
    vgcreate systemvg /dev/sdb[1-2]
    
    # 查看所有卷组
    vgs
    
    # 重命名卷组
    vgrename systemvg new_systemvg
    
    # 扩展卷组
    vgextend new_systemvg /dev/sdb{3,4,5}
    
    # 删除卷组
    vgremove new_systemvg
    
    # 查看卷组具体信息
    vgdisplay new_systemvg
    
    # 修改PE大小,PE代表分配的逻辑卷的最小单位,默认4M
    vgchange -s 1M systemvg
    
  3. 逻辑卷

    # 建立逻辑卷,大小16G,名称叫vo
    lvcreate -L 16G -n vo systemvg
    
    # 查看所有逻辑卷
    lvs
    
    # 格式化xfs文件系统
    mkfs.xfs /dev/systemvg/vo
    
    # 查看文件系统类型
    blkid /dev/systemvg/vo
    
    # 设置开机自动挂载
    vim /etc/fstab
    /dev/systemvg/vo  /mylv  xfs  defaults  0  0
    
    # 扩展逻辑卷至18G
    lvextend -L 18G /dev/systemvg/vo
    
    # 刷新逻辑卷的文件系统
    xfs_growfs /dev/systemvg/vo  # 刷新xfs文件系统
    resize2fs /dev/systemcg/vo   # 刷新ext4文件系统
    
    # 删除逻辑卷(删除前需取消挂载)
    lvremove -y /dev/systemvg/vo
    

进程相关

pstree

查看用户进程信息

  • -p:列出对应进程的PID
  • -a:显示完整的命令行
pstree -ap bhlu

pgrep

查看包含指定字符的进程

  • -l:显示进程名
  • -u:指定用户
  • -x:精确匹配完整的进程名
pgrep -l ab
pgrep -lu root
pgrep -lx vim

kill

根据进程ID杀掉进程:kill [-9] 进程ID

killall

根据进程名称杀掉进程:killall [-9] 进程名称

控制进程

  • &:后台运行进程
  • Ctrl + z:进程放到后台
  • jobs:查看后台进程
  • bg 编号:将后台进程继续运行
  • fg 编号:将后台进程恢复到前台

网络相关

修改服务器名称

hostnamectl set-hostname 服务器名称

修改网卡名称

修改网卡名称为eth0、eth1、eth2…

  1. vim /etc/default/grub

    # 最后添加net.ifnames=0 biosdevname=0
    GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"
    
  2. 重新生成内核

    grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. 重启系统reboot

nmcli

nmcli必须利用nmcli自己的命名,才能进行网络IP地址的设置。

规则:网卡的本名是什么,nmcli起的外号就是什么

  1. nmcli connection show:查看网络命名的链接
  2. nmcli connection delete 名称:删除网络别名
  3. nmcli connection add type ethernet ifname eth0 con-name eth0:添加别名
  4. 配置网络
    nmcli connection modify eth0 \	# 修改eth0
    ipv4.method manual \	# 设置手动
    ipv4.addresses 192.168.1.100/24 \	# 设置ip和子网掩码
    ipv4.gateway 192.168.1.254 \	# 设置网关
    connection.autoconnect yes	# 设置自动连接
    
  5. nmcli connection down eth0:关闭网卡
  6. nmcli connection up eth0:打开网卡

ip

  • 查看ip:ip address show或者ip a s
  • 添加临时ip:ip address add 192.168.2.2/24 dev eth0或者ip a a 192.168.2.2/24 dev eth0
  • 删除临时ip:ip address del 192.168.2.2/24 dev eth0或者ip a d 192.168.2.2/24 dev eth0

ss

  • 查看端口系统中启动的端口信息,参数和netstat命令
  • 选项
    • -a:显示所有端口的信息
    • -n:以数字格式限速端口号
    • -t:显示TCP连接的端口
    • -u:显示UDP连接的端口
    • -l:显示服务正在监听的端口信息
    • -p:显示监听端口的服务名称
ss -ntulp | grep sshd

netstat -ntulp | grep sshd

系统相关

firewall

  • public:仅允许访问本机sshd等少数几个服务
  • trusted:允许任何访问
  • block:阻塞任何来访请求,给出回应
  • drop:丢弃来访的数据包,不给回应

命令:

  • 设置默认策略:firewall-cmd --set-default-zone=public
  • 查看列表信息:firewall-cmd --zone=public --list-all
  • 临时添加服务策略:firewall-cmd --zone=public --add-service=http
  • 临时删除服务策略:firewall-cmd --zone=public --remove-service=http
  • 加载策略:firewall-cmd --reload
  • 永久添加服务策略:firewall-cmd --permanent --zone=public --add-service=http
  • 永久删除服务策略:firewall-cmd --permanent --zone=public --remove-service=http

永久添加或删除之后,不会立即生效,需重新加载才会生效

重设root密码

  1. 开机按e进入救援模式

  2. 找到linux16那一行(关闭向下移,一般在倒数第二行),将该行的ro改为rw,然后再后面添加rd.break

    # 原格式
    	linux16 vm... r\
    o crashkernel...
    
    # 修改后的格式
    	linux16 vm... r\
    w rd.break carshkernel...
    
  3. 然后ctrl + x启动,会看到switch_root:/#

  4. 切换环境,输入:chroot /sysroot

  5. 修改root密码,这里修改为123为例,输入:echo 123 | passwd --stdin root

  6. 此时根据自身环境进行下列操作,这里的操作比较关键

    # 可以使用getenforce获取selinux状态
    # 如果selinux为enforcing,就创建一个文件,让selinux失忆
    touch /.autorelabel
    
    # 如果selinux不是enforcing,就可以不用操作
    
  7. 强制重启:reboot -f

切换运行模式

  • RHEL 5RHEL 6

    • init 0: 关机,0个服务
    • init 1: 单用户模式(基本功能的实现,破解linux密码),50个服务
    • init 2:多用户字符界面(不支持网络,80个服务
    • init 3:多用户字符界面(支持网络)服务器默认运行级别,100个服务 ,常用
    • init 4:未定义,0个服务
    • init 5:图形界面,300个服务,常用
    • init 6:重启,0个服务
  • RHEL 7

    • systemctl -t target:列出可用运行模式
    • systemctl get-default:查看默认运行模式
    • systemctl isolate multi-user.target:切换至字符模式,相当于init 3
    • systemctl isolate graphical.target:切换至图形模式,相当于init 5
    • 设置永久策略
      • systemctl set-default multi-user.target:设置每次开机进入字符模式
      • systemctl set-default graphical.target:设置每次开机进入图形模式

raid模式

  • RAID 0:条带模式
    • 同一个文档分散存放不同磁盘
    • 并行写入,提高效率
  • RAID 1:镜像模式
    • 一个文档复制多份,分别写入不同磁盘
    • 多份拷贝,提高可靠性,效率无提升
  • RAID 5:高性价比模式
    • 相当于RAID0和RAID1的折中方案
    • 需要至少一块磁盘的容量来存放校验数据
  • RAID 6:高性价比/可靠模式
    • 相当于扩展的RAID5阵列,提供2份独立校验方案
    • 需要至少两块磁盘的容量来存放校验数据
  • RAID 0+1
    • 假设有4块盘A、B、C、D,先将A和B组成RAID0,C和D组成RAID0,然后再讲两个RAID0组成RAID1
  • RAID 1+0
    • 类似于RAID 0+1,先组成RAID1,再组成RAID0
对比项RAID 0RAID 1RAID 1+0/0+1RAID 5RAID 6
磁盘数>=2>=2>=4>=3>=4
存储利用率100%<=50%<=50%n-1/nn-2/n
校验盘00012
容错性
IO较高较高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值