Linux命令总结

Linux期末复习

Linux系统一切皆是文件

系统目录树

在这里插入图片描述

在这里插入图片描述

第二章:常用命令

  • 使用 Tab 建补全命令
  • 用 ; 来分割命令
  • 用 \ 来将一个较长的命令分隔多行表达,Shell会自动显示出">" 表示正在输入长命令
  • 在命令后面用 & 使程序以后台方式执行

浏览目录类命令

1.pwd命令

pwd命令用于显示用户当前所处的目录

2.cd命令

cd命令用来在不同的目录中进行切换。

[root@Server01 ~]# cd ..     	   //改变目录位置至当前目录的父目录
[root@Server01 /]# cd etc	 	   //改变目录位置至当前目录下的etc子目录下
[root@Server01 etc]# cd ./yum  	   //改变目录位置至当前目录(.)下的yum子目录下
[root@Server01 yum]# cd ~ 		   //改变目录位置至用户登录时的工作目录(用户的家目录)
[root@Server01 ~]# cd ../etc 	   //改变目录位置至当前目录的父目录下的etc子目录下
[root@Server01 etc]# cd /etc/xml   //利用绝对路径表示改变目录到 /etc/xml目录下
[root@Server01 xml]# cd      	   //改变目录位置至用户登录时的工作目录
  • . 代表当前目录
  • … 代表当前目录的父目录
  • ~ 代表用户的个人家目录(主目录)
  • root用户的个人主目录是 /root
  • cd 后不带任何命令就会将目录切换到用户的家目录中

3.ls命令

ls命令用来列出文件或目录信息

语法:ls [参数] [目录或文件]

常用的参数:

  • -a:显示所有文件,包括以"."开头的隐藏文件。
  • -A:显示指定目录下所有的子目录及文件,包括隐藏文件,但不显示".“和”…"
  • -c:按文件的修改时间排序
  • -C:分成多列显示各行
  • -d:如果参数是目录,则只显示其名称而不显示其下的各个文件。往往与"-l"选项起使用,以得到目录的详细信息
  • -l:以长格形式显示文件的详细信息
  • -i:在输出的第一列显示文件的 i 节点号
[root@Server01 ~]#ls -F  	//列出当前目录下的文件名及其类型
//以 /结尾表示为目录名,以 *结尾表示为可执行文件,以 @结尾表示为符号连接

[root@Server01 ~]#ls -l	//列出当前目录下所有文件的权限、所有者、文件大小、修改时间及名称
[root@Server01 ~]#ls -lg	//同上,并显示出文件的所有者工作组名
[root@Server01 ~]#ls -R 	//显示出目录下以及其所有子目录的文件名
[root@Server01 ~]#ls -t  	//依照文件最后修改时间的顺序列出文件
[ls -dl 文件绝对路径 ]:会显示指定文件的详细信息

[root@localhost Desktop]# ls -dl /root/Desktop
drwxr-xr-x. 2 root root 51 6月   5 22:31 /root/Desktop

4.ll命令

一样用于查看文件的信息情况

书P49


浏览文件类命令

1.cat命令

cat命令主要用于滚屏显示文件内容或是将多个文件合并成一个文件

语法:cat [参数] 文件名

常用的参数:

  • -b:对输出内容中的非空行标注行号。
  • -n:对输出内容中的所有行标注行号。
例如,要查看/etc/passwd文件内容的命令为
[root@Server01 ~]#cat /etc/passwd

利用cat命令还可以合并多个文件

例如要把file1和file2文件的内容合并为file3,且file2文件的内容在file1文件的内容前面,则命令为:

[root@Server01 ~]# echo "This is file1!">file1  //先建立file1示例文件
[root@Server01 ~]# echo "This is file2!">file2  //先建立file1示例文件
[root@Server01 ~]# cat file2 file1>file3 
[root@Server01 ~]# cat file3
This is file2!
This is file1!
//如果file3文件存在,则此命令的执行结果会覆盖file3文件中原有内容
[root@Server01 ~]# cat file2 file1>>file3 
//如果file3文件存在,此命令的执行结果将把file2和file1文件的内容附加到file3文件中原有内容的后面。
  • > 表示覆盖
  • >> 表示在最后追加

2.more命令

在使用cat命令时,如果文件太长,用户只能看到文件的最后一部分。这时可以使用more命令,一页一页地分屏显示文件的内容。

  • Enter键 可以向下移动一行
  • Spare键 可以向下移动一页
  • q键 退出more命令

常用的参数:

  • -num:这里的num表示一个数字,用来指定分页显示时每页的行数
  • +num:指定从文件的第num行开始显示
[root@Server01 ~]#more /etc/passwd 	
// 以分页方式查看/etc/passwd文件的内容
[root@Server01 ~]#cat /etc/passwd |more  	
// 以分页方式查看passwd文件的内容

3.less命令

less命令是more命令的改进版,比more命令的功能强大。more命令只能向下翻页,而less命令可以向下、向上翻页,甚至可以前后左右移动。

  • 按“Enter”回车键可以向下移动一行
  • 按“Space”空格键可以向下移动一页
  • 按“B”键可以向上移动一页
  • 也可以用光标键向前、后、左、右移动
  • 按“Q”键可以退出less命令。
  • 特别的less 命令还支持在一个文本文件中进行快速查找。先按斜杠键/,再输人要查找的单词或字符。less 命令会在文本文件中进行快速查找,并把找到的第一个搜索目标高亮度显示。
    如果希望继续查找,就再次按斜杠键/,再按 Enter 键即可。

4.head命令

head命令用于显示文件的开头部分,默认情况下只显示文件的前10行内容

语法:head [参数] 文件名

常用的参数:

  • -n num:显示指定文件的前num行。
  • -c num:显示指定文件的前num个字符。

5.tail命令

tail命令用于显示文件的末尾部分,默认情况下,只显示文件的末尾10行内容

