5.3 压缩与解压
我们都知道在windows操作系统下,压缩文件的扩展名为.zip、.rar等,在Linux操作系统下,为.tar、.gz、.tar.gz等
5.3.1 压缩
语法:
tar [参数] 打包压缩后的文件名 要打包压缩的文件
- 参数:
-c
:创建新的文件(必选项)-v
:输出文件清单(可选项)-f
:设置压缩包的文件名(必选项)
示例:
tar -cvf test.tar a.java abc.java
5.3.2 解压
语法:
tar [参数] 压缩文件
- 参数:
-x
:取出压缩包中文件中的内容(必选项)-v
:输出文件清单(可选项)-f
:设置要操作的文件名(必选项)-C
:设置解压的路径(可选项),默认解压到压缩包所在的目录
示例:
mkdir hello
tar -xvf test.tar -C ./hello # 解压test.tar压缩包,压缩包中的文件存放到hello文件夹中
注意:./代表是当前目录下的hello目录
5.4 其他命令
5.4.1 关机与重启
shutdown # 1分钟后关机
shutdown -h 10 # 10分钟后关机
shutdown -h now # 立即关机
shutdown now # 立即关机
shutdown -r now # 立即重启
reboot # 立即重启
halt # 立即关机
sync # 把内存中的数据同步到磁盘
5.4.2 查看当前目录
pwd
5.4.3 日期相关命令
1)日期命令
命令:date
- 参数:
- %F:年月日
- %T:时分秒
- %Y:获取年
- %m:获取月
- %d:获取日
- %H:获取小时
- %M:获取分钟
- %S:获取秒
- %s:1970年01月01日到现在的秒数
2)日历命令
语法:
- 参数:
- -1 输出显示当前月(默认)
- -3 输出显示前一个/当前/下一个月
- -s 输出显示星期天作为一周的第一天(默认)
- -m 输出显示星期一作为一周的第一天
- -j 输出显示Julian日历(从一月1号计数为1起,每一天计数加1)
- -y 显示当前日历
查询2021年3月份的日历:
cal 3 2021
查询2021年3月份的日历,并且以周一作为一周的第一天:
cal 3 2021 -m
5.4.4 查看帮助文档
当我们对某个指令不熟悉时,我们可以使用 Linux 提供的帮助指令来了解这个指令的使用方法。
man [命令]
man shutdown # 查看shutdown命令的用法
man tar # 查看tar命令的用法
man ls # 查看ls命令的用法
同时也可以使用help进行帮助文档的查询:
cal --help # 查看cal命令的帮助文档
5.4.5 less命令
less命令与more命令类似,都是用于浏览文件的,不同的是使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动;而且 less 在查看之前不会加载整个文件。在浏览超大型文本文件时具有较高的效率;
语法:
less [参数] 文件
- 参数:
-m
:显示查看的进度百分比-N
:显示每行的行号+/pattern
:在文档中搜索字符串(pattern),并从这一行开始显示-i
:忽略搜索时的大小写
示例:
less -article.txt
[输入参数]
- 输入参数:
- Q:退出less 命令
- w:向上滚动半页
- d:向下滚动半页
- 上光标:向上滚动一行
- 下光标:向下滚动一行
- 空格键:向下滚动一页
- 回车键:向下滚动一行
- [pagedown]: 向下翻动一页
- [pageup]: 向上翻动一页
- G:跳到文件尾部
- g:跳到文件头部
示例2:
less -mNi +/user UserServlet.java
5.4.6 > 指令 和 >> 指令
和>>指令功能一致,不同的是>>的可以追加内容;>只是将命令的结果集写入到文件,并不会产生追加效果;
语法:
ll > info.txt # 将ll命令的结果写入info.txt文件中
cat abc/a.java > test.java # 将abc/a.java里的内容写入info.txt文件中并查看
cal -y > cal.txt
六、用户管理
6.1 用户管理
Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
在Linux中,用户是属于某个组的,创建用户首先得让用户属于某个组
6.1.1 关于用户和组的相关命令
- cat /etc/shadow:密码和登录信息(加密的)
- cat /etc/group:查看组信息
解释:
root:x:0:
组名:x:组ID:
tips:x并无其他特殊含义
- cat /etc/passwd:用户账户信息
解释:
root:x:0:0:root:/root:/bin/bash
用户名:x:用户ID:组ID:该用户的组目录:命令解释程序
6.1.2 添加用户
语法:
useradd 参数 用户名
- 参数:
- -g:用户组,指定用户所属的用户组,如省略该参数,则会建立和新用户名同名的组。
示例1:创建zhangsan用户:
useradd zhangsan # 创建zhangsan用户,默认创建同名组
进入/home目录查看:
示例2:创建lisi用户,属于zhangsan组
useradd lisi -g zhangsan
查看组:]
cat /etc/group
查看用户:
cat /etc/passwd
Tips:发现和zhangsan用户同属于1000组
6.1.3 分配密码
语法:
passwd 用户名
切换zhangsan用户登录:
logout/exit:退出当前用户
Tips:如果使用xshell连接工具会直接退出
修改xshell连接工具参数:
使用whoami可以查看当前登录的用户:
6.1.5 切换登录用户
- 语法:
su 要切换的用户名
- 示例:
su lisi
6.1.4 修改用户
语法:
usermod -l 新登录名 原登录名
示例:
usermod -l zs zhangsan
修改用户名时,必须当前用户处于退出登录状态,如果正在登录的用户则会出现如下信息:
usermod: user zhangsan is currently used by process 进程号
注意:修改了用户名之后,用户所属的组名以及家目录不变
6.1.5 删除用户
语法:
userdel 用户名
示例1:删除用户wangwu,保留家目录
useradd wangwu # 创建wangwu账号,wangwu组,wangwu家目录
userdel wangwu # 删除wangwu账号,wangwu组(家目录还在)
默认情况下,删除用户时,用户所在的同名的组也会被删除;所以查看/etc/group时,发现wagnwu组不见了,但wangwu的家目录还在,可以删除家目录:
rm -rf wangwu
Tips:一般来说,我们判断当前linux有多少用户直接查看home下的家目录,因此一般删除用户时,会顺带删除家目录;
示例2:删除用户lisi,以及家目录
Tisp:lisi是属于zhangsan组的,用户和组不同名,不会删除组
userdel -r lisi
查看用户信息:
cat /etc/passwd
发现lisi用户不见了
查看组信息:
cat /etc/group
发现zhangsan组还在
示例3:删除zs用户,以及家目录
userdel -r zs
Tips:即使家目录的名称不是叫zs也会被删除
查看组信息:
cat /etc/group
发现zhangsan组依旧存在;删除用户时(不管是否加上-r参数),只会删除同名的组,不同名的组不会被删除;
6.2 用户组操作
用户组简介:类似于角色,系统可以对有共性的多个用户进行统一的管理;
6.2.1 添加组
语法:
groupadd 组名
示例:
groupadd g1
查看组信息:
cat /etc/group
6.2.2 修改组
1)修改组名称
语法:
groupmod -n 新组名 组名
示例:
groupmod -n g2 g1
再次查看组信息:
cat /etc/group
2)移动用户到新组
useradd lisi # 创建lisi用户,lisi组,lisi家目录
usermod lisi -g g2 # 将lisi移动到g1组
6.2.3 删除组
语法:
groupdel 组名
删除组的时候必须保证组中没有用户
示例:
groupdel zhangsan # 删除zhangsan组(此时zhangsan组没有用户)
groupdel g2 # 删除g2组(删除失败)
groupadd g1
usermod lisi -g g1 # 将lisi用户移动到g1组
groupdel g2 # 再次删除g2组
总结:
- 1)创建用户的时候,如果没有指定该用户的所属的组,那么会创建一个同名组
- 2)删除用户的时候,同名组也会被删除(前提是组里面没有其他用户了),并且删除组的时候要求组中不能有用户存在
- 3)删除用户的时候加-r代表删除家目录(即使家目录和用户名不一样)
6.3 权限管理
6.3.1 权限介绍
Linux中对每个目录和文件都做了规定,只能由满足条件的用户才能操作;
查看文件的操作权限:
每个文件和文件夹的最前面都有类似于drwxr-xr-x这样的字母,这些字母的含有就代表具体的操作权限;
具体含义如下:
- r:只读,权限等级为4
- w:只写,权限等级为2
- x:只执行,权限等级为1,对于文件夹来说就是能否进入该文件夹
- -:不具备权限
- 主权限(u):当前用户的权限
- 组权限(g):整个组的权限
- 其他权限(o):其他用户的权限(除当前登录用户外)
6.3.2 分配权限
语法:
chmod [权限] [操作] [文件/目录]
- 权限:
- 文字设定法:
- u:主权限
- g:组权限
- o:其他用户权限
- a:同时设置u、g、o三者的权限
- 数字设定法:
- 1:执行权限(x)
- 2:写权限(w)
- 3:写权限+执行权限(w+x)
- 4:读权限(r)
- 5:读权限+执行权限(r+x)
- 6:读权限+写权限(r+w)
- 7:读权限+写权限+执行权限(r+w+x)
- 文字设定法:
- 操作
- +:赋予某个权限
- -:剔除某个权限
- =:替换权限
示例:
cd / # 切换到根目录
vi aaa.txt # 创建并编辑aaa.txt文件
权限为-rw-r–r–
1)文字设定法:
chmod u+x aaa.txt # 增加主的执行权限(-rwxr--r--)
chmod g-r aaa.txt # 剔除组的读权限(-rwx---r--)
chmod o-r aaa.txt # 剔除其他用户的读权限(-rwx------)
chmod u-x,g+r,o+r aaa.txt # 剔除主的执行权限,增加组合其他用户的读权限(-rw-r--r--)
chmod u=rwx,g=rw,o=rw aaa.txt # 主具有可读可写可执行权限,组和其他用户具有读写权限(-rwxrw-rw-)
chmod a-r aaa.txt # 剔除u、g、o的读权限
chmod a+r,a-w aaa.txt # 增加u、g、o的读权限,剔除u、g、o的写权限
2)数字设定法
语法:
chmod [参数1|参数2|参数3] 文件/目录
参数1:代表u(主用户)
参数2:代表g(组用户)
参数3:代表o(其他用户)
如果只设置参数1,那么代表的是o
如果只设置参数1和参数2,那么代表的是g、o
只设置o
chmod 0 aaa.txt # ----------
chmod 1 aaa.txt # ---------x
chmod 2 aaa.txt # --------w-
chmod 3 aaa.txt # --------wx
chmod 4 aaa.txt # -------r--
设置g、o
chmod 42 aaa.txt # ----r---w-
设置u、g、o
chmod 660 aaa.txt # -rw-rw----
chmod 744 aaa.txt # -rwxr--r--
chmod 777 aaa.txt # -rwxrwxrwx
3)修改文件的属主和组
语法:
chown [-R] 用户名 文件 # 修改文件所属的用户
chown [-R] .组名 文件 # 修改文件所属的组
chown [-R] 用户名:组名 文件 # 同时修改文件所属的用户和组
示例1:修改文件的所属主
创建一个用户(会创建同名组)
useradd zhangsan
创建一个文件
vi aaa.txt
修改文件所属主
chown -R zhangsan aaa.txt # 修改aaa.txt文件为zhangsan用户
示例2:修改文件的所属组:
chown -R .zhangsan aaa.txt
示例3:修改文件的所属主和所属组:
chown -R root:zhangsan aaa.txt
关于修改文件的所属组还有一个命令:
chgrp 组名 文件/目录
示例:将aaa.txt修改为root组:
chgrp root aaa.txt
6.3.3 权限操作
当权限分配好了之后,其他用户在操作文件/目录时就得具备对应的权限,否则不可操作;
查看aaa.txt文件的权限:
chmod 777 aaa.txt # -rwxrwxrwx
创建zhangsan用户,并分配密码admin:
useradd zhangsan
passwd zhangsan
Tips:创建了一个zhangsan用户和一个zhangsan组
使用xshell新建zhangsan用户连接,进入/目录,查看aaa.txt
使用root账号修改权限:
chmod o-r aaa.txt
再次使用zhangsan用户查看aaa.txt,发现权限不足:
虽然读不了,但是还是可以编辑(写)的:
vi aaa.txt
编辑结束后输入:
:wq! #保存并强制退出
6.3.4 权限优先级
如果u没有r权限,但是g有r权限,那么该文件到底可不可以读取呢?
答:u > g > o
1)测试g>o
准备环境:
删除其他所有的用户
useradd zhangsan # 创建zhangsan用户,zhangsan组,zhangsan用户所属组是zhangsan组
useradd lisi -g zhangsan # 创建lisi用户,lisi用户所属组是zhangsan组
passwd zhangsan # 分配密码
passwd lisi # 分配密码
chmod 004 aa.txt # 只给o赋予r权限(-------r--)
chown -R lisi:zhangsan aa.txt # 切换aa.txt所有者为lisi,并且所有组为zhangsan
测试1:登录zhangsan用户
cat aa.txt # 权限不足
zhangsan对于aa.txt来说是其他用户,我们看到o是具有r的权限的,按道理来说zhangsan应该是可以读取aa.txt文件的,那为什么读取不了呢?
答:虽然o是具备r权限的,但是由于zhangsan和lisi是一个组的,aa.txt的组权限没有r,因此读取不了aa.txt
建立新组g1,将zhangsan移动到g1组(此时才能体现o的权限),再次查看aa.txt文件,发现可以查看
groupadd g1 # 添加g1组
usermod zhangsan -g g1 # 将zhangsan用户移动到g1组
重新登录,刷新权限
cat aa.txt # 发现可以查询
Tips:记得重新登录;
2)测试u>g
aa.txt的权限如下:
注意:lisi用户是在zhangsan组的
chmod g+r aa.txt # 给g赋予r权限
登录lisi用户,查看aa.txt,发现权限不足
很奇怪,lisi不是属于zhangsan组的吗?zhangsan组不是对aa.txt有r权限吗?为什么lisi不能读取aa.txt文件呢?
答:虽然整个zhangsan组具有r权限,但是lisi用户并不具备r权限,换句话说lisi的-(什么都没有)权限比zhangsan组的r权限要大;
我们把u的权限设为r:
chmod u+r aa.txt
再次查看aa.txt,发现可以查看