admin管理员组

文章数量:1593065

Linux命令详解(6)

在linux命令详解(1)
linux命令详解(2)
linux命令详解(3)
linux命令详解(4)
linux命令详解(5)
基础上添加一些新的指令,后续可以查阅Linux命令详解(7)
备注:快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解,后续的会比前面的更详细以及对之前的内容修改和更新补充[以后续更新的为最新](如有不正确的地方欢迎各位小伙伴在评论区提意见,小编会及时修改)

基本指令操作

# 查看远端Linux的ip地址
	ip a  或者  ip addr
# 清屏
	clear
# 查看当前系统时间
	date
#关机
	poweroff  或者  init 0
#重启
	reboot  或者  init 6
#修改主机名
	hostnamectl set-hostname 新名字
#列出指定文件夹下的内容
	ls
语法:
	ls [参数] 路径
注意:参数可选
参数介绍:
	-a 列出指定路径下的内容,包含隐藏文件
	-l 列出指定路径下内容的详细信息[例如:权限,时间,所属组,所属用户]
	-h 以人类可阅读的方式列出文件夹大小[一般与 -l 参数连用]
	--full-time 以完整的时间格式输出 [不能与其他参数连用]
	-t 根据最后一次修改的时间排序 展示内容[由新到旧]
	-F 在不同的文件结尾 输出不同的特殊符号
		以 / 结尾的就是文件夹
		以 * 结尾的就是可执行文件
		以 @ 结尾的就是软连接(快捷方式)
		普通文件,结尾什么都没有
		以. 开头的是隐藏文件
	-d 显示文件夹本身信息(不输出文件夹内部信息)
	-r 逆转排序
	-S 针对文件大小进行排序 (默认是从大到小)
	-Sr 从小到大排序
	-i 显示出文件的 inode信息[文件的元数据(文件大小,位置,权限,文件的唯一标识)]
常见的用法
	-- 查看指定目录下的信息
		ls -l 路径 或者 ll 路径
	-- 查看指定目录下的所有信息(包含隐藏文件)
		ls -la 路径
	案例1:列出根目录下所有内容的详细信息
		ls -a -l /
		参数可以合并:ls -la /
	案例2:列出 /opt下所有内容的详细信息
		ls -la /opt
-- 查看当前用户
	whoami
-- 查看当前主机名
	hostname
-- 查看当前命令行所在工作目录的绝对路径(print work directory)
	pwd
-- 用户切换
	su - 用户名
-- 创建用户
	sudo useradd -m 用户名  [创建普通用户]
	sudo passwd 用户名  [设置普通用户密码]
注意:
	root账户切换普通用户,直接切换即可
	普通用户切换 root 用户 需要输入密码
-- 退出当前用户 [切换到另外一个用户]
	logout
	或者
	exit

注意:

1.一般情况下,linux的命令参数都是可选的 不同的参数作用不一样

2.linux命令之间,必须有一个或多个空格

路径表述

# windows系统下路径表述
|-C盘
	|- 文件夹
		|-文件夹
			|-文件
			|-a.txt
		|-文件
	|-文件
	|-文件夹
|-D盘
|-F盘
# Linux系统下路径表述
---- 一切皆文件
/ 根目录
/
	|-文件夹
		|-文件夹
			|-文件
		|-文件
	|-文件
	|-文件夹
#linux系统中路径表述
1. 绝对路径(以 / 开头)
	/文件
	/文件夹/文件
2. 相对路径
	./ 		当前目录下
	../ 	上一层目录下
例如:
	/opt/a.txt 绝对路径
	./a.txt 当前目录下的 a.txt文件
	../a.txt 上一层目录下的a.txt文件
说明
	|-/opt/abc/a.txt
	|-/opt/a.txt
此时我们处于abc文件夹下 ../a.txt --------> /opt/a.txt

目录说明

/boot 存放的是内核与启动文件
/dev 存放的硬件(设备)相关信息的文件
/etc 存放系统的配置文件
	/etc/sysconfig/network-scripts/ifcfg-ens33:设置网络环境,例如动态、静态ip 设置是否支持远程连接......
	/etc/resolv.conf:设置DNS域名解析
	例如: 张三---手机号
			www.baidu-----275.168.220.8
			/etc/hostname : 设置主机名
			/etc/motd : 设置开机显示
				案例:
					vim /etc/motd
			/etc/os-release:查看发行版 版本号
/home 普通用户的主目录
/media 可卸载存储介质挂载点
/mnt mount文件系统临时挂载点
/opt 应用程序包
/proc: 系统内存的映射目录,提供内核与进程信息
	/proc/meminfo:系统内存信息
	/proc/cpuinfo:关于处理器的信息 例如 类型,厂家,型号,性能等
	/proc/loadavg:系统负载信息 uptime结果
	/proc/mounts:已加载的文件系统列表
/root 特权用户(管理员)目录
/run 存放的是组件运行时所需要的文件[文件夹]
/srv 存放服务相关的数据
/sys 虚拟文件系统,记录核心系统的硬件信息
/tmp 存放临时文件
/usr 存放用户应用程序
/var 存放运行时内容会发生变化的文件 例如 日志
	/var/log:记录系统及软件运行信息
	/var/log/messages:系统级别日志文件
	/var/log/secure:用户登录信息的日志文件
	/var/log/dmesg:记录硬件信息加载情况(日志文件)

date指令简介

# 查看日期 date '+参数'
# 查看服务器的时间
案例:
[root@bai /]# date
2023年 10月 23日 星期一 11:38:48 CST
# 日期说明
	一个日期包含: 年 月 日 星期 小时 分钟 秒 毫秒 纳秒 时区
# 日期查看参数说明
	%F 只显示当前年月日(2023-10-23)
	%X 只显示当前时间的时分秒(17时50分20秒)
	%c 直接显示日期与时间(年月日 星期 时分秒)
	%x 直接显示日期(年月日)
	%T 显示时分秒 HH:MM:SS [24小时进制]
	%r 显示时分秒 [12小时进制]
# 提取日期属性
	%Y 完整的年份(四位的年份)(2023 2020)
	%y 年份的末两位(2023--->23 2020 ---> 20)
	%m 月份
	%d 日(月份中的日)
	%H 小时(24进制的小时)
	%M 分钟(00 ~ 59)
	%S: 秒
	%p: 显示本地 AM PM
# 其他日期属性
	%Z 显示时区
	%w 一周中的第几天(0 ~ 6) 注意 星期日 0
	%a 星期几(简写,比如 星期一显示一)
	%A 星期几(全称)
	%b 月份(简写)
	%B 月份(全称)
	%s 从1970年1月1日0时0分0秒 到现在 过了多少秒
案例:
# 展示当前系统时间 格式 YYYY-mm-dd HH:MM:SS
[root@bai /]# date '+%Y-%m-%d %H:%M:%S'
2023-10-23 11:54:53

文件管理

文件类型(了解)
# 查看指定路径下(目录)文件类型
	ls -l -d 目录
	或者
	ll -d 目录
# 文件类型
	- 普通文件(文本文件,二进制文件,压缩文件,音频,视频.....)
	l 即符号链接文件 又称为软连接(快捷方式)[浅蓝色]
	d 目录文件[浅蓝色]
	b 设备文件[类似于硬盘 U盘]
	c 设备文件[字符设备文件 比如我们的 打印机]
	s 即套字文件 用于实现两个进程之间进行通信
	p 管道文件
	. 隐藏文件
案例1:
-- 查看下列文件类型,能找出几种?
	[root@bai /]# ll -d /etc/hosts
	-rw-r--r--. 1 root root 158 6月 7 2013 /etc/hosts # - 开头 属于普通文件
	[root@bai /]# ll -d /bin/ls
	-rwxr-xr-x. 1 root root 117672 4月 11 2018 /bin/ls # -开头 属于普通文件
补充:
一次性查看好多文件(文件夹)
	ls -l -d 目录1 目录2 ....
目录切换
cd 指令 ------ 目录切换
	例如 cd / 切换到根目录下
		cd /etc 切换到etc目录下
# 切换到当前目录(原地踏步)
	cd .
# 切换到当前目录的上一层目录
	cd ..
# 直接回到家目录
	cd 或者 cd ~
# 回到上一次的目录
	cd -
例如:
	cd / # 回到根目录下
	cd /etc # 切换到 /etc 目录下
	cd - # 回到根目录[回到上一次的目录]