语法:tail [参数] 文件名

常用的参数:

  • -n num:显示指定文件的末尾num行。
  • -c num:显示指定文件的末尾num个字符。
  • +num:从第num行开始显示指定文件的内容。

tail 最强悍的功能是可以持续刷新一个文件的内容。可以用来查看实时的最新文件日志

目录操作类

1.mkdir命令

mkdir命令用于创建一个目录

语法:mkdir [参数] 目录名

常用的参数:

  • -p:在创建目录时,如果父类目录不存在,则同时创建该目录及该目录的父目录
[root@Server01 ~]#mkdir dir1   //在当前目录下创建dir1子目录
[root@Server01 ~]#mkdir -p dir2/subdir2
//在当前目录的dir2目录中创建subdir2子目录,如果dir2目录不存在,则同时创建

2.rmdir命令

rmdir命令用于删除空目录

语法:rmdir [参数] 目录名

上述目录名可以为相对路径,也可以为绝对路径。但所删除的目录必须为空目录。

常用的参数:

  • -p:在删除目录时,一起删除父目录,当父目录中必须没有其他的目录及文件
[root@Server01 ~]#rmdir dir1   //在当前目录下删除dir1空子目录
[root@Server01 ~]#rmdir -p dir2/subdir2  
//删除当前目录中dir2/subdir2子目录,//删除subdir2目录时,如果dir2目录中无其他目录,则一起删除

文件操作类

1.cp命令

cp命令主要用于文件或目录的复制

语法:cp [参数] 源文件==(旧位置)== 目标文件==(新位置)==

常用的参数:

  • -a:尽可能将文件状态、权限等属性照原状予以复制。
  • -f:如果目标文件或目录存在,先删除它们再进行复制(即覆盖),并且不提示用户。
  • -i:如果目标文件或目录存在,提示是否覆盖已有的文件。
  • -R:递归复制目录,即包含目录下的各级子目录。
  • -u:在目标文件与源文件有差异时,才会复制
【例2-1】用root身份,将家目录下的.bashrc复制到/tmp下,并更名为bashrc。
[root@Server01 ~]# cp     ~/.bashrc    /tmp/bashrc
[root@Server01 ~]# cp -i  ~/.bashrc    /tmp/bashrc

2.mv命令

mv命令主要用于文件或目录的移动或改名

语法:mv [参数] 源文件或目录 目标文件或目录

常用的参数:

  • -i:如果目标文件或目录存在,则提示是否覆盖目标文件或目录。
  • -f:无论目标文件或目录是否存在,直接覆盖目标文件或目录,不提示
//将当前目录下的/tmp/wtmp文件移动到/usr/目录下,文件名不变
[root@Server01 tmp]# cd
[root@Server01 ~]# mv /tmp/wtmp /usr/

//将/usr/wtmp文件移动到根目录下,移动后的文件名为tt   ❤
[root@Server01 ~]# mv /usr/wtmp /tt

3.rm命令

rm命令主要用于文件或目录的删除

语法:rm [参数] 文件名或目录名

常用的参数:

  • -i:删除文件或目录时提示用户。
  • -f:删除文件或目录时不提示用户。
  • -R:递归删除目录,即包含目录下的文件和各级子目录。
//删除当前目录下的所有文件,但不删除子目录和隐藏文件
[root@Server01 ~]#rm *

//删除当前目录下的子目录subdir11,包含其下的所有文件和子目录,并提示用户确定
[root@Server01 ~]#rm -iR subdir11

4.touch命令

touch命令用于建立文件更新文件的修改日期

语法: touch [参数] 文件名或目录名

常用的参数:

  • -d yyyymmdd:把文件的存取和修改时间改为yyyy年mm月dd日。
  • -a:只把文件的存储时间改为当前时间。
  • -m:只把文件的修改时间改为当前时间。
[root@Server01 dir]# cd
[root@Server01 ~]# touch aa		
//如果当前目录下存在aa文件,则把aa文件的存取和修改时间改为当前时间
//如果不存在aa文件,则新建aa文件
[root@Server01 ~]# touch -d 20220808 aa 	//将aa文件的存取和修改时间改为2022年8月8日

其他

1.gzip 和 gunzip命令

gzip:压缩文件,压缩后的文件以".gz"结尾

gunzip:解压文件

语法:

gizp -v 文件名

gunzip -v 文件名

常用的参数:

  • -v:显示被压缩文件的压缩比或解压时的信息

2.whereis命令

whereis命令用来寻找命令的可执行文件所在的位置

语法:whereis [参数] 命令名称

//查找命令rpm 的位置
[root@Server01 Packages]# cd
[root@Server01 ~]# whereis rpm 
rpm: /usr/bin/rpm /usr/lib/rpm /etc/rpm/usr/share/man/man8/rpm.8.gz

3.whatis命令

用来查询命令的作用是什么

语法:whatis [参数] 命令名称

4.whoami命令

用来查询当前用户是谁

5.find命令

find命令用于文件查找。它的功能非常强大

语法:find [路径] [匹配表达式]

匹配表达式看书本P53

  • 文件类型
    • b:块设备文件
    • c:字符设备文件
    • d:目录
    • p:管道文件
    • l:符号连接文件
    • f:普通文件
[root@Server01 ~]# find  .  -type  f  -exec  ls  -l  {}  \;
//在当前目录下查找普通文件,并以长格形式显示

[root@Server01 ~]# find  /tmp -type  f  -mtime 5  -exec  rm  {}  \;
//在/tmp目录中查找修改时间为5天以前的普通文件,并删除。保证/tmp目录存在

[root@Server01 ~]# find  /etc  -name  "*.conf"
//在/etc/目录下查找文件名以“.conf”结尾的文件

[root@Server01 ~]# find  .  -type  d  -perm 755  -exec  ls {}  \;
//在当前目录下查找权限为755的目录并显示

