目录
文件操作
1.文件的查找
1.find从磁盘查找
find 路径 操作 []
按文件类型查找
find /etc -type f/d/c/b/l/s/p 按照文件的类型(-type)查找(f、d、c、b、l、s、p都是文件类型)
f(普通文件)、p(管道文件)、d(目录文件)、s(套接字文件)、c(字符设备文件)、b(块设备文件)、l(链接文件)
按文件名查找
例如:从/etc目录找到名字为passwd的文件
find /etc -name "passwd"
其中/etc是路径,-name是查找条件(查找文件名),"passwd"文件名
也可以使用通配符的方式查找文件名
find /etc -name '*.c' 查找/etc目录下所有的以.c结尾的文件
find /etc -name 'pass*' 查找/etc目录下所有的以pass开头的文件
find /etc -name '????' 查找/etc目录下所有的以四个字符组成文件名的文件
按文件的字节大小查找
find 路径 -size n[c(字符)/w(字)/b/k/M/G] (其中n是文件的字节数)
2byte == 1word 512byte == 1b(block块)
对于查找到的文件可执行操作,如改名、删除等
find ~/ -name "hello" -ok rm {}\; 该操作是删除当前目录下名为hello的文件,-ok可以使我们再一次确实是否删除
2.locate从数据查找
locate 路径
locate查找是直接从数据库中查找,而find命令查找则是遍历查找硬盘上的文件,因此locate的查找速度要比find快。
但是由于locate查找是每天更新一次,因此当天所创建的文件locate查找不到。因此find的查找要比locate更加精确。(locate可以通过updatedb或sudo updatedb命令来更新数据库)(/tmp这个临时目录下的文件或目录,利用locate命令是无法查找的)
3.which/whereis专门查找可执行文件
例如:ls、cp、mv、sudo等这些都是可执行文件
which ls 查看ls所在路径,类似于pwd显示当前路径
which是通过 PATH 环境变量到该路径内查找可执行文件
whereis 显示内容比which更详细,查找范围更大
whereis ls whereis是将ls的相关文件都查找出来
CSDN博主「swq123459」的文章讲解了which与whereis的区别
原文链接:https://blog.csdn.net/qq_33826564/article/details/82906115
linux命令分为内部命令和外部命令
内部命令:命令行,通常称为shell,shell内部实现的功能,也就是说不是一个独立的文件,所以which、whereis是找不到的。例如cd alias。。。
外部命令:就是一个独立的可执行文件,可以查找命令
2. 文件的打包(归档)、压缩
1. 打包与解包
tar cvf bao.tar file1 file2 dir1 dir2 将文件file1 file2 目录dir1 dir2打包成bao.tar
tar rf bao.tar filename 将filename文件追加到bao.tar中
tar tf bao.tar 不解包,查看包中文件
tar xvf bao.tar 解包
cvf、rf、tf、xvf中c为创建,v为显示打包,f为文件,r为追加,t为查看,x为解压
2.压缩与解压
gz格式: gzip bao.tar 将bao.tar压缩为gz格式的压缩包
gunzip bao.tar.gz 解压缩
bzip2格式:
bzip2 bao.tar 将bao.tar压缩为bz2格式的压缩包
bunzip2 bao.tar.bz2 解压缩
xz格式:
xz bao.tar 将bao.tar压缩为xz格式的压缩包
unxz bao.tar.xz 解压缩
3.打包并压缩
gz格式
tar czvf bao2.tar.gz file1 file2 dir1 dir2 将文件file1、file2、dir1、dir2打包并压缩为bao2.tar.gz
bz2格式
tar cjvf bao2.tar.bz2 dir group hello passwd 将文件dir、group、hello、passwd打包并压缩为bao2.tar.bz2
xz格式
tar cJvf bao2.tar.xz dir group hello passwd 将文件dir、group、hello、passwd打包并压缩为bao2.tar.xz
以上想要解压解包: tar xcf 压缩包名
查看文件的类型
1.file 文件路径-->格式
2.stat文件路径-->原信息(除了文件名之外的)比ls -l更丰富
3.文件的重定向
1.所谓的重定向就是改变文件的输出或者输入方向
2.当系统用户登录成功,默认三个文件已经打开了,分别是
1.stdin 标准输入
2.stdout 标准输出
3.stderr 标准错误输出
3.三种方式
- 1> 或者> 表示标准输出重定向
- 2> 表示标准错误输出重定向
- 0< 表示标准输入重定向
例如:cat /etc/passwd > file1 将/etc/passwd中数据的标准输出到file1文件
4.管道
| 管道符号,管道有读端和写端,|左边为写管道,右边为读管道
例如:cat file1 | grep a 显示file文件中含有a的数据
cat file1 | grep -i a 显示file文件中含有a的数据,不区分a\A
cat file1 | grep -i -w var 精确显示file文件中含有var单词的数据,不包括第一个单 词中有var三个字母的数据,不区分a\A
cat file1 | grep -i -w -n var 精确显示file文件中含有var单词的数据,不包括第一个单 词中有var三个字母的数据,不区分a\A,显示行号
例如:head -20 /etc/passwd| tail -10 显示文件的第10到20行
grep 筛选文件内容,常用于与管道使用,grep的常用选项
-n 显示行号
-i 不区分大小写
-w 精确筛选
wc 统计文件的行数 单词数 字符数
wc -l filepath 行数
wc -c filepath 字符数
wc -w filepath 单词数
5.用户管理
linux是多用户多任务的操作系统,只有root用户可以创建新用户,以及修改其他用户的密码
可以使用sudo命令临时切换到root身份,即在执行命令期间使用root身份。
创建新用户:
1.sudo useradd 用户名 需要输入密码,密码是登录用户的密码,不是新创建用户的密码(注意使用这种方法创建的用户一穷二白,没有家没有命令行...)
2.sudo adduser 用户名 推荐这种方式,基本上啥都有
指定创建用户密码:
sudo passwd 用户名
切换用户
su 用户名
删除用户
sudo userdel -r 用户名
当成功创建一个用户,用户信息存储在/etc/passwd
例如:zhang:x:1000:1000:zhang,,,:/home/zhang:/bin/bash (用:分割每一个用户信息)
- zhang(用户名)
- x密码占位,之前这里放密码的,现在密码在独立的文件中
- 1000用户的id
- 1000用户的宿组id
- /home/zhang 用户的家目录
- /bin/bash用户的命令行
具体可参考man 5 passwd
用户密码存储/etc/shadow
- 只有root用户有权限查看密码文件,密码文件存储的是加密后的密码
- zhang:$6$9YgsYAVL$ySPHw6hirVsu0GoEyu8YgHl81/xuo2vOd1Rr2VgnICDQAg9JZUNPKFn4jHXfQIiMRTrXEtmZxiRe0lrq2DF650:19541:0:99999:7:::
- 绿色部分就是加密后的密码,所有的加密算法都是不可逆的。只能比对。
- $6$加密算法的id sha512
- $salt$ 盐值,增加加密序列的安全性
每一个用户都有所属组group,默认情况下新建用户的组的组名与用户名同名,组文件/etc/group
1.宿组:每一个用户都要有一个宿组
2.附加组:每一个用户可以在多个附加组
如何改变组:
sudo usermod -a -G zhang 用户名a 将用户名a加入zhang组中,作为用户名a的附加组
实验:
- 首先zhang用户创建了文件hello 文件的默认权限就是664 rw-rw-r--
- hello文件的所属组是zhang
- sudo usermod -a -G zhang xiaohuang 将xiaohuang加入了zhang组
- 创建xiaolv用户 sudo adduser xiaolv
- su xiaolv 尝试去修改hello 会成功吗?
- exit
- su xiaohuang 尝试修改hello 会成功吗
将用户从组中删除
sudo gpasswd -d xiaohuang zhang 将xiaohuang从zhang组中移除
passwd命令
提出问题:密码存在/etc/shadow中,而普通用户对这个文件是没有修改的权限的,那么为什么你能改自己的密码呢?
- which passwd --> /usr/bin/passwd
- 查看权限-rwsr-xr-x 1 root root 59640 11月 29 2022 /usr/bin/passwd
- 看到了一个特别的权限u+s,对于可执行文件如果有s权限,那么执行命令的期间身份临时切换为了文件的拥有者,而/usr/bin/passwd的拥有者是root,所以我们成功修改了密码
- 文件的特殊权限有三个
- u+s 执行命令期间提权的
- g+s 同u+s
- o+t 例如/tmp 限制所有用户对有o+t权限的目录有读写权限,但是仅限于文件拥有者是自己的文件
- g.文件特殊权限
- i.u+s也就是文件拥有者有s权限,对于拥有u+s的可执行文件,在执行此文件的期间,身份临时切换为文件的拥有者
- ii.g+s也就是文件所属组有s权限,对于拥有g+s的可执行文件,在执行此文件的期间,身份临时切换为文件的所属组 4。
- iii.o+t主要针对目录文件,如果一个目录拥有o+t权限,那么所有的用户对此目录都可以增删改查,但是都只能修改删除自己创建的 例如/tmp