# 去到指定目录
	cd 目录 #目录可以是相对路径 也可以是绝对路径
		[root@bai /]# cd / # 切换到根目录
		[root@bai /]# cd /etc # 切换到 etc 目录下
		[root@bai etc]# pwd # 查看当前目录
		/etc
		[root@bai etc]# cd dhcp # 切换到当前目录下的 dhcp文件夹
		[root@bai dhcp]# cd .. # 回到上一层目录
		[root@bai etc]# cd ./dhcp # 切换到当前目录下的 dhcp文件夹
		[root@bai dhcp]# cd # 直接切换到当前用户的家目录
		[root@bai ~]# cd / # 切换回根目录 ~ 也是 家目录的标识
		[root@bai /]# cd ~ # 直接切换到当前用户的家目录[root账户在 /root 目录下,其他用户在 /home目录下]
		[root@bai ~]# cd - # 切换到上一次的工作目录
文件夹/文件的创建
文件夹的创建
# 创建一个文件夹
mkdir 可选参数 文件夹名字[包含路径]
例如:
[root@bai /]# mkdir /abc
等价于
[root@bai /]# mkdir abc
注意:
1.若未添加路径描述,默认在当前目录下
2. mkdir 文件夹 语法特点是:只能在已经存在的目录下创建文件夹,并且只能创建一层文件夹
```​

```powershell
mkdir -p 文件夹1/文件夹2 # 可以创建多级文件夹 
参数:
-p 递归创建多级文件夹
# 案例
[root@bai /]# mkdir -p /peiqi/xiaopeiqi1
mkdir -v 文件夹 # 显示创建时的详细信息
批量创建文件夹
# 批量创建文件夹
mkdir {文件夹1,文件夹2,文件夹3}
# 案例1 在 根目录下创建 test1 test2 test3 三个文件夹
	[root@bai /]# mkdir {test1,test2,test3}
# 案例2 在 /peiqi 下 创建 xiaopeiqi2 xiaopeiqi3 xiaopeiqi4
	[root@bai /]# mkdir /peiqi/{xiaopeiqi2,xiaopeiqi3,xiaopeiqi4}
# 案例3 在 /abc 文件夹下创建 100个文件夹 file1 file2 file3 ...... file100
	[root@bai /]# mkdir /abc/file{1..100}

		[root@bai /]# mkdir -v /def/peiqi #-v 会显示文件夹的创建过程
		mkdir: 已创建目录 "/def/peiqi"
		[root@bai /]# mkdir -p -v /a/b # 递归创建文件夹并显示具体过程
		mkdir: 已创建目录 "/a"
		mkdir: 已创建目录 "/a/b"
文件的创建
用法: touch [可选参数] 文件
作用:
1. 创建普通文件
	在linux系统中,文件的后缀格式仅仅只是一个名字而已,通过 touch命令创建的都是普通文件
2. 修改文件的时间
# 创建一个文件
# 在 /a/b文件夹下创建 xiaopeiqi1.txt 文件
[root@bai /]# touch /a/b/xiaopeiqi.txt
[root@bai /]# ll /a/b
总用量 0
-rw-r--r--. 1 root root 0 10月 23 15:41 xiaopeiqi.txt
# 创建多个文件·
touch 文件1 文件2 文件3;
# 案例
1. 在当前目录下创建三个文件 a.txt b.txt c.txt
	[root@bai d]# touch a.txt b.txt c.txt
2./c 目录下创建三个文件 a.txt b.txt c.txt
	[root@bai d]# touch /c/a.txt /c/b.txt /c/c.txt
3. 批量创建多个文件
--/abc 文件夹下创建 baizhi1.txt baizhi2.txt baizhi3.txt ..... baizhi100.txt
	[root@bai /]# touch /abc/baizhi{1..100}.txt
	[root@bai /]# ls -la /ab
注意: {1..100} {a..z} 前提是可排序(可比较大小)
4. 创建隐藏文件
	touch /目录/.demo.txt
# 修改文件的创建时间
touch -t # 修改文件的创建时间
案例1:
-- 将 xiaopeiqi.txt 文件创建时间修改为 10月24号9点30分 [默认是系统年份]
[root@baizhi b]# touch -t 10240930 xiaopeiqi.txt
-- 将 xiaopeiqi.txt 文件创建时间修改为 2030-10-23 09:30
	[root@bai b]# touch -t 203010230930 xiaopeiqi.txt
注意: 日期修改范围 年月日时分
# 将a.txt文件的创建时间 充当 文件b 的创建时间
touch -r 文件a 文件b
或者
touch --reference=文件a 文件b
案例2:
-- 创建 yangdd.txt 文件 且创建时间和 xiaopeiqi.txt 的时间一致
	[root@bai b]# touch -r xiaopeiqi.txt yangdd.txt
	[root@bai b]# ll --full-time ./
	总用量 0
	-rw-r--r--. 1 root root 0 2030-10-23 09:30:00.000000000 +0800 xiaopeiqi.txt
	-rw-r--r--. 1 root root 0 2030-10-23 09:30:00.000000000 +0800 yangdd.txt
	[root@bai b]# touch --reference=xiaopeiqi.txt cpx.txt
	[root@bai b]# ll --full-time ./
	总用量 0
	-rw-r--r--. 1 root root 0 2030-10-23 09:30:00.000000000 +0800 cpx.txt
	-rw-r--r--. 1 root root 0 2030-10-23 09:30:00.000000000 +0800 xiaopeiqi.txt
	-rw-r--r--. 1 root root 0 2030-10-23 09:30:00.000000000 +0800 yangdd.txt
文件创建(2)
# 输出语句 ----> 指令运行以后,在操作界面打印内容
	echo 内容 # 将内容在界面中打印展示
[root@bai ~]# echo HelloWorld
HelloWorld
# 借助 echo 完成文件创建,并传输文件内容
语法:
	echo 内容 > 文件
注意:
	1. 若文件不存在,则新建并传输内容
	2. 若文件存在,则新内容覆盖原始文件内容
语法:
	echo 内容 >> 文件
注意:
	1. 若文件不存在,则新建并传输内容
	2. 若文件存在,则新内容追加在原始内容之后
文件拷贝(复制)
用法: cp [可选参数] 源文件 目标文件
参数:
	-r 递归式复制目录 即复制目录下所有的子目录和文件
	-d 复制的时候保持软链接(快捷方式)
	-p 等价于 --preserve=模式,所有权,时间戳,复制文件时保持源文件的权限,时间属性[完美复刻]
	-a 等价于 -pdr
	-i --interactive 覆盖前询问提示(生成的文件和当前目录下已经存在的文件冲突)
# 1. 复制普通文件
	cp 文件1 文件2 # 复制一份文件1,生成文件2
# 2. 复制整个文件夹
	cp -r 文件夹1 文件夹2 #将文件夹1所有内容复制 生成 文件夹2
# 3. 复制文件并修改生成文件的路径
	cp 目录1/文件1 目录2/文件2 # 将文件1复制到目录2下 若文件2名字缺失 新文件名字与文件1 保持一致
# 4. 覆盖前提示
	cp 文件1 文件2 # 当前目录下已经存在文件2 询问是否覆盖
	等价于
	cp -i 文件1 文件2
# 5. 批量复制多个文件
	cp 文件1 文件2 文件3 文件夹 # 将文件1 文件2 文件3 拷贝到 指定文件夹下

系统指令别名
alias
	系统指令别名
		cp ----- 简写(别名)
		等价
		cp -i ---- 指令完整写法
# 查看指定别名对应的指令
	type -a 别名
		[root@bai b]# type -a ll
		ll 是 `ls -l --color=auto' 的别名
# 设置别名
1. 查看 指定文件夹的 详细信息,隐藏文件,时间戳
	ls -la --full-time 目录
设置别名
	alias 别名='命令'
例如: alias nb='ls -la --full-time'
			[root@bai b]# alias nb='ls -la --full-time'
			[root@bai b]# alias
			alias cp='cp -i'
			alias egrep='egrep --color=auto'
			alias fgrep='fgrep --color=auto'
			alias grep='grep --color=auto'
			alias l.='ls -d .* --color=auto'
			alias ll='ls -l --color=auto'
			alias ls='ls --color=auto'
			alias mv='mv -i'
			alias nb='ls -la --full-time'
			alias rm='rm -i'
			alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
			[root@bai b]# type -a nb
			nb 是 `ls -la --full-time' 的别名
	[root@bai b]# nb /a
	总用量 4
	drwxr-xr-x. 4 root root 61 2023-10-23 16:40:49.133677006 +0800 .
	dr-xr-xr-x. 25 root root 4096 2023-10-23 15:33:58.688504641 +0800 ..
	drwxr-xr-x. 2 root root 148 2023-10-23 16:50:38.988993905 +0800 b
	-rw-r--r--. 1 root root 0 2023-10-23 16:40:09.485522155 +0800 chenpx.txt
	-rw-r--r--. 1 root root 0 2023-10-23 16:40:49.133677006 +0800 cpx.txt
	drwxr-xr-x. 2 root root 130 2023-10-23 17:04:36.027418341 +0800 peiqi