6.grep命令

grep命令用于查找文件中包含有指定字符串的行

语法:grep [参数] 要查找的字符串 文件名

7.clear清屏

8.与时间有关的命令

  • timedatectl:设置时间
  • cal:查看日历
  • clock:用于从计算机硬件获得日期和时间(root用户才能用)

9.进程管理类命令

  • ps:显示进程的运行情况

  • pidof:用于查询某个指定服务进程的PID值

  • kill:向进程发送强制终止信号

  • killall:用于终止某个指定名称的服务所对应的全部进程

  • nice:用来修改进程的优先级(NI值越高,优先级越低)

  • top:和ps命令不同,top命令可以实时监控进程的状况。top屏幕自动每5秒刷新

    ​ 一次,也可以用“top -d 20”,使得top屏幕每20秒刷新一次。

  • jobs:用于查看在后台运行的进程

  • bg:用于把进程放到后台运行

  • fg:用于把从后台运行的进程调到前台

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iNhRbv5p-1660486693205)(…/%E5%9B%BE%E7%89%87/image-20220604184010740.png)]

10.at命令

设置特点时间运行指定的Linux命令 (P书本61)

[root@Server01 ~]#at 4:08 PM Sat
at>echo 'hello'
at>Ctrl + D
job 1 at Sat May 5 16:08:00 2018
// 这将会在周六下午4:08运行echo 'hello'程序

11.man命令

man命令用于列出命令的帮助手册(P书本61)

12.echo命令

echo命令用于在终端输出字符串或变量提取后的值

格式:“echo [字符串 | $变量]”

例如,把指定字符串“long90.cn”输出到终端屏幕的命令为: 
[root@Server01 ~]# echo long90.cn

其他命令

  • shutdown:用于在指定时间关闭系统
  • halt:表示立即停止系统
  • reboot:用于重新启动系统,相当于“shutdown -r now”
  • poweroff:用于立即停止系统,并关闭电源,相当于“shutdown -h now”
  • alias命令用于创建命令的别名(自定义别名)
    • 语法:alias 命令别名 = “命令行”
  • unalias命令用于取消别名的定义
  • history:用于显示用户最近执行的命令g
  • wget命令用于在终端中下载网络文件,命令的格式为
  • wget [参数] 下载地址
  • who:查看当前登入主机的用户终端信息,格式为“who [参数]”
  • last:用于查看所有系统的登录记录,格式为“last [参数]"

实操题目:

在这里插入图片描述



第三章:shell和vim编辑器

shell

Shell 是用户与操作系统内核之间的接口,起着协调用户与系统的一致性和在用户与系统之间进行交互的作用

Shell有如下功能

  • Shell环境变量
  • 正则表达式
  • 输入输出重定向与管道

①Shell环境变量

①.变量的定义

在shell中,变量的赋值格式如下:
name = string
其中,name是变量名,它的值就是string,“=”是赋值符号。

  • n 变量名必须由字母、数字及下划线组成,并且变量名的第一个字符不能为数字
  • n 变量名大小写是敏感

②.变量的引用

通过在变量名(name)前加 $ 字符(如$name)引用变量的值,

③.Shell里的特殊字符

  • 单引号:引号内的所有内容原样保留

  • 双引号:不是原样保留。如:$表示引用变量,把输出的变量值作为字符串的一部分

  • \ :为转义字符

举例:

//$LOGNAME:表示引用LOGNAME变量,即输出变量的值
echo 'Current user is $LOGNAME'  //	原样输出:Current user is $LOGNAME
echo "Current user is $LOGNAME"  //输出:Current user is ROOT

//``表示执行命令,`date`表示执行date命令,把命令的输出作为字符串的一部分
echo 'Today is `date`'   //原样输出:Today is `date`
echo "Today is `date`"   //输出:Today is 三 12月 4 09:20:53 CST 2019     

④.Shell变量的作用域

shell变量分为局部变量和全局变量

  1. 局部变量的作用范围仅限制在其命令行所在的shell或shell脚本文件中。
  2. 全局变量的作用范围则包括本shell进程及其所有子进程。
  3. 可以使用export内置命令将局部变量设置为全局变量

⑤.环境变量

环境变量是指由shell定义和赋初值的shell变量。shell用环境变量来确定查找路径、注册目录、终端类型、终端名称、用户名等。所有环境变量都是全局变量,并可以由用户重新设置。

  • 设置环境变量用set命令,命令的格式是:set环境变量=变量的值

    注意:用赋值符“=”(原则:赋值符两边不能有空格)

    例如,设置用户的主目录为/home/john,可以用以下命令:
    [root@Server01 ~]# set HOME=/home/john
    
  • 不加任何参数直接使用set命令可以显示出用户当前所有环境变量的设置

  • 在环境变量前面加上 $ 符号,表示引用环境变量的值

    [root@Server01 ~]# cd  $HOME   //命令将把目录切换到用户的主目录
    
    // 当修改PATH变量时,例如,将一个路径/tmp加到PATH变量前,应设置为
    [root@Server01 ~]# PATH=/tmp:$PATH
    
  • 将环境变量重新设置为系统默认值命令:unset

⑥.工作环境设置文件

shell环境依赖于多个文件的设置。
环境设置文件有两种,一种是系统环境设置文件,另一种是个人环境设置文件

(1)系统中的用户工作环境设置文件。

  • 登录环境设置文件:/etc/profile
  • 非登录环境设置文件:/etc/bashrc

(2)用户设置的环境设置文件。

  • 登录环境设置文件:$HOME/.bash_profile。

  • 非登录环境设置文件:$HOME/.bashrc。


②正则表达式

grep命令

在这里插入图片描述

正则表达式:

基础正则表示的特殊字符汇总成表如下


③输入输出重定向

重定向符
<实现输入重定向。
>>>实现输出重定向。
2>2>>实现错误重定向
&>同时实现输出重定向 和 错误重定向

