Linux系统一切皆是文件
pwd命令用于显示用户当前所处的目录
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 //改变目录位置至用户登录时的工作目录
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
一样用于查看文件的信息情况
书P49
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文件中原有内容的后面。
在使用cat命令时,如果文件太长,用户只能看到文件的最后一部分。这时可以使用more命令,一页一页地分屏显示文件的内容。
常用的参数:
- -num:这里的num表示一个数字,用来指定分页显示时每页的行数
- +num:指定从文件的第num行开始显示
[root@Server01 ~]#more /etc/passwd
// 以分页方式查看/etc/passwd文件的内容
[root@Server01 ~]#cat /etc/passwd |more
// 以分页方式查看passwd文件的内容
less命令是more命令的改进版,比more命令的功能强大。more命令只能向下翻页,而less命令可以向下、向上翻页,甚至可以前后左右移动。
head命令用于显示文件的开头部分,默认情况下只显示文件的前10行内容
语法:head [参数] 文件名
常用的参数:
- -n num:显示指定文件的前num行。
- -c num:显示指定文件的前num个字符。
tail命令用于显示文件的末尾部分,默认情况下,只显示文件的末尾10行内容
语法:tail [参数] 文件名
常用的参数:
- -n num:显示指定文件的末尾num行。
- -c num:显示指定文件的末尾num个字符。
- +num:从第num行开始显示指定文件的内容。
tail 最强悍的功能是可以持续刷新一个文件的内容。可以用来查看实时的最新文件日志
mkdir命令用于创建一个目录
语法:mkdir [参数] 目录名
常用的参数:
- -p:在创建目录时,如果父类目录不存在,则同时创建该目录及该目录的父目录
[root@Server01 ~]#mkdir dir1 //在当前目录下创建dir1子目录
[root@Server01 ~]#mkdir -p dir2/subdir2
//在当前目录的dir2目录中创建subdir2子目录,如果dir2目录不存在,则同时创建
rmdir命令用于删除空目录
语法:rmdir [参数] 目录名
上述目录名可以为相对路径,也可以为绝对路径。但所删除的目录必须为空目录。
常用的参数:
- -p:在删除目录时,一起删除父目录,当父目录中必须没有其他的目录及文件
[root@Server01 ~]#rmdir dir1 //在当前目录下删除dir1空子目录
[root@Server01 ~]#rmdir -p dir2/subdir2
//删除当前目录中dir2/subdir2子目录,//删除subdir2目录时,如果dir2目录中无其他目录,则一起删除
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
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
rm命令主要用于文件或目录的删除
语法:rm [参数] 文件名或目录名
常用的参数:
- -i:删除文件或目录时提示用户。
- -f:删除文件或目录时不提示用户。
- -R:递归删除目录,即包含目录下的文件和各级子目录。
//删除当前目录下的所有文件,但不删除子目录和隐藏文件
[root@Server01 ~]#rm *
//删除当前目录下的子目录subdir11,包含其下的所有文件和子目录,并提示用户确定
[root@Server01 ~]#rm -iR subdir11
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日
gzip:压缩文件,压缩后的文件以".gz"结尾
gunzip:解压文件
语法:
gizp -v 文件名
gunzip -v 文件名
常用的参数:
- -v:显示被压缩文件的压缩比或解压时的信息
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
用来查询命令的作用是什么
语法:whatis [参数] 命令名称
用来查询当前用户是谁
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的目录并显示
grep命令用于查找文件中包含有指定字符串的行
语法:grep [参数] 要查找的字符串 文件名
- timedatectl:设置时间
- cal:查看日历
- clock:用于从计算机硬件获得日期和时间(root用户才能用)
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)]
设置特点时间运行指定的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'程序
man命令用于列出命令的帮助手册(P书本61)
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 是用户与操作系统内核之间的接口,起着协调用户与系统的一致性和在用户与系统之间进行交互的作用
Shell有如下功能
①.变量的定义
在shell中,变量的赋值格式如下:
name = string
其中,name是变量名,它的值就是string,“=”是赋值符号。
②.变量的引用
通过在变量名(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变量分为局部变量和全局变量
⑤.环境变量
环境变量是指由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)系统中的用户工作环境设置文件。
(2)用户设置的环境设置文件。
登录环境设置文件:$HOME/.bash_profile。
非登录环境设置文件:$HOME/.bashrc。
grep命令
正则表达式:
基础正则表示的特殊字符汇总成表如下
重定向符 | 说 明 |
---|---|
< | 实现输入重定向。 |
> 或 >> | 实现输出重定向。 |
2> 或 2>> | 实现错误重定向 |
&> | 同时实现输出重定向 和 错误重定向 |
重定向的例子
bash输入输出重定向可以通过使用下面选项设置为不覆盖已存在文件
例子:
注意事项
如何运行一个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是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)]
进入输入模式:
① 在/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 /存储并退出
[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
用户和组的基本概念
概 念 | 描 述 |
---|---|
用户名 | 用来标识用户的名称,可以是字母、数字组成的字符串,区分大小写 |
密码 | 用于验证用户身份的特殊验证码 |
用户标识(User ID, UID) | 用来表示用户的数字标识符 |
用户主目录 | 用户的私人目录,也是用户登录系统后默认所在的目录 |
登录shell | 用户登录后默认使用的shell程序,默认为/bin/bash |
组 | 具有相同属性的用户属于同一个组 |
组标识(Group ID,GID) | 用来表示组的数字标识符 |
用户账户信息 和 组信息分别存储在用户账户文件和组文件中
Linux系统所创建的用户账户及其相关信息(密码除外)均放在 /etc/passwd 配置文件中
文件中的每一行代表一个用户的质料
打开方式:
passwd文件的每一行用 “:” 分割为7个域,每一行各域的内容如下:
注意:少数字段的内容可以为空,但仍需要使用 ":"来进行占位表示该字段
用户名:加密口令:UID:GID:用户的描述信息:主目录:命令解析器(登录Shell)
每个域表示的内容:
字段 | 说明 |
---|---|
用户名 | 登录时所使用的用户名 |
加密口令 | 现在已经不使用了,而用”x“来填充该字段,真正的密码保存在shadow文件中 |
UID | 用户号,唯一表示某用户的数字标识 |
GID | 用户所属的私有组号,该数字对应group文件中的GID |
用户描述信息 | 可选的关于用户全名、用户电话等描述性信息 |
主目录 | 用户的宿主目录,用户成功登录后的默认目录 |
命令解析器 | 用户所使用的Shell,默认为”/bin/bash“ |
由于所有用户对/etc/passwd文件均有读取权限,为了增强系统的安全性,用户经过加密之后的口令都存放在/etc/shadow文件中。/etc/shadow文件只对root用户可读。
即存放的是用户密码信息(要root用户才能打开查看)
打开方式:
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/group文件中
而关于组管理的信息(组口令、组管理员等)则存放在/etc/gshadow文件中
打开方式:
- 用于存放用户的组账户信息,对应该文件的内容,任何用户都可以读取
- 每个组账户占一行,并且用”:“分隔为4个域
组名称:组口令(一般为空,用x占位):GID:组成员列表
用于存放组的加密口令、组管理员等信息
打开方式:
- 该文件只有root用户才可以读取
- 每个组账户占一行,并且用”:“分隔为4个域
组名称:加密后的组口令(没有就用!):组的管理员:组成员列表
新建用户可以使用useradd或者adduser命令
useradd命令的格式为:
useradd [选项]
参数命令看书本 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] 用户名
指定和修改用户账户口令的命令是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)
[root@localhost ~]# usermod -G root user22 // 命令
[root@localhost ~]# id user22
uid=1022(user22) gid=1010(group1) 组=1010(group1),0(root)
[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行
禁用不是删除
禁用用户可以用
例题:
禁用用户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 用户名
管理组包括新建组、维护组账户和为组添加用户等内容
创建组可以使用命令:groupadd 或 addgroup
// 创建一个叫testgroup的组
[root@localhost ~]# groupadd testgroup
可以使用 group -help 查看帮助手册
格式为:
groupdel 组名字
// 删除testgroup的组
[root@localhost ~]# groupdel testgroup
==注意:==如果要删除的组是某个用户的主组,则该组不能被删除
格式为:
groupmod [选项] 组名
常用参数表:
选项 | 说明 |
---|---|
-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命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户
//查看当前所登录的用户是谁
[root@localhost ~]# id
// 切换用户
[root@localhost ~]# su -用户名
注意:在su命令 和 用户名之间有一个 (-) 号,这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息
vipw命令用于直接对用户账户文件 /etc/passwd 进行编辑
vipw命令在功能上等同于“vi /etc/passwd”命令,但是比直接使用vi命令更安全。
语法为:
[root@Server01 ~]# vipw
vigr命令用于直接对组文件 /etc/group 进行编辑
vigr命令在功能上等同于“vi/etc/group”命令,但是比直接使用vi命令更安全。
语法为:
[root@Server01 ~]# vigr
pwck命令用于验证用户账户文件认证信息的完整性 (作用是:用户)
该命令检测 /etc/passwd文件 和 /etc/shadow文件 每行中字段的格式和值是否正确。
语法为:
[root@Server01 ~]# pwck
grpck命令用于验证组文件认证信息的完整性(作用是:组)
该命令还可检测 /etc/group文件 和 /etc/gshadow文件 每行中字段的格式和值是否正确。
语法为:
[root@Server01 ~]# grpck
id命令用于显示一个用户的UID和GID以及用户所属的组列表。
在命令行输入id直接回车将显示当前用户的ID信息。
语法为:
id [选项] 用户名
whoami命令用于显示当前用户的名称
whoami命令与 “id -un” 命令的作用相同
[user1@Server01 ~]$ whoami
User1
[root@Server01 ~]# exit
logout
切换用户的主组
看书吧: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
前要知识点
常见的文件系统
- Linux中一切都是文件
- Linux系统中的一切文件都是从”根(/)“目录开始的
- 按照文件系统层次标准采用树形结构来存放文件
- Linux中的文件和目录名严格区分大小写
- 文件名称中不得含有斜杠(/)
文件对应的作用
目录名称 | 作用 |
---|---|
/ | Linux文件最上层的根目录 |
/root | 系统管理员的家日录 |
/home | 用户家目录 |
/boot | 开机所需文件——内核、开机蔡单以及所需配置文件等 |
/lib | 开机时用到的函数库,以及/bin与/sbin下面的命令要词用的函数 |
/sbin | 开机过程中需要的命令 |
/etc | 配置文件 |
/dev | 以文件形式存放任何设备与接口 |
/bin | binary的缩写,存放用户的可运行程序。如ls、cp等,也包含其他Shell,如 bash和cs等 |
/media | 用于挂载设备文件的目录 |
/srv | 一些网络服务的数据文件目录 |
/tmp | 任何人均可使用的“共亨”临时目录 |
/proc | 虑拟文件系统,例如系统内核、进程、外部设备及网络状态等 |
/opt | 放置第三方的软件 |
/usr/local | 用户自行安装的软件 |
/usr/sbin | Linux系统开机时不会使用到的软件/命令/脚本 |
/usr/share | 帮助与说明文件,也可放置共享文件 |
/var | 主要存放经常变化的文件,如日志 |
/lost+found | 当文件系统发生错误时,将一些丢失的文件片段存放在这里 |
开头不是 ”/“ 的就属于相对路径的写法
./ 或 (.)代表:当前目录
…/ 或 (…)代表:上一层目录
如果想要进入/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)]
每行的第一个字符一般用来区分文件的类型,一般取值为:
文件的详细信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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,执行)
小写开启,大写关闭,放在执行位
大写是表示错误状态:原本这人连执行权力都没有
需要注意的是,SUID,SGID,SBID权限都是在可执行权限的基础上添加的,如果原本的文件或者目录没有可执行权限,那么添加这三个特殊权限后,将会显示错误状态:大写标识(如-rwSr–r–,即原文件没有可执行权限,但是加上SUID,即显示大写S)。
通常有两种方式来表示权限类型:数字表示法 和 文字表示法
chmod命令来修改权限
其格式为:
chmod 选项 文件
数字表示法:
文字表示法:
使用权限的文字表示法时,系统用4种字母来表示不同的用户。
使用下面3种字符的组合表示法设置操作权限。
操作符号包括以下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
特殊权限也可以采用数字表示法。
要修改文件的所有者,使用命令:chown
chown 选项 用户和属组 文件列表
// 例如,要把/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 文件名 //查看具体单个文件信息