# 取消别名
unalias 别名;
mv指令
mv 命令 就是 move的缩写,作用用于移动文件 或者 重命名文件。
语法
	mv [可选参数] 源文件 目标文件。
参数:
	-i 覆盖前询问[目标目录下已经存在指定文件]
	-f 覆盖前不询问
# 将 /a/cpx.txt 移动到 /def/peiqi 文件夹下 ------> 文件移动
	[root@bai b]# mv /a/cpx.txt /def/peiqi/
# 将 /a/chenpx.txt 移动到 /def/peiqi 文件夹下 并重命名为 demo.txt
	[root@bai peiqi]# mv /a/chenpx.txt /def/peiqi/demo.txt
# 批量移动文件[移动的文件,名字有规律]
	mv /a/b/cpx* /def/peiqi/
# 将 /a/peiqi/ 下的 所有 cpx开头的文件 移动到 /def/peiqi 下 直接覆盖不再询问
	[root@bai peiqi]# mv -f /a/peiqi/cpx* /def/peiqi/
# 将 /a/cpx5.txt到cpx10.txt移动到/a/a1 下
	[root@centos-128 test]# mv -f /a/cpx{5..10}.txt /a/a1
# 移动文件夹
	mv 源文件夹 目标目录
# 将/a 文件夹 移动到 /c文件夹中
	[root@bai peiqi]# mv /a /c/
文件/文件夹删除
rm 命令 就是 remove的含义 删除一个或者多个文件[删除文件夹]
rm [可选参数] 目标文件[]
参数:
	-f 强制删除,不提示确认
	-i 在删除前进行提示确认
	-r 在删除文件夹时使用
	-d 删除空目录
	-I 在删除超过三个文件或者递归删除前要求确认
	-v 详细显示进行的步骤