重定向的例子

在这里插入图片描述

bash输入输出重定向可以通过使用下面选项设置为不覆盖已存在文件

在这里插入图片描述


④管道命令

在这里插入图片描述

例子:

在这里插入图片描述


Shell脚本

  • Shell是以为单位的,在执行脚本的时候会分解成一行一行依次执行
  • 脚本的主要成分有:注解、命令、Shell变量、流程控制语句
    • 在注释行前面加“#”号

注意事项

在这里插入图片描述

如何运行一个Shell脚本

在这里插入图片描述

例子:

root@Server01 scripts]# vim  sh01.sh   //创建叫sh01.sh的脚本

#!/bin/bash    //头文件
# Program:
# This program shows "Hello World!" in your screen.
# History:
# 2021/08/23	Bobby	First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH   // 提示为全局变量
echo -e "Hello World! \a \n"
exit 0


[root@Server01 scripts]# sh  sh01.sh  // 运行脚本
Hello World !  //输出结果

vim编辑器

vim是vimsual interface的简称,它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZEAqrIq5-1660486693212)(…/%E5%9B%BE%E7%89%87/image-20220605000730414.png)]

在命令模式下vim的基本命令操作:

:w               		保存
:w   filename   		另存为filename
:wq!             		保存退出
:wq!  filename 			注:以filename为文件名保存后退出
:q!            			不保存退出
:x            			应该是保存并退出,功能和:wq!相同

vim有3种基本工作模式

  • 命令模式
  • 输入模式
  • 末行模式

用vim打开一个文件后,便处于命令模式。利用文本插入命令,如 i、a、o等可以进入输入模式,按Esc键可以从输入模式退回命令模式。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9FHVyUFI-1660486693212)(…/%E5%9B%BE%E7%89%87/image-20220605091208788.png)]

进入输入模式

  • 插入命令:i
  • 附加命令:a
  • 打开命令:o
  • 修改命令:c
  • 取代命令:r
  • 替换命令:s

实操题目

① 在/tmp目录下建立一个名为mytest的目录,进入mytest目录当中。
② 将/etc/man_db.conf复制到上述目录下面,使用vim打开目录下的man_db.conf文件。
③ 在vim中设定行号,移动到第58行,向右移动15个字符,请问你看到的该行前面15个字母组合是什么?
④ 移动到第一行,并且向下查找“gzip”字符串,请问它在第几行?
⑤ 将50~100行的man字符串改为大写MAN字符串,并且逐个询问是否需要修改,如何操作?如果在筛选过程中一直按“y”键,结果会在最后一行出现改变了多少个man的说明,请回答一共替换了多少个man。

⑥ 修改完之后,突然反悔了,要全部复原,有哪些方法?
⑦ 需要复制65~73这9行的内容,并且粘贴到最后一行之后。
⑧ 删除23~28行的开头为#符号的批注数据,如何操作?
⑨ 将这个文件另存成一个man.test.config的文件。
⑩ 到第27行,并且删除8个字符,结果出现的第一个单词是什么?在第一行新增一行,该行内容输入“I am a student…”;然后存盘后离开。

①
[root@localhost ~]# cd /tmp
[root@localhost ~]# mkdir mytest
[root@localhost ~]# cd ./mytest

②
[root@localhost mytest]# cp /etc/man_db.conf ./
[root@localhost mytest]# vim man_db.conf

③
进入vim之后
:set nu   		//设定行号
58G				//移动到第58行
15+空格	  	  //向右移动15个字符

④
gg跳转到第一行
GG跳转到最后一行
/gzip			//查找“gzip”字符串

⑤
//不加g的话只会替换每一行出现的第一个man,加上g都会替换
:50,100 s/man/MAN/gc   //s是替换的意思

⑥
u  //撤销

⑦
:65,73 y 		//将65到73的内容复制到剪切板
GG跳转到最后一行
P粘贴到最后一行的下面

⑧
:23,28 d 		//删除23-28行内容

⑨
:w man.test.config  另存为(存完后不是编辑新文件,还是原文件)

⑩
27G				//移动到27行
8x				//x表示删除当前光标所在单个字符

gg 				//跳转第一行
i+回车  		  //进入输入模式
在第一行插入并编辑“I am a student...”

:wq /存储并退出

①从1加到100

在这里插入图片描述


②实现用户输入数值范围

[root@localhost mytest]# vim test4.sh

#!/bin/bash
sum=0;
for((i=1;i<=$*;i++));do
((sum=sum+i))
done
echo $sum

[root@localhost mytest]# sh test4.sh 10
55

③用户输入数字计算

[root@localhost mytest]# vim test3.sh

#!/bin/bash
sum=0
for i in $*;do
let sum+=i
done
echo sum=$sum

[root@localhost mytest]# sh test3.sh 1 2 3 4 5 6
sum=21

④九九乘法表

[root@localhost ~]# vim test2.sh

#!/bin/bash
sum=0
for ((a=1; a<=9; a++))
do
  for ((b=1; b<=$a; b++))
  do
  sum=$[$a*$b]
  echo -ne "$a*$b=$sum\t"
  done
echo ""
done


第四章:用户和组管理

  • Linux操作系统是多用户多任务的操作系统
  • Linux系统下的用户账户分为两种:普通用户账户超级用户账户(root)
  • 组是具有相同特性的用户的逻辑集合,在做资源授权时可以把权限赋予某个组,组中的成员即可自动获得这种权限
  • 一个用户账户可以同时是多个组的成员,其中某个组是该用户的主组(私有组),其他组为该用户的附属组(标准组)

用户和组的基本概念

  • root用户的UID为:0
  • 系统用户的UID从1到999
  • 普通用户的UID可以在创建时由管理员指定,如果不指定,用户的UID默认从1 000开始顺序编号
  • 在Linux系统中,创建用户账户的同时也会创建一个与用户同名的组,该组是用户的主组。
  • 普通组的GID默认也是从1 000开始编号。
