linux实训
根目录文件及其用处
Linux之用户管理
创建/删除新用户
Linux创建用户命令
Linux中使用useradd
命令来创建一个新用户。
命令格式格式:useradd [命令参数] 参数
常见命令参数:
- d<登入目录>:指定用户登入时的启始目录;
- D:查看或变更预设值;
- g<群组>:指定用户所属的群组;
- m:自动建立用户的登入目录;
- M:不要自动建立用户的登入目录;
- s:指定用户登入后所使用的shell。
useradd
必须以root权限才能执行,如果是普通用户想创建一个新用户时,需要在命令前加sudo
命令来提升权限为root权限。
案例演示:
1.查看useradd系统默认属性值,使用命令useradd -D
参数 | 说明 |
---|---|
GROUP | 指新创建的用户将被添加到用户组ID为100的公共用户组中 |
HOME | 指新创建的用户将在/home目录下创建一个HOME账户 |
INACTIVE | 指当密码逾期时,用户将不会被禁用 |
EXPIRE | 指新创建的用户不会在设定日期被设置为逾期 |
SHELL | 指新创建的用户使用/bin/sh(也就是bash)作为默认shell |
SKEL | 指系统会将/etc/skel目录中的内容复制到新创建的用户的HOME目录 |
CREATE_MAIL_SPOOL | 指系统不会在邮件目录中创建一个文件用于新创建用户账户接受邮件 |
2.创建新用户
Linux中用户信息是保存在/etc/passwd
文件中,我们可以使用命令tail
/etc/passwd
命令查看/etc/passwd
文件最后10行中是否存在刚刚新创建的testUser用户信息。
Linux删除用户命令
Linux中使用userdel
命令来删除一个已经存在的用户。
命令格式:userdel [命令参数] 参数
常见命令参数:
- f:强制删除用户,即使用户当前已登录;
- r:删除用户的同时,删除与用户相关的所有文件。
userdel
必须以root权限才能执行,如果是普通用户想使用该命令时,需要在命令前加sudo命令来提升权限为root权限。
案例演示:
- 使用userdel命令删除一个已经存在的用户testUser,并且自动删除其家目录文件。
Linux 用户密码管理
用户密码存放地及方式
Linux中用户的登录密码是存放在/etc/shadow
文件中,/etc/shadow
文件中存放的是加密过后的密码,所以在/etc/shadow
文件中看到的密码是加密过后的密文。
可以看到第一个冒号前是用户名,用户名是以明文的方式存放。
在第一个冒号和第二个冒号之间存放的是加密过后的密码,密码是以密文的方式存放,其中密文是由用户密码和其它信息加密后组成的,这里不做详细讲解,我们只需要知道如果第一个冒号和第二个冒号之间是*或者!或者空,则表示该用户没有密码,否则,则表示该用户是有密码。
使用passwd命令修改用户密码
命令格式:passwd [命令参数] 参数
常见命令参数:
- d 删除密码;
- l 停止账号使用;
- S 显示密码信息。
passwd必须以root权限才能执行,如果是普通用户想执行passwd时,需要在命令前加sudo命令来提升权限为root权限。
案例演示:
- 使用useradd命令来新创建一个用户,使用passwd命令来设置登录密码。
使用useradd命令创建一个新用户(test),此时test用户是没有密码的,所以使用
1 | tail -n 1 /etc/shadow |
命令查看/etc/shadow文件的最后一行可以看出test用户密码部分为!。
使用passwd命令为test用户设置密码时,可以看到需要输入两次密码,目的是为了确保两次输入的密码一致。当设置完密码后,可以看到/etc/shadow文件中test用户的密码部分已经为加密过后的密文。
- 使用passwd命令来清除用户的密码。
使用passwd命令清除用户test的登录密码,使用tail -n 1 /etc/shadow命令查看/etc/shadow文件的最后一行可以看出test用户密码部分为空,此时test用户是没有密码的。
使用chpasswd命令修改用户密码
chpasswd
命令通常是用于批量修改用户密码,从标准输入批量读取成对的用户名和密码,其中输入的用户名和密码的格式为: 用户名:密码
例如要批量更新用户密码,将用户名和密码写入到一个文件中,格式如下所示:
然后执行执行如下命令来更新密码:
sudo chpasswd < batch.txt
“<”代表着重定向
命令格式:chpasswd [命令参数] 参数
常见命令参数
- e:输入的密码是加密后的密文;
- h:显示帮助信息并退出。
chpasswd必须以root权限才能执行,如果是普通用户执行时,需要在命令前加sudo命令来提升权限为root权限。
Linux用户权限切换
图形化界面登录
Linux中添加用户后,用户在图形界面登录系统的方式和Windows一样,都是选择要登录的用户后直接输入登录密码即可。
案例演示:
- 添加一个新用户,并且设置登录密码,然后在图形界面登录。
使用login命令登录
login命令是让用户登录系统,可通过它的功能随时更换登入身份。当/etc目录里含名称为nologin的文件时,系统只允许root帐号登入系统,其他用户一律不准登入。
当使用login命令登录系统后,可以使用logout命令或者exit命令来退出当前用户登录,返回到登录前的用户状态。
命令格式:login [命令参数] 参数
参数为登录的用户名,可以不输入登录的用户名,直接输入login命令后回车,然后根据提示再输入用户名和密码。
常见命令参数:
- p:告诉login指令不销毁环境变量;
- h:指定远程服务器的主机名。
login必须以root权限才能执行,如果是普通用户执行时,需要在命令前加sudo命令来提升权限为root权限。
案例演示:
- 使用login命令来登录系统(文件/etc/nologin不存在)。
首先查看当前登录的用户名是parallels。
使用test 用户来登录系统,然后查看当前登录的用户名。
使用logout或者exit命令退出test用户,然后在查看当前登录用户是否为parallels。
- 使用login命令来登录系统(文件/etc/nologin存在)。
首先查看当前登录的用户名是parallels。
在/etc目录下新创建一个nologin文件,使用如下命令创建:
sudo touch /etc/nologin
发现使用test用户是无法登录系统的,只有使用root用户才能登录系统。
使用su命令切换用户身份
su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号的密码。
当使用su命令切换用户后,使用exit命令退出当前身份,返回原有登录用户身份。
注:如果当前用户身份是root,则使用su命令切换到其他用户的时候不需要相应用户的密码
命令格式:su [命令参数] 参数
参数为登录的用户名,如果没有参数,则默认切换为root用户。
常见命令参数
- -c<指令>或–command=<指令>:执行完指定的指令后,即恢复原来的身份;
- -l或–login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量;
- -m,-p或–preserve-environment:变更身份时,不要变更环境变量;
- s
或–shell= :指定要执行的shell。
su命令所有使用者都可以执行。
案例演示:
- 使用su命令切换当前用户身份(不改变当前工作目录)。
- 使用su命令切换当前用户身份(改变当前工作目录)。
- 利用-c命令参数实现执行完毕相应的命令立马返回当前用户
或者如下也行
Linux之文件/目录搜索
查询命令-locate
locate
命令用来查找文件或目录。
locate命令要比其他查找文件命令(例如:find)快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db
/var/lib/mlocate/mlocate.db
这个数据库中含有本地所有文件信息。Linux 系统自动创建这个数据库,并且每天自动更新一次,因此,我们在用locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
locate具体命令如下:
locate 命令参数 文件/目录
常用命令参数如下:
- -c, --count 只输出找到的数量;
- -d, --database DBPATH 使用DBPATH指定的数据库,而不是默认数据库/var/lib/mlocate/mlocate.db;
- -i, --ignore-case 忽略大小写;
- -q, --quiet 安静模式,不会显示任何错误讯息;
- -e, --existing 只显示当前存在的文件条目;
案例演示:
- 搜索etc目录下以pass开头的文件或目录,具体使用如下命令:
locate /etc/pass
1 | ┌──(kali㉿kali)-[~] |
因为updatedb需要root权限,这里需要使用sudo
- 搜索包含passwd字母的文件或目录总个数,具体使用如下命令:
locate -c passwd
1 | ┌──(kali㉿kali)-[~] |
updatedb
updatedb命令用来创建或更新locate命令所必需的数据库文件。
updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入locate数据库文件中。
具体命令如下:
updatedb 命令参数
常用参数如下:
- -o<文件>:忽略默认的数据库文件,使用指定的slocate数据库文件;
- -U<目录>:更新指定目录的slocate数据库;
- -v:显示执行的详细过程;
案例演示:
- 新创建一个testFile文件,更新locate数据库后使用locate命令定位该文件,具体使用如下命令:
1 | touch testFile |
执行情况如下:
1 | #更新之前 |
可以看到新创建文件后直接使用locate去查找是没有任何结果的,只有更新数据库后才能查找到新创建的文件。
- 删除testFile文件,更新locate数据库后使用locate命令定位该文件,具体使用如下命令:
1 | rm testFile |
执行情况如下:
1 | ┌──(kali㉿kali)-[~/trial] |
第三条updatedb命令使用了-U参数,只更新testFile所在目录的数据库,这样速度比较快,如果不使用该参数,则会更新整个文件系统的内容,速度就会比较慢。
删除文件后直接使用locate去查找可以定位到的,原因是没有马上更新数据库,数据库里面仍然有“过时”的信息。
查询命令-which/whereis
which命令主要是用来查找系统==PATH目录下的可执行文件==,说白了就是查找那些我们已经安装好的可以直接执行的命令。
whereis命令可以用来查找==二进制(命令)、源文件、man文件==。与which不同的是这条命令可以是通过文件索引数据库而非PATH来查找的,所以查找的面比which要广。
which
which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which是shell内建命令,内建命令要比系统论命令有比较高的执行效率。
具体命令如下:
which 命令
案例演示:
使用which命令定位passwd命令的位置,具体使用如下命令:
1 | which passwd |
执行情况如下:
1 | ┌──(kali㉿kali)-[~] |
可以看到passwd命令是存放在/usr/bin目录下。
whereis
whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。
具体命令如下:
whereis 命令参数 文件名
常用命令参数如下:
- -b:只查找二进制文件;
- -B<目录>:只在设置的目录下查找二进制文件;
- -m:只查找说明文件;
- -M<目录>:只在设置的目录下查找说明文件;
- -s:只查找原始代码文件;
- -S<目录>只在设置的目录下查找原始代码文件;
案例演示:
- 使用whereis命令查找passwd命令所有信息,包括二进制文件位置、说明文件位置和源码文件位置,具体使用如下命令:
1 | whereis passwd |
结果如下:
1 | ┌──(kali㉿kali)-[~] |
- 使用whereis命令仅查找passwd命令二进制文件位置,具体使用如下命令:
1 | whereis -b passwd |
结果如下:
1 | ┌──(kali㉿kali)-[~] |
可以看到passwd命令存在的位置有两处,分别是/usr/bin/passwd和/usr/bin/X11/passwd,那么在我们执行passwd时,如何确定是执行的哪一个,此时我们就可以使用which命令来定位首先被执行的命令位置。
查询命令-find
find命令与locate命令相比各有优劣,locate命令的查找速度比find命令快的多,但是无法查找最新添加的文件/目录以及会查找出来已经过期的文件/目录。
相find命令可以按照自定义的方法查找任何文件,功能比较强大。缺点就是查询速度比较慢,因为它会通过遍历硬盘来查找。通常我们会使用find命令,相较于它提供的强大的搜索能力而言,多花费的些微时间不值一提。
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
具体命令如下:
1 | find 查找目录 查找参数 查找内容 |
常用查找参数如下:
- -amin<+|-分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
- -atime<+|-24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
- -cmin<+|-分钟>:查找在指定时间之时被更改过的文件或目录;
- -ctime<+|-24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
- -mmin<+|-分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
- -mtime<+|-24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
- -depth:从指定目录下最深层的子目录开始查找;
- -exec<执行指令>:假设find指令的回传值为True,就执行该指令;
- -follow:排除符号连接;
- -gid<群组识别码>:查找符合指定群组识别码的文件或目录;
- -group<群组名称>:查找符合指定群组名称的文件或目录;
- -uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
- -user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
- -name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
- -iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
- -inum<inode编号>:查找符合指定的inode编号的文件或目录;
- -newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
- -size<+|-|=文件大小>:查找符合指定的文件大小的文件;
- -type<文件类型>:只寻找符合指定的文件类型的文件;
- -a:是前后条件都要满足;
- -o :是满足一个条件就好;
- +:表示大于设置值的文件;
-
- :表示小于设置值的文件;
- = :表示等于设置值的文件;
案例演示1:
查找/etc目录下以update开头以.conf结尾的文件或目录,具体使用如下命令:
1 | sudo find /etc -name "update*.conf" |
结果如下:
1 | ┌──(kali㉿kali)-[~] |
*表示任意字母。这里使用的是正则表达式,正则表达式可以检索、替换那些符合某个模式或规则的文本,非常强大。有兴趣的同学可以了解一下。
案例演示2:
查找/etc目录下在超过7天前被访问的文件或目录,具体使用如下命令:
1 | sudo find /etc -atime +7 |
结果如下:
1 | ┌──(kali㉿kali)-[~] |
案例演示3:
查找/etc目录下恰好在7天前被访问的文件或目录,具体使用如下命令:
1 | sudo find /etc -atime 7 |
结果如下:
1 | ┌──(kali㉿kali)-[~] |
案例演示4:
查找/etc目录下在5分钟内被访问的文件或目录,具体使用如下命令:
1 | sudo find /etc -amin -5 |
结果如下:
1 | ┌──(kali㉿kali)-[/etc] |
-type 文件类型使用方法
常见文件类型:
- f:普通文件
- l:符号链接
- d:目录
- c:字符设备
- b:块设备
- s:套接字
- p:Fifo
案例演示:
查找/etc目录下以my开头的目录,具体使用如下命令:
1 | sudo find /etc -name "my*" -a -type d |
结果如下:
1 | ┌──(kali㉿kali)-[~] |
size <+|-|=文件大小>使用方法
常见文件大小单位:
- b —— 块(512字节)
- c —— 字节
- w —— 字(2字节)
- k —— 千字节
- M —— 兆字节
- G —— 吉字节
案例演示:
查找/etc目录下大于1M的文件,具体使用如下命令:
1 | sudo find /etc -size +1M |
结果如下:
1 | ┌──(kali㉿kali)-[~] |
-exec
使用方法
具体使用方法如下:
1 | find … -exec 要执行的命令 {} \; |
-exec选项后面跟随着所要执行的命令或脚本,然后是一个空格一对儿{}一个空格和一个;。
注意:要执行的命令和{之间以及}与;之间的空格是不能省略的。
案例演示:
查找/etc目录下大于1M的文件/目录的详细信息,具体使用如下命令:
1 | sudo find /etc -size +1M -exec ls -l {} \; |
1 | ┌──(kali㉿kali)-[~] |
Linux之文件打包和解压缩
打包和压缩的区别
文件打包,有可能仅仅是将多个文件连接成1个文件,并不进行压缩处理。有时候也可能看起来文件变小,那是因为多个文件储存可能造成多余的空间浪费,究其原因是文件储存方式中,分块族造成的。1个族1次只能被1个文件使用,虽然1个文件能使用多个族,但最后1个族未必能填满。因此,大量的文件就会造成很多浪费。而连接成1个文件后,只会浪费1个族。压缩就不一样了,它不但把文件连在一起,还进行特定算法的压缩。对于txt这类很“松”的文件,可以大大减小文件的大小
tar打包命令
tar(tape archive的简写)工具可完成许多功能,其名称源于它的原始功能-创建和读取归档文件和备份磁带。如今,该工具常用来将多个文件或多个目录打包成一个tar文件,或者将某个tar文件分解开。
打包:
tar命令可以将多个文件/目录进行打包,将多个文件生成一个文件,生成的文件后缀为.tar。
具体的打包命令为:
tar -cvf 生成的tar包名 要打包的文件或者是目录
常用的参数命令:
- -c 建立新的归档文件
- -v 处理过程中输出相关信息
- -f 对普通文件操作
解包:
tar命令可以将已经打包好的文件解压出来。
具体解包命令如下:
tar -xvf 解压包名 -C 解压到指定目录
常用的参数:
- -x 或 --ext\fract 或 --get:从备份文件中还原文件
- -v 处理过程中输出相关信息
- -f 对普通文件进行操作
- -C <目标路径> 切换到指定的目录
ps:如果不使用-C(大写)参数,则默认解压到当前目录下。
文件压缩命令
Linux下存在多个文件压缩工具,常用的有bzip2、gzip和zip。这三个工具都是可以将一个文件进行压缩操作,使其在不丢失任何信息的情况下占用较少的磁盘空间
对于多文件/目录的压缩操作分为两步:
- 将其进行打包
- 将打包过后的文件进行压缩操作。
bzip2
bzip2命令用于创建和管理(包括解压缩).bz2格式的压缩包。
具体命令如下:
bzip2 命令参数 指定要压缩的文件
- -z或–compress:强制执行压缩;
- -d或–decompress:执行解压缩;
- -f或-force:bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖。请使用此参数;
- -v或–verbose:压缩或解压缩文件时,显示详细的信息;
gzip
gzip命令用于创建和管理(包括解压缩).gz格式的压缩包。
具体命令如下:
gzip 命令参数 指定要压缩的文件
常用命令参数如下:
- -d或–decompress或----uncompress:解开压缩文件;
- -f或——force:强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
- -l或——list:列出压缩文件的相关信息;
- -r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
- -v或——verbose:显示指令执行过程;
zip
zip命令对文件进行打包操作。zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有.zip扩展名的压缩文件。
具体命令如下:
zip 命令参数 指定生成的压缩文件名 要被压缩的文件/目录列表
常用命令参数如下:
- -d:从压缩文件内删除指定的文件;
- -q:不显示指令执行过程;
- -r:递归处理,将指定目录下的所有文件和子目录一并处理;
- -v:显示指令执行过程或显示版本信息;
- -u:更换较新的文件到压缩文件内;
- -x<范本样式>:压缩时排除符合条件的文件;
tar命令进行压缩
可以使用tar命令一步就实现对多文件/目录进行压缩操作。
采用bzip2方式执行tar命令进行压缩
具体命令如下:
tar -jcvf 指定生成的压缩文件名 要被压缩的文件/目录列表
常用命令参数如下:
- -c 建立新的归档文件;
- -v 处理过程中输出相关信息;
- -f 对普通文件操作;
- -j 以bzip2对文件/目录进行压缩;
采用gzip进行压缩
具体命令如下:
tar -zcvf 指定生成的压缩文件名 要被压缩的文件/目录列表
常用命令参数如下:
-c 建立新的归档文件;
-v 处理过程中输出相关信息;
-f 对普通文件操作;
-z 以gzip对文件/目录进行压缩;
文件解压缩命令
针对bzip2、gzip和zip这三种压缩工具生成的压缩包,我们可以使用bunzip2、gunzip和unzip命令对其进行解压缩。
bunzip2
bunzip2命令解压缩由bzip2指令创建的.bz2压缩包。使用bzip2 -d命令也可以将.bz2压缩包进行解压。
具体命令如下:
bunzip2 命令参数 指定要解压的文件
常用命令参数如下:
- -f或–force:解压缩时,若输出的文件与现有文件同名时,预设不会覆盖现有的文件;
- -k或–keep:在解压缩后,预设会删除原来的压缩文件。若要保留压缩文件,请使用此参数;
- -v或–verbose:解压缩文件时,显示详细的信息;
gunzip
gunzip命令解压缩由gzip指令创建的.gz压缩包。使用gzip -d命令也可以将.gz压缩包进行解压。
具体命令如下:
gunzip 命令参数 指定要解压的文件
常用命令参数如下:
- -f或-force:强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
- -l或-list:列出压缩文件的相关信息;
- -q或-quiet:不显示警告信息;
- -r或-recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
- -v或-verbose:显示指令执行过程;
unzip
unzip命令用于解压缩由zip命令压缩的.zip压缩包。
具体命令如下:
unzip 命令参数 指定要解压的文件
常用命令参数如下:
- -q:执行时不显示任何信息;
- -n:解压缩时不要覆盖原有的文件;
- -d<目录>:指定文件解压缩后所要存储的目录;