案例:
[root@bai /]# rm /c/a.txt
rm:是否删除普通空文件 "/c/a.txt"?y
[root@bai /]# rm -f /c/b.txt
[root@bai /]#
[root@bai /]# rm /abc/file100
rm: 无法删除"/abc/file100": 是一个目录
[root@bai /]# rm -r /abc/file100
rm:是否删除目录 "/abc/file100"?y
[root@bai /]# rm -rf /c/a
[root@bai /]#
[root@bai /]# rm -rf /c/d/* ---> 删除d目录下所有内容,但是保留 d文件夹
[root@bai /]# rm -rf /c/d ----> 连同d目录一并删除
[root@bai /]# rm -d /abc/file11 ----> file11 file12 必须是空目录
rm:是否删除目录 "/abc/file11"?y
[root@bai /]# rm -df /abc/file12
[root@bai /]# rm -r -v -f /c
已删除"/c/.你看不见我.txt"
已删除目录:"/c/d"
已删除目录:"/c"
注意:
	rm -rf /* -- 删库跑路 禁用

帮助指令

# man帮助指令
语法: man 指令
	进入man指令以后 按下
	q ---- 退出
	空格(上下方向键) ---- 上下移动

​​

语法: 指令 --help
语法: help 指令 ------> 只能展示内置的指令 指令位于 bin目录 sbin目录
语法: info 指令
从互联网上获取Linux中文文档网站

Linux开关机指令

# 重启
语法: shutdown -r 参数
举例:
	shutdown -r 10 # 10分钟后重启
	shutdown -r 0 # 立刻重启
	shutdown -r now # 立刻重启 ------ 企业级用法
# 关机
语法: shutdown -h 参数
举例:
	shutdown -h 10 #10分钟后关机
	shutdown -h 0 # 立刻关机
	shutdown -h now # 立刻关机 ---- 企业级用法
# 其他指令
	reboot 重启
	poweroff 关机 立刻关闭系统,同时切断电源
	halt 关机 立刻关闭系统,需要手动切断电源
	init 6 切换运行级别为6 此级别代表重启
	init 0 切换运行级别为0 此级别代表关机
	logout 注销退出当前用户
	exit 注销退出当前用户
	ctrl+d 注销退出当前用户

文件查看

cat指令
查看普通文件内容,查看一个文件的全部内容 # 注意文件内容大小
语法:
	cat [参数] 文件
参数:
	-n 显示行号
	-A 包括控制字符(换行符/制表符)   $ ---->换行符
head指令
查看文件内容的前几行 ----> 可以查看大体量文件
语法:
	head 文件 # 默认查看前10行
	head -数字 文件 # 指定查看文件前几行
	或者
	head -n 数字 文件 
tail指令
tail 查看文件内容的尾部
语法:
	tail [可选参数] 文件
	tail -n 文件 # 查看文件后n行信息
参数:
	-f # 一般用于查看动态变化的文件 例如: 日志
	动态查看文件的尾部
	tail -f 文件 # 实时查看文件的后10行信息
	tail -f -n 5 文件 # 实时查看文件的后5行信息
	或者
	tail -5f 文件 
grep指令
grep过滤关键字 ---- 针对文件内容进行过滤(筛选)
[root@bai /]# grep 'root' /etc/passwd # 过滤文件中带有root的行 [精确查找]
注意: 
	'' 可以省略 一般用于区分指令关键字
# 筛选所有以root开头的 行 ^---->以....开头
	[root@bai /]# grep '^root' /etc/passwd
# 筛选所有以 nologin 结尾的行 $ -----> 以......结尾
	[root@bai /]# grep 'nologin$' /etc/passwd
less指令
分页展示
语法:
	less 文件
分页展示以后,指令:
	空格 ----> 翻页
	回车键 ----> 下一行
	方向键 ↑ 方向键 ↓ ------> 上下滚动
	/关键字 ------> 在文件中查找指定的关键字,并高亮展示
	n -----> 搜索时,往下翻
	N -----> 搜索时,往上翻
more指令
分页显示文件内容 ---- 底部会展示文件内容查看进度百分比 看完直接退出
语法:
	more 文件名
分页展示以后,指令:
	空格 -----> 翻页
	回车 -----> 下一行
cut指令
cut --- 在文件中每一行 提取 片段
语法:
	cut [可选参数] [片段区间] 文件
参数
	-c 以字符为单位进行提取
	-d 自定义分隔符 默认以tab为分隔符
	-f 与-d 连用 指定显示的区域
案例:
# 1.提取文件中每一行的第 4 个字符
	[root@bai /]# cut -c 4 /etc/passwd
# 2.提取文件中每一行的 第 4 ~ 7 个字符
	[root@bai /]# cut -c 4-7 /etc/passwd
# 3.提取文件中每一行的前7个字符
	[root@bai /]# cut -c 1-7 /etc/passwd
	或者
	[root@bai /]# cut -c -7 /etc/passwd
# 4.从第10个字符开始,一直到最后 截取文件内容中的每一行
	[root@bai /]# cut -c 10- /etc/passwd
# 5.获取每一行的 第4个字符 第6个字符
	[root@bai /]# cut -c 4,6 /etc/passwd
# 6.以 : 为分隔符切割每行内容 并获取 第一个片段
	[root@bai /]# cut -d : -f 1 /etc/passwd
# 7.以 : 为分隔符切割每行内容 并获取 第 1 ~ 3个片段
	[root@bai /]# cut -d : -f 1-3 /etc/passwd
# 8.以 : 为分隔符切割每行内容 并获取 第5个及以后所有的片段
	[root@bai /]# cut -d : -f 5- /etc/passwd
# 9.以 : 为分隔符切割每行内容 并获取 前5个片段
	[root@bai /]# cut -d : -f -5 /etc/passwd
sort指令
sort 命令将输入的文件内容按照规则排序,然后输出结果
语法:
	sort [选项参数] 文件
参数:
	-b : 忽略前导的空白区域
	-n : 根据字符串数值比较
	-r : 反转
	-u : 去重排序 配合 -c
	-t : 使用指定的分隔符代替空格
	-k 位置1: 在位置1开始排序规则
案例:
# 对文件第一个字符进行排序 默认从小到大
	sort -n /abc/a.txt
# 对文件第一个字符进行排序 降序
	sort -n -r /abc/a.txt
# 对排序的结果去重
	sort -u a.txt
# 指定分隔符号,指定区域进行排序
	sort -n -t "." -k 4 ip.txt
uniq指令
uniq命令可以输出或者忽略文件中的重复行 ---- 经常与 sort 连用
语法:
	uniq [可选参数] 文件
# 去除连续的重复行
语法:
	uniq 文件名
# 结合sort使用
	sort -n a.txt | uniq
# 统计每一行的重复次数 结合 sort使用 先让重复内容连续,然后在使用uniq进行次数统计
	sort -n a.txt | uniq -c
# 只找出文件中的重复行[出现2次及以上] 且 统计次数
	sort -n a.txt | uniq -c -d
# 只找出文件中只出现一次的行,且统计次数
	sort -n a.txt | uniq -c -u
# 查看哪些ip被使用了
	sort -n -t "." -k 4 ip.txt | uniq -c

文件编辑

指令:
	vi / vim
语法:
	vim 文件 / vi 文件 # 打开文件
注意:
	vim 默认机器是不安装的,需要手动安装这个工具命令
# 安装指令
	yum install vim -y
说明:
	1.通过 yum 软件管理工具 安装命令 vim 且默认是 yes 这个命令要保证机器可以上网
	2.当 vim/vi 打开不存在的文件时 默认会新建文件
文件模式:
1. 工作模式
2. 命令模式
3. 编辑模式
4. 尾行模式
5. 可视模式
1. vim 文件 # 进入命令模式 只能查看无法修改文件内容
2. 进入编辑模式
	i #在光标处进入编辑模式
	a #在当前光标后面进入编辑模式
	A #在行尾进入编辑模式
	o(小写字母) #在光标的下一行进入编辑模式
	O(大写字母) #在光标的上一行进入编辑模式
命令模式
光标定位键盘:
	hjkl # h[左] j[下] k[上] l[右]
	0 $ # 0[光标所在行 行首] $[光标所在行 行尾]
	gg # 页首 --- 文本顶端
	G 或者 shift+g # 页尾 ---- 文本底部
	3G # 进入第3行 4G[进入第4行]
	/关键词 #查找字符 n[下一个] N[上一个]
命令模式下的文本编辑
	yy #复制当前行
	p #粘贴 ----- 粘贴到本行的下一行
	3yy 5yy #从光标处开始复制3行 或者 复制 5行
	ygg # 从当前光标复制到页首
	yG # 从当前光标复制到页尾
	dd  # 删除一行[删除光标所在行]
	3dd #从光标开始删除3行
	dgg #从光标处删除到页首
	dG #从光标处删除到页尾
	d^ #删除当前光标所在行之前的内容
	P[大写字母] # 粘贴到本行的上一行
	x #删除光标所在处的字符
	D #从光标处删除到行尾
	u #撤销
	r #可以用于修改光标处的字符
尾行模式(底线模式)
	shift+: 或者 : # 由命令模式进入尾行模式
	:3 # 进入第3行
	:w # 保存
	:q # 退出
	:wq #保存并退出
	:q! #强制退出不保存
	:wq! #强制保存并退出
	:set nu # 设置行号
	:set nonu # 取消行号
	:set list #显示控制字符[可以筛选行内容末尾有空格的 行数据]
进入其他模式
#批量操作文件内容时
	ctrl+v #进入可视块模式
	shift+v #进入可视行模式
查找替换
语法:
	:s /原内容/新内容/ # 将光标处 的原内容替换为新内容
	:3 s/原内容/新内容/ # 替换指定行[替换第3行的内容]
	:1,3 s/原内容/新内容/ # 替换第 1 ~ 3行的内容
	:% s/原内容/新内容/ # 替换所有行[只会替换每一行中第一个原内容]
	:% s/原内容/新内容/g # 替换行内所有的关键字
文件基本信息
语法: 
	stat 文件
详细的展示文件时间:
	访问时间
	修改时间 ----- 修改内容
	改变时间 ----- 修改文件属性,例如 权限 名字

Linux用户管理

root的权限:
	安装Centos时,需要设置root账户的管理员密码, root就相当于是超级用户,拥有最高的系统所有权,能够管理系统的各项功能 
	比如:
	添加普通用户/删除普通用户 启动/关闭进程 开启/禁用硬件设备....
	root权限必须很好的去把握 否则一个错误的指令可能会摧毁系统
root
	UID 好比身份证号 root用户的UID是 0
	GID 好比家庭编号(户口本编号) root 用户的GID 是 0
普通用户
	UID 从 1000 开始 由 超级管理员创建 -----> 任何一个用户在创建时,都会在系统中创建一个同名的组[主属组]
	GID
虚拟用户(系统用户)
	UID 1 ~ 999
/etc/passwd
用户组group
为了方便管理同一组的用户。 ---- GID 是组与组之间的区别
	|-假设一个公司有多个部门,每个部门有很多员工。
	|- 可以对技术部门设置部门内的权限---- 可以访问公司的数据库
	|- 员工可以独立赋予权限
用户和组的关系
	1. 一对一 一个用户可以存在一个组里,组里就一个成员
	2. 一对多 一个用户可以加入多个组
	3. 多对一 多个用户可以在一个组中,这些用户和组有相同的权限
	4. 多对多 多个用户存在多个组中
Linux的一大特性
多用户,多任务
所谓多用户多任务是指同一时间,有多个用户登录同一个系统执行不同的任务 ---- 互不影响
为了保证多用户,多任务正常执行,不出问题 ----- 设置不同的权限 Linux就是通过权限划分来管理实现多用户 多任务。

用户管理

用户相关的信息 ------ /etc/passwd
组相关的信息 ------ /etc/group
用户组
# 创建组
	groupadd [可选参数] 组名 # 未指定gid时 默认从1000开始 依次递增 [从当前最大值开始进行递增]
# 创建组并制定gid
	groupadd 组名 -g 组id
# 修改组
	groupmod [参数] 组名
参数:
	-g : 修改组id ---------> id值从 1000 开始
	-n : 修改组名
# 删除组
	groupdel 组名

案例:
# 创建 test 组
	[root@bai abc]# groupadd test
# 创建 demo组 并设定 gid
	[root@bai abc]# groupadd demo -g 1005
# 将 test 的gid 修改为 1003
	[root@bai abc]# groupmod -g 1003 test
语法:
	groupmod -g 新的gid 组名
# 将test的名字修改为 demo
	[root@bai abc]# groupmod -n demo test
语法:
	groupmod -n 新组名 原组名
# 删除 hr 组
	[root@bai abc]# groupdel hr
语法:
	groupdel 组名

删除组的注意事项:
	1.用户的主属组不能删除 ------ 创建用户时,会自动分配主属组[且主属组与用户同名]
	2.若组内存在用户,该组不可删除
/etc/group
```​




```powershell
# 展示系统中所有组名
	cut -d ":" -f 1 /etc/group
# 展示系统中所有组名 + gid
	cut -d ":" -f 1,3 /etc/group
用户管理
	/etc/passwd
		shell的解释器版本
		/bin/sh -- 默认
		/bin/bash --- 默认
		/sbin/nologin -- 虚拟用户[系统用户]   无法登陆,切换
		/dash 	ubuntu
		/csh 	unix
		/tsh 	unix
1. 系统上的每个进程(每个运行的程序) 都是作为 系统用户 运行的
2. 每个文件是由一个特定用户拥有
3. 访问文件和文件夹 受到用户限制

​​

用户创建
语法:
	useradd 用户名; # 创建用户
特点:
	1.新建用户的同时,会自动构建一个所属组 --- 组名和用户名一致 gid 自动增长
	2. /home 目录下 ----> 用户的家目录 每创建一个用户 都会在 /home下创建对应的家目录
查看用户密码
	/etc/shadow
# 创建用户 带参数
# 创建用户 user03 并制定id 为 1010
语法:
	useradd user03 -u 1010
语法:
# 创建用户并指定shell
语法:
	useradd 用户名 -s /sbin/nologin
# 创建用户并指定 附属组
语法:
	useradd 用户名 -G 组名 # 附属组必须事先存在
案例:
	[root@bai /]# useradd user06 -G user05
	[root@bai /]# id user06
	uid=1013(user06) gid=1013(user06) 组=1013(user06),1012(user05)
# 创建用户 并指定 主属组
语法:
	useradd 用户名 -g 主属组的id
参数:
	-c : 创建用户时,备注文字[保存在 passwd的备注栏中]
案例:
	[root@bai ~]# useradd user10 -c 它是一个测试用户
	28 user10:x:1016:1016:它是一个测试用户:/home/user10:/bin/bash
参数:
	-d : 指定用户登录时的起始目录
案例:
	[root@bai ~]# useradd user11 -d /home/peiqi  # 将其他用户的家目录当做自己的 --- 会导致命令提示符消失
	useradd:用户“user11”已存在
参数:
	-e : 指定账号的到期时间
案例:
	[root@bai ~]# useradd user13 -c user13能用到2023年10月27号 -e '2023-10-27'
参数:
	-f : 缓冲天数 是指密码过期后多少天关闭该账号
	-m: 自动建立用户的登录目录[默认就是家目录]
	-M: 不要自动建立用户的登录目录
	-r: 创建系统账户
	-D: 参数用来修改配置文件 /etc/default/useradd 文件的默认值
例如:
	[root@bai ~]# useradd -D -s /bin/bash
#1. 判断用户是否已存在
语法:
	id 用户名
举例:
	[root@bai abc]# id user01
	uid=1001(user01) gid=1005(user01) 组=1005(user01)
		用户标识 		所属组标识 		所属组
	[root@bai abc]# id user02
	id: user02: no such user
#2. 查看当前正在使用的用户
语法:
	whoami
#3.删除用户
语法:
	userdel -r 用户名 # 删除用户的同时,删除对应的家目录
创建用户流程
1. useradd 用户名
	|- 系统会读取 /etc/login.defs(用户定义文件)/etc/default/useradd(用户默认配置文件),借助这两个文件定义的规则 创建新用户
	|-/etc/passwd 和 /etc/group 文件添加 用户信息和组信息 向 /etc/shadow 中添加用户密码,/etc/gshadow 中添加组密码
	|- 根据 /etc/default/useradd 文件中的配置信息创建用户的家目录
	|-/etc/skel 中所有的文件复制到 新用户的家目录中
/etc/login.defs
	14 #QMAIL_DIR Maildir
	15 MAIL_DIR /var/spool/mail 	# 系统发送邮件的位置
	16 #MAIL_FILE .mail
	25 PASS_MAX_DAYS 99999 			# 密码最长使用天数
	26 PASS_MIN_DAYS 0 				# 密码更换最短时间
	27 PASS_MIN_LEN 5 				# 密码最短长度
	28 PASS_WARN_AGE 7 				# 密码失效前几天 警告
	29
	30 #
	31 # Min/max values for automatic uid selection in useradd
	32 #
	33 UID_MIN 1000 				# 新建普通用户最小的 uid
	34 UID_MAX 60000 				# 新建普通用户最大的 uid
	35 # System accounts
	36 SYS_UID_MIN 201 				# 新建系统用户 最小的 uid
	37 SYS_UID_MAX 999 				# 新建系统用户最大的 uid
	38
	39 #
	40 # Min/max values for automatic gid selection in groupadd
	41 #
	42 GID_MIN 1000 				# 新建普通用户 最小的 gid
	43 GID_MAX 60000 				# 新建普通用户 最大的 gid
	44 # System accounts
	45 SYS_GID_MIN 201 				# 新建系统用户最小的 gid
	46 SYS_GID_MAX 999 				# 最大的gid
	60 CREATE_HOME yes 				# 是否自动创建家目录
	61
	62 # The permission mask is initialized to this value. If not specified,
	63 # the permission mask will be initialized to 022.
	64 UMASK 077 					# 默认的权限掩码
	65
	66 # This enables userdel to remove user groups if no members exist.
	67 #
	68 USERGROUPS_ENAB yes
	69
	70 # Use SHA512 to encrypt password.
	71 ENCRYPT_METHOD SHA512 		# 密码加密算法
	[root@bai ~]# cat -n /etc/default/useradd
	1 # useradd defaults file
	2 GROUP=100
	3 HOME=/home 					# 在 /home 目录下 创建用户的家目录
	4 INACTIVE=-1 					# 开启用户过期
	5 EXPIRE=
	6 SHELL=/bin/bash 				# 新用户默认的解释器
	7 SKEL=/etc/skel 				# 用户环境变量文件的存放目录
	8 CREATE_MAIL_SPOOL=yes
	9
用户密码
# root账户可以给其他用户设置密码 普通用户设置密码以后才可以进行登录
语法:
	passwd 用户名
案例:
	[root@bai abc]# passwd user02
	更改用户 user02 的密码 。
	新的 密码:
	无效的密码: 密码少于 8 个字符
	重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
# root账户重置自己的密码
语法:
	passwd
案例:
	[root@bai abc]# passwd
	更改用户 root 的密码 。
	新的 密码:
	无效的密码: 密码少于 8 个字符
	重新输入新的 密码:
	passwd:所有的身份验证令牌已经成功更新。
注意:
#普通用户修改自己的密码
	1. 需要提供原密码
	2. 新密码必须遵守规范(包含大小写字母 不能出现单词 必须包含特殊符号 @ # $ % 数字 长度不低于8)
	3. 限定修改次数

#passwd的实际应用
#设置 user15的密码: 7天内用户不得修改密码 60天不能改 临近过期前10天通知用户 过期30天以后禁止用
户登录
案例:
	[root@bai ~]# passwd user15 -n 7 -x 60 -w 10 -i 30
	[root@bai ~]# passwd -S user15   # 查看用户密码的状态
user15 PS 2023-10-26 7 60 10 30 (密码已设置,使用 SHA512 算法。)
参数说明:
	-n : 至少多少天不可修改密码
	-x : 最多多少天不能修改
	-w : 过期前多少天通知用户
	-i : 过期多少天禁止用户登录
# 批量更新密码
语法:
	chpasswd
案例:
	[root@bai ~]# chpasswd ------》 root用户可以使用
	user03:111
	user04:222
操作结束 按 ctrl+d 保存退出

# 切换用户
方式一:
	su 用户名
# 直接切换,没有完全切换环境变量
案例:
	[root@bai ~]# su gaosc
	[gaosc@bai root]$ env|egrep "USER|MAIL|PWD|LOGNAME"
	USER=gaosc
	MAIL=/var/spool/mail/root
	PWD=/root
	LOGNAME=gaosc
方式二:
	su - 用户名
案例:
	[root@bai ~]# su - gao
	上一次登录:四 10月 26 09:46:18 CST 2023pts/0 上
	[gao@bai ~]$ env|egrep "USER|MAIL|PWD|LOGNAME"
	USER=gao
	MAIL=/var/spool/mail/gao
	PWD=/home/gao
	LOGNAME=gao
	[gao@bai ~]$ logout
注意:
	root 切换其他普通用户 直接切换
	普通用户 切换回 root 需要管理员密码
用户操作
# 修改用户名 -----> 只修改用户名,其他(uid gid 所属组)不变
语法:
	usermod -l 新名字 原名
案例:
	[root@bai ~]# usermod -l user666 user02
	[root@bai ~]# id user02
	id: user02: no such user
	[root@bai ~]# id user666
	uid=1002(user666) gid=1006(user02) 组=1006(user02)
# 修改 gid
语法:
	usermod 用户名 -g 新的gid # 新的gid必须事先存在 更换主属组
# 修改uid
语法:
	usermod -u 新的uid 用户
案例:
	[root@bai ~]# usermod -u 1003 user03
# 修改用户登录的shell
语法:
	usermod -s 登录方式 用户名
案例:
	[root@bai ~]# usermod -s /sbin/nologin user03
# 修改用户的家目录
语法:
	usermod 用户名 -d 指定的家目录
提权
不同用户,可以访问的文件范围,所拥有的权限都不相同。
例如: 群主(root) 管理系统工作量太大时,可以设置管理员 (普通用户 ---[提权 sudo]--- 管理员)
配置sudo 目的在于 让运维干活方便 权限把控,同时又不威胁系统安全

​​


如何恢复命令提示符
1. 确保 /home 目录下存在正确的用户家目录[若不存在,就新建]
2. 登录 root 账户 然后复制初始化系统文件
	cp /etc/skel/.bash* /home/家目录/
案例:
	[root@baii ~]# mkdir -p /home/user15
	[root@baii ~]# cp /etc/skel/.bash* /home/user15/
whoami相关指令
1.
语法:
	whoami # 显示当前终端登录的用户
案例:
	sh-4.2# whoami
	root
2. 
语法:
	w 指令 #显示当前已经登录系统的用户信息
案例:
	# sh-4.2 代表 shell解释器的版本为 sh
	sh-4.2# w
	15:39:32 up 1 day, 5:55, 2 users, load average: 0.00, 0.01, 0.05
	USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
	gaosc tty1 15:39 12.00s 0.00s 0.00s -bash
	root pts/0 192.168.127.1 09:38 4.00s 0.02s 0.01s w
# 展示结果解析
	1. 显示的是系统时间,系统从启动到运行的时间,系统运行中的用户数量和平均负载
	2. 第二行信息
				user: 用户名
				TTY: 用户使用终端号
				FROM:标识用户从哪来 [终端所在机器的 ip地址]
				LOGIN@ : 登录系统的时间
				IDLE: 代表终端空闲时间
				JCPU: 该终端所有进行以及子进程使用系统的总时间
				PCPU: 活动进程使用系统的时间
				WHAT: 用户执行的进程名称
3.
语法:
	who ----- 等同于 w 的简化版
案例:
	[root@bai ~]# who
	gaosc tty1 2023-10-26 15:39
	root pts/0 2023-10-26 09:38 (192.168.127.1)
4. last、lastlog 命令查看当前机器所有用户最近的登录信息
案例:
# last命令显示已登录的用户列表和登录时间
[root@centos-128 ~]# last
root     pts/0        192.168.240.1    Thu Oct 26 18:42   still logged in
root     pts/0        192.168.240.1    Thu Oct 26 17:23 - 18:41  (01:18)
root     pts/0        192.168.240.1    Thu Oct 26 17:23 - 17:23  (00:00)
root     pts/0        192.168.240.1    Thu Oct 26 08:29 - 17:22  (08:53)
# lastlog 命令显示当前机器所有用户最近的登录信息
[root@bai ~]# lastlog
户名           端口     来自             最后登陆时间
root             pts/0    192.168.240.1    四 10月 26 18:42:16 +0800 2023
bin                                        **从未登录过**
baizhi           pts/0                     四 10月 26 14:03:28 +0800 2023
xiaozhang                                  **从未登录过**
xiaoli                                     **从未登录过**
xiaowang                                   **从未登录过**
demo                                       **从未登录过**
user1            pts/0                     四 10月 26 18:48:19 +0800 2023
user2                                      **从未登录过**
user3                                      **从未登录过**

组成员管理

注意:
	只针对已存在的用户

# 给组添加账户
语法:
	gpasswd -a 用户 组名
案例:
	[root@bai ~]# gpasswd -a user04 yangdd
	正在将用户“user04”加入到“yangdd”组中
用户 有 自己的 所属组 ----> 主组 gid
用户 后续可以加入其他组 ----> 附属组
# 给组添加多个用户
	gpasswd -M 用户1,用户2,用户3 组名;
案例:
	[root@bai ~]# gpasswd -M gao,user03,user666 yangdd
	[root@bai ~]# id gao
	uid=1000(gao) gid=1000(gao) 组=1000(gao),1003(yangdd)
	[root@bai ~]# id user03
	uid=1003(user03) gid=1010(user03) 组=1010(user03),1003(yangdd)
							主属组id       主属组 		附属组
# 从组中删除用户
	gpasswd -d 用户名 组名
案例:
	[root@bai ~]# gpasswd -d gaosc yangdd # 无法从主属组 中移除 当前用户
	正在将用户“gaosc”从“yangdd”组中删除
	[root@bai ~]# id gao
	uid=1000(gao) gid=1000(gao) 组=1000(gao)

权限控制

Linux文件权限

[root@bai abc]# ls -la /abc
总用量 28
drwxr-xr-x. 3 root root 109 10月 26 16:51 .
dr-xr-xr-x. 23 root root 4096 10月 24 10:40 ..
-rw-r--r--. 1 root root 72 10月 26 16:46 a.txt
-rw-r--r--. 1 root root 419 10月 24 17:59 b.txt
-rw-r--r--. 1 root root 68 10月 25 10:15 demo.txt
-rw-r--r--. 1 root root 150 10月 25 09:50 file13.txt
drwxr-xr-x. 2 root root 6 10月 23 15:29 file99
-rw-r--r--. 1 root root 11 10月 24 14:34 filetxt
-rw-r--r--. 1 root root 92 10月 26 16:51 ip.txt

文件
	读 r ------ > cat/less/more/sort/head/tail等查看文件内容的指令
	写 w -----> vim echo vi 等编辑指令
	执行 x -----> 指令[文件系统中鼠标双击]
文件夹
	读 r ----> ls 列出此目录下的所有文件
	写 w ----> 可以在目录下新建文件,删除文件,cp mv
	执行 x -----> cd 目录
#如何知道我和文件之间的权限
1. 明确身份 [属主 属组 其他人]
2. 文件属于你本人 属于你们组 其他人
3. 查看权限码 [r w x -]
#数字与权限之间的对应关系:
r ----- 4
w ----- 2
x ----- 1
a.txt的对外权限
		-rw-r--r--
		或者
		644
#注意 : 
	权限控制的指令测试,使用其他用户

权限设置

chmod : 为文件或者文件夹 设置访问权限
chown : 改变文件或者文件夹的 属主 属组
更改文件的属主(所有者) 属组(所属组)
chown指令
# 修改文件的属组 属主
语法:
	chown 用户 文件名 ---- 修改属主
	chown :组 文件名 ---- 修改属组
	chown 用户:属组 文件名 --- 修改属主、属组
	chown 用户 文件夹 --- 修改文件夹的属主[对其内部的文件,子文件夹没有影响]
	chown -R 用户 文件夹 ---- 递归修改
参数:
	-R 递归处理所有的文件以及子文件夹
	-v 为处理的所有文件显示诊断信息
1.修改文件属主[属组]
语法:
	chown 用户名 文件
	chown [可选参数] 用户名 文件夹
	chown :组名 文件
2.同时修改属主和属组
chown [-R -v] 用户:组 文件[]
chmod指令
chmod 命令主要用来变更文件或者目录的权限。
在UNIX系统中,文件或者目录的控制
读
写
执行
注意: 若权限修改针对的是软链接(快捷方式)------> 受影响的是文件自身

# 设置文件的属主可读
	chmod u+r 文件
# 设置文件的属组可读
	chmod g+r 文件
# 设置文件的其他人可读
	chmod o+r 文件
	chmod o=r 文件 # 将其他人对文件的操作 设定为 可读[不可写 不可执行]
# 设置文件的所有人可读
	chmod ugo+r 文件
或者
	chmod a+r 文件
# 文件的属主、属组可写 其他人不可写
	chmod ug+w,o-w 文件
# 文件的属主可以执行
	chmod u+x 文件
# 文件的属主增加可执行,属组增加可读,其他人取消执行权限
	chmod u+x,g+r,o-x 文件
# 设置文件的所有人都可读可写可执行
	chmod a+rwx 文件
# 将属主的权限设定为 可读可写可执行 属组权限设定为可读可执行 其他人设定为可读可执行
	chmod 755 a.txt
# 属主[可读可写] 属组[可读] 其他人[可读]
	chmod 644 a.txt
# 所有人都无权限
	chmod 0 a.txt
# 属主是0权限 属组是可读可写 其他人是 可读可执行
	chmod 65 a.txt 等价于 chmod 065 a.txt
# 属主是0权限 属组是0权限 其他人是 可读
	chmod 4 a.txt 等价于 chmod 004 a.txt

注意:
使用数字设定权限时,不要与 ugo 连用
4 2 1
r w x
组合
0 无权限
1 可执行
2 可写
4 可读
3 可写可执行
5 可读可执行
6 可读可写
7 可读可写可执行 4+2

# 仅对文件夹进行权限设置
	chmod 权限 文件夹
# 对文件夹及内部子目录,内部文件 统一设定权限
	chmod -R 权限 文件夹
chgrp指令
1. chgrp 命令用来改变文件或者目录 的 属组
2. chgrp 命令用来改变指定文件 的属组
其中 组名 可以使用 gid[用户组的id] 也可以是 组名

语法:
	chgrp [可选参数] 组 文件[文件夹]
参数:
	-c : 效果类似于 -v 只汇报更改的部分
	-v : 汇报所有内容[包含未变的 更改的]
	-h : 只对符号链接[快捷方式的软链接]的文件进行修改
	-R : 递归处理[将指定目录及子目录一并处理]
	-f : 不显示错误信息
umask指令
1. umask 命令用来限制新文件权限 ----- 权限掩码 也称之为 遮罩码 , 防止 文件或者目录 创建的时候
权限过大
2. 对于文件[文件夹]
文件 777[包含可执行文件] 666[普通文件]
目录 777
3. 当新文件被创建时,其最初的权限是由 umask 决定
4. 用户每次注册进入系统时,umask命令都会被执行 并自动设置掩码 改变 新建文件初始的权限
#记录umask默认配置的文件

/etc/profile

	59 if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
	60 umask 002
	61 else
	62 umask 022
	63 fi
	64
umask 值 含义是 Linux文件默认属性需要减掉的权限
# linux普通文件最大的默认权限值为 666 目录最带的默认权限值 777
	新建的文件或者文件夹 削减 权限
	linux系统预置的umask值为 022 那么用户新建普通文件时 a.txt
		   666
		-  022
	  ----------
		   644 ----> -rw-r--r--
umask 的语法参数
	-p : 以umask开头 以数字形式显示 权限掩码
	-S : 以字符形式显示 权限掩码
案例:
	# 查看root账户的 umask
	[root@bai ~]# umask
	0022
解析:
	0 提权参数
	0 属主掩码
	2 属组掩码
	2 其他人掩码
案例:
	# 以字母形式显示权限掩码
	[root@bai ~]# umask -S
	u=rwx,g=rx,o=rx
解析:
	u=rwx 新建文件时 属主的权限 rwx
	g=rx 新建文件时 属组的权限 rx
	o=rx 新建文件时 其他人的权限 rx
案例:
	# 以数字形式展示 umask
	[root@bai abc]# umask -p
	umask 0022
# 基于root 账户 创建 /abc/def 文件夹
mkdir /abc/def # def文件夹初始权限 755 777-022=755 drwxr-xr-x
drwxr-xr-x. 2 root root 6 10月 27 16:28 def
# 基于root 账户 创建 /abc/oppo.txt
touch /abc/oppo.txt # oppo.txt文件初始权限 644 普通文件= 666 - 022 = 644 -rw-r--r--
-rw-r--r--. 1 root root 0 10月 27 16:29 oppo.txt
# 基于root 账户 创建 /bin/dd
[root@bai abc]# touch /bin/dd
[root@bai abc]# ls -l /bin/dd # 777-022=755 -rwxr-xr-x
-rwxr-xr-x. 1 root root 74896 10月 27 17:16 /bin/dd
# 修改当前用户的umask值
umask 新值 # 只是临时修改,用户重新登录以后 umask 会恢复默认值
# 修改用户的 umask 权限掩码以后 新建文件 采用的 文件[最大权限 777] 目录[最大权限 777]
chattr指令
chattr 命令用于更改文件的扩展属性 比 chmod 更改权限 更底层
语法:
	chattr [可选参数] 文件
语法参数:
	-R : 递归更改目录属性
	-V : 显示命令的执行过程
模式:
	+ : 增加模式
	- : 移除模式
	= : 指定模式
	A : 不让系统修改文件最后访问时间
	a : 只能向文件中添加数据,不得删除更改内容
	i : 文件不能被删除,改名,修改内容

案例1:
	# 给 d.txt 增加 i 模式
	[root@bai file]# chattr +i d.txt
	[root@bai file]# rm -f d.txt # 删除失败
	# 查看 d.txt 的模式
	[root@bai file]# lsattr d.txt
	-------i------ d.txt
	# 取消 i 模式
	[root@bai file]# chattr -i d.txt
	# 查看 d.txt 的模式
	[root@bai file]# lsattr d.txt
	------------- d.txt
案例2:
	# 演示 a 模式 : 只能向文件中增加内容 不得更改
	[root@bai file]# touch a.txt
	[root@bai file]# chattr +a a.txt
	[root@bai file]# echo "测试数据" > a.txt # 覆盖
	-bash: a.txt: 不允许的操作
	[root@bai file]# echo "测试数据" >> a.txt # 追加
	[root@bai file]# lsattr a.txt
	-----a---------- a.txt
	[root@bai file]# chattr -a a.txt
	[root@bai file]# lsattr a.txt
	---------------- a.txt
	[root@bai file]# echo "测试数据" > a.txt
lsattr指令
lsattr 命令用于查看文件的第二扩展属性(看底层模式) ---- 结合 chattr使用
lsattr 文件 # 查看 chattr 给文件改动的模式
语法:
	lsattr [可选参数] 文件
参数:
	-R : 递归列出目录以及子目录下的 chattr设置的模式 该参数默认存在
	-V :显示程序版本
	-v : 显示文件版本
	-a : 列出目录中的所有文件 包括隐藏文件的属性
	-d : 只列出当前目录的模式 不展示子目录的模式

案例:
	[root@bai user03]# lsattr file1
	----i----------- file1/a.txt
	----i----------- file1/b.txt
	[root@bai user03]# lsattr -d file1
	----i----------- file1
提权补充[高级权限设置]
#高级权限 suid sgid sticky
	suid -----> 提升权限[只针对二进制文件(命令)生效,其他不管用] 	4
	sgid -----> 组继承[只能对目录设置] 						2
	sticky ----> 权限控制 									1
设置特殊权限
# 字符写法
	chmod u+s 文件 #[二进制命令文件] -----> 对某个命令进行提权,不管谁使用该命令,效果都等同于管理员
	chmod u-s 文件
# 数字写法
	chmod 4777 file
	chmod 0777 file
案例:
[root@bai ~]# cat /root/file.txt # root用户可以执行 cat指令
[root@bai ~]# su - user03 # 切换普通用户
上一次登录:一 10月 30 09:51:25 CST 2023pts/0 上
[user03@bai ~]$ cat /root/file.txt # 普通用户无法行驶 cat 指令
cat: /root/file.txt: 权限不够
[user03@bai ~]$ su - root
密码:
上一次登录:一 10月 30 10:01:50 CST 2023pts/0 上
[root@bai ~]# which cat
/bin/cat
[root@bai ~]# chmod u+s /bin/cat # 切换回 root账户 对二进制文件 cat[指令] 提权
[root@baizhi ~]# su - user03
上一次登录:一 10月 30 10:02:59 CST 2023pts/0 上
[user03@bai ~]$ cat /root/file.txt # 提权以后 user03也可以运行该指令
[user03@bai ~]$
# 字符写法
	chmod g+s 目录 # 使某个目录下的文件在创建时,新建文件的所属组继承该目录的所属组
	chmod g-s 目录
例如
	/
		|- bai
			|-abc [属主是 user03 属组是user03]
				|-file.txt [属组 user03]
# 数字写法
	chmod 2777 目录
案例:
[root@bai ~]# cd /home/user03
[root@bai user03]# ll
总用量 0
drwxrwxr-x. 2 user03 user03 19 10月 30 10:19 baizhi # bai目录的属组是 user03
drwxrwxr-x. 2 user03 user03 32 10月 27 17:46 file
drwxr-xr-x. 2 root root 32 10月 27 17:50 file1
-rw-rw-rw-. 1 user03 user03 0 10月 27 18:01 testA.txt
-rw-rw-r--. 1 user03 user03 0 10月 30 09:52 user03.txt
[root@bai user03]# cd bai
[root@bai bai]# ll
总用量 0
-rw-rw-r--. 1 user03 user03 0 10月 30 10:19 a.txt
[root@bai bai]# touch b-root.txt # 切换 root登录 新建文件的属组是 root组
[root@bai bai]# ll
总用量 0
-rw-rw-r--. 1 user03 user03 0 10月 30 10:19 a.txt
-rw-r--r--. 1 root root 0 10月 30 10:20 b-root.txt
[root@bai bai]# chmod g+s /home/user03/bai # 后续无论哪个用户新建的文件 属组都是 user03
[root@bai bai]# touch c-root.txt
[root@bai bai]# ll
总用量 0
-rw-rw-r--. 1 user03 user03 0 10月 30 10:19 a.txt
-rw-r--r--. 1 root root 0 10月 30 10:20 b-root.txt
-rw-r--r--. 1 root user03 0 10月 30 10:21 c-root.txt # 验证
#字符写法
chmod o+t 目录 # 使某个目录下的所有文件 只有创建者和root可以删除 其他不行
chmod o-t
#数字写法
chmod 1777 目录
# sticky 只针对目录有效,对于目录的作用是 当用户在该目录下新建文件或者子目录时,只有自己(属主)和root有权删除
提权区别
sudo : 有针对性的 例如针对某个用户能够以 root 的身份来执行指令
suid : 针对基本所有用户 任何用户在执行 被 suid 权限的程序(指令) 都是以 root 身份执行的
sudo提权细节
visudo
	## Allow root to run any commands anywhere
	root ALL=(ALL) ALL
	gaosc ALL=(ALL) ALL # 任意位置,任意指令 gaosc 都可操作
	user03 NOPASSWD:/bin/mkdir,/bin/rm,/bin/ls /home # user03 在 /home 目录下可以执行 mkdir,rm,ls指令

管道与重定向

重定向
1. 标准输入,标准正确输出,标准错误输出
2. 进程在运行过程中根据需要会打开很多文件,每次打开文件会有一个数字标识,这个数字标识叫做 文件描述符
3. 进程使用文件描述符来管理打开的文件
4. 每一个打开的程序都有自己的文件描述符

	0 : 标准输入(键盘)
	1 : 标准正确输出
	2 : 标准错误输出
	3+ : 进行在执行过程中打开的其他文件
	& : 表示正确错误混合输出
输出重定向
> 覆盖
>> 追加
标准正确输出: 1> 1>> 此处 等价于 > >>
标准错误输出:  2> 2>>
#案例1: 标准正确输出重定向
[root@bai ~]# date
2023年 10月 30日 星期一 14:32:20 CST
[root@bai ~]# date 1> /abc/date.txt # 此时若文件不存在,会新建
[root@bai ~]# cat /abc/date.txt
2023年 10月 30日 星期一 14:34:40 CST
[root@bai ~]# date > /abc/date.txt # > 标准正确输出重定向----覆盖
[root@bai ~]# cat /abc/date.txt
2023年 10月 30日 星期一 14:35:51 CST
[root@bai ~]# date 1>> /abc/date.txt # >> 标准正确输出重定向----追加(换行)
[root@bai ~]# cat /abc/date.txt
2023年 10月 30日 星期一 14:35:51 CST
2023年 10月 30日 星期一 14:36:31 CST
# 标准错误输出重定向
[root@centos-128 /]# ll /bc
ls: 无法访问/bc: 没有那个文件或目录
[root@centos-128 /]# ll /bc 2>> /a/err.txt
[root@centos-128 /]# cat /a/err.txt
ls: 无法访问/bc: 没有那个文件或目录

[root@bai /]# ls /abc /home /qwe 2>> /abc/error.txt # 错误信息输出到 error.txt文件中,正确的在控制台(操作界面)展示

# 正确和错误的都输出到相同位置
[root@bai /]# ls /home /abc /qwe &> /abc/test.txt
#正确的输出到一个文件中 错误的输出到另外一个文件中
[root@bai /]# ls /abc /qwe 1>> /abc/a.txt   2>> /abc/c.txt
								标准正确输出重定向 标准错误输出重定向
#正确的输出到文件中 错误的结果输出到垃圾桶(回收站)[内容不会保留]
# /dev/null 垃圾桶,回收站
[root@bai /]# ls /abc /qwe >> /abc/a.txt 2>> /dev/null
echo
	会将其后输入的内容送往标准输出(打印)
语法:
	echo 内容 >> 文件(脚本)
#案例
[root@bai /]# echo "HelloWorld"
HelloWorld
[root@bai /]# echo "HelloWorld" 1>> /abc/word.txt
[root@bai /]# cat -n /abc/word.txt
1 HelloWorld
输入重定向
标准输入: < 或者 0<
默认情况下,cat命令会接受标准输入设备(键盘)的输入,并显示在控制台(操作界面) 。 可以使用文件来代替键盘作为
输入设备 那么该命令会以指定的文件作为输入设备 将文件中的内容读取并显示到控制台
[root@bai /]# cat /etc/passwd
[root@bai /]# cat < /etc/passwd
解析:
虽然执行结果相同,但是第一行代表是以键盘作为输入设备 而第二行代码 是以 /etc/passwd 文件作为输入设备
将/etc/passwd 作为 cat 的输入 读出 /etc/passwd 的内容
通过输入重定向创建文件
	cat(2) > 文件(3) << 输入源(1)
	cat > 文件 << EOF
		用来创建文件或者脚本时进行使用,并向文件中输入信息,并且输入的任何内容都会被写入文件中
案例:
[root@bai /]# cat > /abc/demo.txt <<EOF
> 床前明月光
> 疑是地上霜
> 举头望明月
> 低头思故乡
> EOF
[root@bai /]# cat /abc/demo.txt
床前明月光
疑是地上霜
举头望明月
低头思故乡
# 首先借助 EOF 将键盘作为输入设备,然后将输入的内容传递给 cat , cat 会将接收的内容 重定向输出到文件中
# 利用重定向建立多行的文件 ---- 脚本创建多行文件
[root@bai /]# cat > create_demo.sh <<EOF
> #!/bin/bash
> ls -la /abc
> EOF
[root@bai /]# ./create_demo.sh
管道
将一个指令的输出,作为另外一个指令的输入
语法: 
	指令1 | 指令2 | 指令3
案例:
# 查找指定目录下符合要求的文件
[root@bai /]# ls /etc | grep 'fire'
firewalld
# 将 /etc/passwd 文件中的用户名按照 UID 进行排序
[root@bai /]# sort -n -t ":" -k 3 /etc/passwd # 以:分隔 将第三列按数字进行排序
# 将 /etc/passwd 文件中的用户名按照UID进行排序 降序展示
[root@bai /]# sort -n -r -t ":" -k 3 /etc/passwd
# 以 : 分隔 将第三列按照字数升序 查看前5行
[root@bai /]# sort -t ":" -n -k 3 /etc/passwd | head -n 5
# 以 : 分隔 将第三列按照字数降序 查看后10行
[root@bai /]# sort -t ":" -n -k 3 /etc/passwd | tail
# 先按照uid升序排列获取后10行,在按照 gid 降序排列展示
[root@bai /]# sort -t ":" -n -k 3 /etc/passwd | tail | sort -t ":" -k 4 -n -r

文件查找

find指令
find命令用来在指定目录下查找文件。
注意:
	任何位于参数之前的字符串都会被当做目录来看待
如果使用该命令,未设置任何参数 ----- find命令在当前目录下查找子目录和子文件,将查找到的子目录和文件进行展示。
用法:
	find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
	find 处理符号链接 要查找的路径 参数 限定条件 执行动作。
语法:
	find 查找目录和文件
	find 路径 -命令参数
	路径作用是告诉find去哪找你要的内容
案例:
# 根据名字 进行全盘检索 /
find 从哪找 名字叫什么
# 获取 /abc 目录下所有的 以.txt结尾的文件
[root@bai /]# find /abc -name "*.txt"
# 在 /abc 下查找 .txt 文件 但是最多找三级目录 /abc 属于一级 /abc/def 属于二级
[root@bai dir1]# find /abc -maxdepth 3 -name "*.txt"
参数:
	1. -P[可以省略] 要查找的路径
	2. -maxdepth 设置最大目录层级
	3. -mindepth 设置最小目录层级
	4. -atime access 按照文件访问的时间进行查找 [单位是 天]
	5. -ctime change 按照文件的改变的状态查找文件[单位是 天]
	6. -mtime motify 按照文件修改motify时间查找[单位是天 最常用]
	7. -name 按照文件名字查找 支持通配符 * ? []
	8. -group 按照文件的所属组查找
	9. -perm 按照文件的权限查找
	10. -size n	按照文件的大小进行查找 其中 n 代表后缀
		b : 代表512位元组的区块[如果用户没有指定后缀,默认就是 b]
		c :表示字节数
		k : 表示KB [1KB=1024字节]
		w : 字 [2字节]
		M : 兆 [10MB=10240KB]
		G :千兆[1G=1024MB]
	11. -type 查找某一类型的文件
		b : 块设备文件
		d : 目录
		c : 字符设备文件
		p : 管道文件
		l : 符号链接
		f :普通文件
		s : socket文件
	12. -user : 按照文件属主查找文件
	13. -path : 配合 -prune 参数排除指定目录
	14. -prune : 使find命令不在指定的目录中查找
	15. -delete : 删除找出的文件
	16. -exec 或者 -ok :  对匹配的文件执行相应的 shell命令
	17. -print  : 将匹配的结果标准输出
	18. !  取反[经常和其他参数连用,表达取反]
	19.  -a  -o  : 取交集  并集  作用类似于  &&   或
案例:
# 从当前目录下 寻找 以  0 - 9 开头的文件
[root@baizhi abc]# find . -name "[0-9]*"  # 将当前目录下所有 0 ~ 9开头的文件和文件夹都检索并展示
# 从当前目录下 寻找 以  0 - 9 开头的文件夹
[root@baizhi abc]# find . -name "[0-9]*" -type d
# 获取所有以 0 ~ 9 开头的文件并删除
[root@baizhi abc]# find . -name "[0-9]*" -type f -delete

##文件内容来自授课老师百知昌哥(笔记需要pdf版本的可以私聊小编)

本文标签: 详解命令Linux