概 念描 述
用户名用来标识用户的名称,可以是字母、数字组成的字符串,区分大小写
密码用于验证用户身份的特殊验证码
用户标识(User ID, UID)用来表示用户的数字标识符
用户主目录用户的私人目录,也是用户登录系统后默认所在的目录
登录shell用户登录后默认使用的shell程序,默认为/bin/bash
具有相同属性的用户属于同一个组
组标识(Group ID,GID)用来表示组的数字标识符

用户账户信息 和 组信息分别存储在用户账户文件和组文件中

用户文件

①/etc/passwd 文件

Linux系统所创建的用户账户及其相关信息(密码除外)均放在 /etc/passwd 配置文件中

文件中的每一行代表一个用户的质料

打开方式:

  • 使用vim打开
  • cat /etc/passwd 打开

passwd文件的每一行用 “:” 分割为7个域,每一行各域的内容如下:

注意:少数字段的内容可以为空,但仍需要使用 ":"来进行占位表示该字段

用户名:加密口令:UID:GID:用户的描述信息:主目录:命令解析器(登录Shell)

每个域表示的内容:

字段说明
用户名登录时所使用的用户名
加密口令现在已经不使用了,而用”x“来填充该字段,真正的密码保存在shadow文件
UID用户号,唯一表示某用户的数字标识
GID用户所属的私有组号,该数字对应group文件中的GID
用户描述信息可选的关于用户全名、用户电话等描述性信息
主目录用户的宿主目录,用户成功登录后的默认目录
命令解析器用户所使用的Shell,默认为”/bin/bash“

②/etc/shadow 文件

由于所有用户对/etc/passwd文件均有读取权限,为了增强系统的安全性,用户经过加密之后的口令都存放在/etc/shadow文件中。/etc/shadow文件只对root用户可读。

即存放的是用户密码信息(要root用户才能打开查看)

打开方式:

  • cat /etc/shadow打开

shadow文件保存投影加密之后的口令以及与口令相关的一系列信息

每个用户的信息占一行,并且用 “:” 分割为9个域

每个域表示的内容:

字段说明
1用户登录名
2加密后的用户口令,*代表非登录用户,!!表示没有设置密码
3从1970.1.1日起,到用户最近一次修改口令的天数
4从1970.1.1日起,到用户可以更改密码的天数,即最短口令存活期
5从1970.1.1日起,到用户必须更改密码的天数,即最长口令存活期
6口令过期前几天提醒用户更改口令
7口令过期后几天账户被禁用
8口令被禁用的具体时间(相对于1970.1.1日至禁用时的天数)
9保留域,用于功能扩展

③/etc/login.defs 文件

用户登录信息

建立用户账户时会根据/etc/login.defs文件的配置设置用户账户的某些选项

打开方式:

  • cat /etc/login.defs打开

该配置文件的有效设置内容及中文注释如下所示
在这里插入图片描述

总结

在这里插入图片描述


组文件

①/etc/group 文件

组账户的信息存放在/etc/group文件中

而关于管理的信息(组口令、组管理员等)则存放在/etc/gshadow文件中

打开方式:

  • cat /etc/group 打开
  • 用于存放用户的组账户信息,对应该文件的内容,任何用户都可以读取
  • 每个组账户占一行,并且用”:“分隔为4个域
组名称:组口令(一般为空,用x占位):GID:组成员列表

②/etc/gshadow 文件

用于存放组的加密口令、组管理员等信息

打开方式:

  • cat /etc/gshadow 打开
  • 该文件只有root用户才可以读取
  • 每个组账户占一行,并且用”:“分隔为4个域
组名称:加密后的组口令(没有就用!):组的管理员:组成员列表

用户管理

①新建用户

新建用户可以使用useradd或者adduser命令

useradd命令的格式为:
useradd  [选项]  <username>

参数命令看书本 p94

例题:

新建用户user3,UID为1010,指定其所属的私有组为group1(group1组的标识符为1010),用户的主目录为/home/user3,用户的shell为/bin/bash,用户的密码为12345678,账户永不过期

// 先创建组
创建一个GID:1010的组,名字为group1
[root@localhost ~]# groupadd -g 1010 group1
// 再创建用户
[root@localhost ~]# useradd -u 1010 -g 1010 -d /home/user3 -s /bin/bash -p 123456 -f -1 user3

注意无论是组名还是用户名 都是写在创建语句的最后面的

注意:

要是用户已经存在,那么在执行useradd命令时,系统会提示用户已经存在

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bWEj7VJs-1660486693217)(…/%E5%9B%BE%E7%89%87/image-20220606203738267.png)]

②删除用户

要删除一个账户,可以直接删除/etc/passwd和/etc/shadow文件中要删除的用户所对应的行,或者用userdel命令删除

userdel  [-r]  用户名
  • 不加-r:只会删除文件中有关用户的信息全部删除
  • 加-r:删除用户的同时,还将用户的主目录以及其下的所有文件和目录全部删除掉。

③指定和修改用户账户口令

指定和修改用户账户口令的命令是passwd。超级用户可以为自己和其他用户设置口令,而普通用户只能为自己设置口令

passwd命令的格式为:
passwd  [选项]  [username]

参数命令看书本 p95

//root用户修改自己的口令,直接用passwd命令回车即可
[root@Server01 ~]# passwd

//root用户修改user1用户的口令
[root@Server01 ~]# passwd user1

注意:

  • ​ 普通用户修改自己的口令的时候,需要先验证用来的口令才可以修改

  • ​ 而root用户为用户指定口令时,不需要知道原来的口令

  • 口令的长度至少为8个字符


④修改账户和密码的有效期

要修改账户和密码的有效期,可以用chage命令实现

参数命令看书本 p96

例题:

设置user1用户的最短口令存活期为6天,最长口令存活期为60天,口令到期前5天提醒用户修改口令。设置完成后查看各属性值。

[root@Server01 ~]# chage -m 6 -M 60 -W 5 user1
[root@Server01 ~]# chage -l user1

⑤修改用户

usermod命令用于修改用户的属性

格式为:
usermod [选项] 用户名

可以用msermod命令修改已经创建的用户信息,如用户的UID、基本/扩展用户组、默认终端等

usermod命令的参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zKdFMJsY-1660486693218)(…/%E5%9B%BE%E7%89%87/image-20220606211418414.png)]

  • 查看用户的默认信息
[root@localhost ~]# id user22
uid=1022(user22) gid=1010(group1) 组=1010(group1)
  • 将user22加入到root用户组中
[root@localhost ~]# usermod -G root user22   // 命令
[root@localhost ~]# id user22
uid=1022(user22) gid=1010(group1) 组=1010(group1),0(root)
  • -u:修改user22用户的UID值
  • -g:修改用户的基本组ID
  • -G:修改用户的扩展组ID
[root@localhost ~]# usermod -u 8888 user22
[root@localhost ~]# id user22
uid=8888(user22) gid=1010(group1) 组=1010(group1),0(root)
  • 修改用户user22的主目录为/var/userl,把启动Shell修改为/bin/tesh,完成后恢复到初始状态

    [root@localhost ~]# usermod -d /var/user22 -s /bin/tcsh user22
    [root@localhost ~]# tail -3 /etc/passwd
    user4:x:1004:1004::/home/user4:/bin/bash
    user3:x:1010:1010::/home/user3:/bin/bash
    user22:x:8888:1010::/var/user22:/bin/tcsh
    
    // 恢复到初始状态
    [root@localhost ~]# usermod -d /var/user22 -s /bin/bash user22
    

注意:tail 命令可用于查看文件的内容,-3表示只显示文件尾3行

⑥禁用和恢复用户账户

禁用不是删除

禁用用户可以用

  • passwd命令
  • usermod命令
  • 也可以直接修改/etc/passwd 或 /etc/shadow 文件

例题:

禁用用户user22

  • 使用passwd命令 为!!

    [root@localhost ~]# passwd -l user22   //锁定用户user22
    锁定用户 user22 的密码 。
    passwd: 操作成功
     
    [root@localhost ~]# passwd -u user22   //解锁用户user22
    解锁用户 user22 的密码。
    passwd: 操作成功
    

​ // 查看指定的用户

  • 使用usermod命令 为!

    [root@localhost ~]# usermod -L user22  		//锁定用户user22
    
    //查看锁定的用户
    [root@localhost ~]# grep user22 /etc/shadow
    user22:!$6$HEjiEThd$INPXufKnB4HUJjYbbvk4OLAiEWIPVUKICi93RQ0xsxVy9sgN8bRyw54lZYwxCxU1vbzMZ/yCl1HCQfbVlvN.O.:22222:22:22:222:::
    
    
    [root@localhost ~]# usermod -U user22		//解锁用户user22
    
  • 直接修改用户账户配置文件

    可将/etc/passwd文件或/etc/shadow文件中关于user1账户的passwd域的第一个字符前面加上一个“*”,达到禁用账户的目的,在需要恢复的时候只要删除字符“*”即可。
    

如果只是禁止用户登录系统,可以将其启动Shell设置为/bin/fals 或者 /dev/null


⑦给用户改密码

echo “新密码”|passwd --stdin 用户名

管理组

管理组包括新建组、维护组账户和为组添加用户等内容

  • vim /etc/group 或 cat /etc/group 查看组信息

①创建组

创建组可以使用命令:groupadd 或 addgroup

// 创建一个叫testgroup的组
[root@localhost ~]# groupadd testgroup

可以使用 group -help 查看帮助手册


②删除组

格式为:

groupdel 组名字
// 删除testgroup的组
[root@localhost ~]# groupdel testgroup

==注意:==如果要删除的组是某个用户的主组,则该组不能被删除


③修改组

格式为:

groupmod [选项] 组名
  • groupmod -help 查看帮助手册

常用参数表:

选项说明
-g xxx把组的GID该成xxx
-n xxx把组的名字改为xxxxx
-o强制接受更改的组的GID为重复的号码

注意:所有的修改命令在最后加上原组名

如:改组名
groupmod -n 新组名 旧组名

④为组添加用户

在附属组中增加、删除用户都用 gpasswd 命令

只有root用户和组管理员才能够使用这个命令

格式为:

gpasswd [选项] [用户] [组]

查看:

vim /etc/gpasswd

常用参数表:

选项说明
-a把用户加入组
-d把用户踢出组
-r取消组的密码
-A给组指派管理员
// 把user1用户加入testgroup组中,并指派user1为组管理员
[root@Server01 ~]# groupadd  testgroup 
[root@Server01 ~]# gpasswd -a user1 testgroup
[root@Server01 ~]# gpasswd -A user1 testgroup

为用户组yyp设置密码

[root@localhost ~]# gpasswd  yyp

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CeKDiFbN-1660486693220)(…/%E5%9B%BE%E7%89%87/image-20220607210252952.png)]


账户管理

账户管理命令可以在非图形化操作中对账户进行有效管理

①su命令

su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户

//查看当前所登录的用户是谁
[root@localhost ~]# id
// 切换用户
[root@localhost ~]# su -用户名

注意:在su命令 和 用户名之间有一个 (-) 号,这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息


②vipw命令

vipw命令用于直接对用户账户文件 /etc/passwd 进行编辑

vipw命令在功能上等同于“vi /etc/passwd”命令,但是比直接使用vi命令更安全。

语法为:

[root@Server01 ~]# vipw

③vigr命令

vigr命令用于直接对组文件 /etc/group 进行编辑

vigr命令在功能上等同于“vi/etc/group”命令,但是比直接使用vi命令更安全。

语法为:

[root@Server01 ~]# vigr

④pwck命令

pwck命令用于验证用户账户文件认证信息的完整性 (作用是:用户)

该命令检测 /etc/passwd文件 和 /etc/shadow文件 每行中字段的格式和值是否正确。

语法为:

[root@Server01 ~]# pwck

⑤grpck命令

grpck命令用于验证文件认证信息的完整性(作用是:组)

该命令还可检测 /etc/group文件 和 /etc/gshadow文件 每行中字段的格式和值是否正确。

语法为:

[root@Server01 ~]# grpck

⑥id命令

id命令用于显示一个用户的UID和GID以及用户所属的组列表。

在命令行输入id直接回车将显示当前用户的ID信息。

语法为:

id  [选项] 用户名

⑦whoami命令

whoami命令用于显示当前用户的名称

whoami命令与 “id -un” 命令的作用相同

[user1@Server01 ~]$ whoami
User1
[root@Server01 ~]# exit
logout

⑧newgrp命令

切换用户的主组

看书吧:p102

// 将root用户的主组改为group1
[root@Server01 ~]# newgrp group1      	//改变用户的主组
// 将用户的组主切换回私有组
[root@Server01 ~]# newgrp      	//newgrp命令不指定组时转换为用户的私有组

使用groups命令可以列出指定用户的组

[root@localhost ~]# whoami
root
[root@localhost ~]# groups
root group1

实战项目

# 先处理账号相关属性的数据:
[root@Server01 ~]# groupadd mygroup1
[root@Server01 ~]# useradd -G mygroup1 -c "1st user" myuser1
[root@Server01 ~]# useradd -G mygroup1 -c "2nd user" myuser2
[root@Server01 ~]# useradd -c "3rd user" -s /sbin/nologin myuser3

# 再处理账号的口令相关属性的数据:
[root@Server01 ~]# echo "password" | passwd --stdin myuser1
[root@Server01 ~]# echo "password" | passwd --stdin myuser2
[root@Server01 ~]# echo "password" | passwd --stdin myuser3


第五章:文件系统

前要知识点

  • 文件系统(File System)是磁盘上有特定格式的一片区域
  • 操作系统利用文件系统保存管理文件
  • 文件系统的作用是合理规划硬盘,以保证用户正常的使用需求

常见的文件系统

  1. Ext4:Ext3的改进版本,作为RHEL 6系统中的默认文件管理系统,它支持的存储容量高达1EB(1EB=1 073 741 824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配,从而极大地提高了读写效率 。
  2. XFS:是一种高性能的日志文件系统,而且是RHEL 8中默认的文件管理系统。
    RHEL 8系统中一个比较大的变化就是使用了XFS作为文件系统,XFS文件系统可支持高达18EB的存储容量。

Linux的目录结构

  • Linux中一切都是文件
  • Linux系统中的一切文件都是从”根(/)“目录开始的
  • 按照文件系统层次标准采用树形结构来存放文件
  • Linux中的文件和目录名严格区分大小写
  • 文件名称中不得含有斜杠(/)

文件对应的作用

目录名称作用
/Linux文件最上层的根目录
/root系统管理员的家日录
/home用户家目录
/boot开机所需文件——内核、开机蔡单以及所需配置文件等
/lib开机时用到的函数库,以及/bin与/sbin下面的命令要词用的函数
/sbin开机过程中需要的命令
/etc配置文件
/dev以文件形式存放任何设备与接口
/binbinary的缩写,存放用户的可运行程序。如ls、cp等,也包含其他Shell,如 bash和cs等
/media用于挂载设备文件的目录
/srv一些网络服务的数据文件目录
/tmp任何人均可使用的“共亨”临时目录
/proc虑拟文件系统,例如系统内核、进程、外部设备及网络状态等
/opt放置第三方的软件
/usr/local用户自行安装的软件
/usr/sbinLinux系统开机时不会使用到的软件/命令/脚本
/usr/share帮助与说明文件,也可放置共享文件
/var主要存放经常变化的文件,如日志
/lost+found当文件系统发生错误时,将一些丢失的文件片段存放在这里

绝对路径与相对路径

  • 绝对路径:由根目录(/)开始写起的文件名或目录名称,如/home/dmtsai/basher
  • 相对路径:相对于目前路径的文件名写法,如./home/dmtsai或…/…/home/dmtsai/等

开头不是 ”/“ 的就属于相对路径的写法

./ 或 (.)代表:当前目录

…/ 或 (…)代表:上一层目录

如果想要进入/var/log这个目录时,可以怎么写呢?有两种方法。
cd   /var/log:绝对路径。
cd  ../var/log:相对路径。

文件管理权限

  • 文件是操作系统用来存储信息的基本结构,是一组信息的集合。
  • 文件通过文件名来唯一标识,文件名最长255个字符可以用A~Z、0 ~9、.、_、-等符号表示
  • 与其他操作系统相比,Linux最大的不同就是没有“扩展名”的概念,也就是说文件的名称和该文件的种类并没有直接的关联。例如,sample.txt可能是一个运行文件,而sample.exe也有可能是文本文件,甚至可以不使用扩展名。
  • 另一个特性是Linux文件名区分大小写,而windows和DOS系统是不区分的
  • 如果文件以 ”.“ 开始,表示该文件为隐藏文件,需要使用 ls -a 命令才能显示
  • 在Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

3种访问方式限制访问权限:

  • 只允许用户自己访问
  • 允许组内用户使用
  • 允许系统中的任何用户访问
  • 根据赋予权限的不同,3种不同的用户(所有者、用户组或其他用户)能够访问不同的目录或者文件。
  • 每一个用户针对系统中的所有文件都有它自身的读、写和执行权限。
  • 一个文件或目录可能有读、写、执行权限
  • 所有者:是创建文件的用户,文件所有者能够授予所在用户组以及其他用户的文件访问权限

3套权限

  • 第一套权限控制访问自己的文件权限,即所有者权限。
  • 第二套权限控制用户组访问其中一个用户的文件的权限。
  • 第三套权限控制其他所有用户访问一个用户的文件的权限。

这3套权限构成了9种类型的权限组

我们可以用 “ls -l” 或者 ll 命令显示文件的详细信息,其中包括权限。如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rRFU9Yr4-1660486693222)(…/%E5%9B%BE%E7%89%87/image-20220608212516255.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I7bG6IwE-1660486693223)(…/%E5%9B%BE%E7%89%87/image-20220608212542865.png)]

每行的第一个字符一般用来区分文件的类型,一般取值为:

  • d:目录
  • -:普通文件
  • l:符号链接文件,实际上它指向另外一个文件
  • b、c:分别表示该文件为区块设备其他的外围设备,是特殊类型的文件
  • s、p:分别表示这些文件关系到系统的数据结构管道,通常很少见到

①文件的详细信息

文件的详细信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FhXCeZuh-1660486693223)(…/%E5%9B%BE%E7%89%87/image-20220608213339397.png)]

②文件类型权限

文件类型权限由10个字符组成

  • 第一个位置表示文件类型

  • 第2~10个字符表示文件的访问权限(这9个字符每3个为一组)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-va8HSIte-1660486693224)(…/%E5%9B%BE%E7%89%87/image-20220608214230965.png)]

  • r (read,读取)

    • 对文件:有读取文件内容的权限
    • 对目录:具有浏览目录的权限
  • w (write,写入)

    • 对文件:有新增、修改文件内容的权限
    • 对目录:有删除、移动目录内文件的权限
  • x (execute,执行)

    • 对文件:具有执行文件的权限
    • 对目录:具有进入目录的权限

  • 每个用户都拥有自己的主目录,通常在 /home 目录下,这些主目录的默认权限为rwx——
  • 执行mkdir命令创建的目录,默认权限为 rwxr-xr-x
  • 默认权限可以用umask命令修改
    • 只需要执行 umask 777 命令,便代表屏蔽所有的权限,因而之后建立的文件或目录,其权限都变成000,以此类推
  • 用户登录系统时,用户环境就会自动执行 rmask 命令决定文件、目录的默认权限

③特殊权限

  • s:所有者:SUID
  • s:组成员:SGID
  • t:全部人:Stickey

小写开启,大写关闭,放在执行位

大写是表示错误状态:原本这人连执行权力都没有

需要注意的是,SUID,SGID,SBID权限都是在可执行权限的基础上添加的,如果原本的文件或者目录没有可执行权限,那么添加这三个特殊权限后,将会显示错误状态:大写标识(如-rwSr–r–,即原文件没有可执行权限,但是加上SUID,即显示大写S)。


④文件权限修改

通常有两种方式来表示权限类型:数字表示法文字表示法

chmod命令来修改权限

其格式为:

chmod   选项    文件

数字表示法

  • 读取(r):4
  • 写入(w):2
  • 执行(x):1
  • 没有授予的部分就表示为0,然后再把所授予的权限相加而成

文字表示法

使用权限的文字表示法时,系统用4种字母来表示不同的用户。

  • u:user,表示所有者。
  • g:group,表示属组。
  • o:others,表示其他用户。
  • a:all,表示以上3种用户。

使用下面3种字符的组合表示法设置操作权限。

  • r:read,可读。
  • w:write,写入。
  • x:execute,执行。

操作符号包括以下3种

  • +:添加某种权限。
  • -:减去某种权限。
  • =:赋予给定权限并取消原来的权限。
例子:
[root@Server01 yy]# chmod u=rw,g=rw,o=r /yy/file

注意:

修改目录 和 文件的命令相同,都是使用chmod,但目录中可以用 ”*“ 来表示修改目录中的所有文件

例子:
要同时将 /yy 目录中的所有文件权限设置为所有人都可以读写
[root@Server01 yy]# chmod a=rw /yy*
或
[root@Server01 yy]# chmod 666 /yy*

如果目录中包含其他子目录,则必须使用 -R 参数来同时设置所有文件及子目录的权限


利用chmod命令也可以修改文件的特殊权限。

例如,要设置文件/yy/file文件的SUID权限的方法为:
[root@Server01 yy]# chmod u+s /yy/file
[root@Server01 yy]#ll
总用量0
-rwSrw-rw- 1 root root 0 10月3 21:43 file

特殊权限也可以采用数字表示法。

  • SUID:4
  • SGID:2
  • Sticky : 1

⑤文件的所有者与属组修改

要修改文件的所有者,使用命令:chown

chown 选项 用户和属组 文件列表
  • 用户和属组可以是 名称 也可以是 UID或GID。多个文件之间用空格分隔。
// 例如,要把/yy/file文件的所有者修改为test用户,命令如下:

[root@localhost yy]# chown test /yy/file
[root@localhost yy]# ll
总用量 0
-rw-rwSr--. 1 test root 0 6月   8 22:28 file

例子二:

chown命令可以同时修改文件的 所有者属组,用 “:” 分隔

// 例如,将/yy/file文件的 所有者 和 属组 都改为test的命令如下所示:

[root@localhost yy]# chown test:test /yy/file
[root@localhost yy]# ll
总用量 0
-rw-rwSr--. 1 test test 0 6月   8 22:28 file
[root@localhost yy]# 

例子三:

如果只修改文件的属组可以使用下列命令:

[root@localhost yy]# chown :test /yy/file

例子四:

修改文件的属组也可以使用 chgrp命令。命令范例如下所示

[root@localhost yy]# chgrp test /yy/file

扩展:

ls -ld 文件名  	//查看具体单个文件信息 
  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值