Bootstrap

Linux 常用命令上篇

编辑命令:
Ctrl + a  :移到命令行首
Ctrl + e  :移到命令行尾
Ctrl + u  :从光标处删除至命令行首
Ctrl + k  :从光标处删除至命令行尾
Ctrl + w :从光标处删除至字首
Ctrl + d :删除光标处的字符
Ctrl + h :删除光标前的字符

重新执行命令:
Ctrl + p:历史中的上一条命令
ESC + .:打印之前执行过的命令的最后一部分  以空格为分隔符

控制命令:
Ctrl + l:清屏
Ctrl + c:终止命令

Tab键: 自动补全

1、Linux目录结构

在linux系统中一切皆文件

1.1 WINDOWS/LINUX 对比

Windows: 以多根的方式组织文件 C:\ D:\ E:\

Linux: 以单根的方式组织文件"/"

1.2 简介

/目录结构:
FSH (Filesystem Hierarchy Standard):标准的目录结构
[root@localhost ~]# ls /
a1dir1  boot  dir  home  lib64  mnt  proc  run   srv  tmp  var
bin     dev   etc  lib   media  opt  root  sbin  sys  usr

注:linux一切皆文件,文件类型不同

1.4 目录功能

bin 普通用户使用的命令 /bin/ls, /bin/date
sbin 管理员使用的命令 /sbin/service 
案例:
[root@localhost ~]# which ls
/bin/ls
[root@localhost ~]# which useradd
/sbin/useradd
​
dev 设备文件 /dev/sda,/dev/sda1
[root@localhost ~]# ll /dev/sd*
brw-rw----. 1 root disk 8, 0 4月  16 14:31 /dev/sda
brw-rw----. 1 root disk 8, 1 4月  16 14:31 /dev/sda1
brw-rw----. 1 root disk 8, 2 4月  16 14:31 /dev/sda2
[root@localhost ~]# tty
/dev/pts/4  #这是我们的终端。
​
/root        #root用户的家目录
/home        #存储普通用户家目录 
lost+found   #这个目录平时是空的,存储系统非正常关机而留下“无家可归”的文件
/usr         #系统文件,相当于C:\Windows
/usr/local   #软件安装的目录,相当于C:\Program
/usr/bin     #普通用户使用的应用程序
/usr/sbin    #管理员使用的应用程序
/usr/lib     #库文件Glibc 32bit
/usr/lib64   #库文件Glibc 64bit
/boot        #存放的系统启动相关的文件,例如kernel
/etc         #配置文件(系统相关如网络/etc/sysconfig/network)
/tmp         #临时文件(系统:程序产生的临时文件)
/opt         #空目录
/var         #存放的是一些变化文件,比如数据库,日志,邮件....
/proc        #虚拟文件系统,系统程序文件所处目录 。虚拟文件系统:只要关机就会没有。
===设备(主要指存储设备)挂载目录===
/mnt         #系统提供这个目录是让用户临时挂载其他的文件系统

路径详解

所谓路径即目录组成结构
一个linux路径由"/"和目录(文件)名称两部分组成
比如:/etc/passwd
    如果"/"出现在路径开头,则其表示根目录,在路径中间出现"/",其含义是某一个目录下,那么上面所示路径的意思就是"根目录下的etc目录下的passwd文件"
    如果路径最后出现"/",则表示这是一个目录

2、Linux系统基础命令

2.1 登录root用户

超级管理员用户,权限最高

[root   @   localhost       ~       ]       #
用户          主机名     当前用户家目录     管理员用户

2.2 修改主机名

[root@localhost /]# hostnamectl set-hostname reece

需要断开重连一下,主机名才会变化

2.3 新建用户

[root@reece ~]# useradd kali    #新建用户
[root@reece ~]# id kali         #查看用户kali是否存在
uid=1002(kali) gid=1002(kali) 组=1002(kali)  #存在会显示用户信息
[root@reece ~]# id alice        #查看alice是否存在
id: alice: no such user         #提示用户不存在
​
注释:useradd创建用户,用户无密码;暂时不可以使用此用户进行远程连接
​
[root@reece ~]# passwd kali     #root用户可以给任何普通用户设置密码,且不用遵循密码复杂策略;普通用户只能给自己设置密码,且需要遵循密码复杂策略
切换用户:
su ---switch user
[root@reece ~]# su - kali       #切换用户:由root用户切换到其他用户,无需输入密码;由普通用户切换到其他用户需要输入密码
[kali@reece ~]$ 
$符号:代表普通用户
#符号:代表root用户
​
[kali@reece ~]$ exit            #退出普通用户,会返回上一次所登录用户,连续退出,直到最后会断开连接
注:# Ctrl+D 也可退出
[root@reece ~]# passwd kali     #root用户修改普通用户密码直接就修改为新密码
[kali@reece ~]$ passwd          #普通用户修改密码需知原密码才可修改,且需遵顼密码复杂原则

验证思路:用普通用户kali切换到另一个普通用户,会让输入密码;

2.4 查看时间:date

[root@reece ~]# date        #显示年月日,周,具体时间
[root@reece ~]# date +%F    #只显示当前年月日
[root@reece ~]# date +%X    #只显示当前时间到秒
[root@reece ~]# date +%x    #也显示当前年月日
[root@reece ~]# date +%x%X  #显示年月日时分秒

2.5 查看当前所在目录

linux操作系统最顶层目录:根目录 ” / “

[root@reece ~]# pwd         #显示当前工作路径且是绝对路径pwd ---Print working directory               

注释:root用户家目录在/root

普通用户的家目录在:/home/用户名目录; 比如kali用户,它的家目录就是/home/kali

2.6 查看文件信息:ls(list files)

[root@reece /]# ls          #查看当前目录下所有的文件
[root@reece /]# ls /root    #查看某个目录下所有的文件
[root@reece /]# ls /home    #查看指定目录下所有的文件
[root@reece /]# ls /        #查看根目录下所有的文件
[root@reece /]# ls -l       #长格式显示(显示文件的详细信息)
drwxr-xr-x.     20        root      root  
文件类型\权限  硬链接个数    所有者     所属组
 282        4月  16 14:31            var
大小          修改时间                名字
​
[root@reece /]# ls -l /home     #查看/home目录下所有文件的详细信息
# 每个命令,都有自身的参数,每个参数理解为是命令的一个功能
​
[root@reece ~]# ls -l -d /home  #显示目录的详细信息
[root@reece ~]# ll -d /home/    #显示目录的详细信息
[root@reece ~]# ll -ld /home/   #显示目录的详细信息
​
#ls -lh     #-h 人性化显示(显示文件大小) -h要和-l结合使用,才有效果
#ls -a      #all 显示所有文件(包含隐藏文件)
#ls -i      #显示文件的inode号
​
[root@reece ~]# ll /home/       #查看目录下面文件的详细信息
[root@reece ~]# ll -t           #按最新的修改时间排序
[root@reece ~]# clear           #清屏,快捷键---ctrl+l
​
#隐藏文件:文件名称前面加" . "
注释:ll  相当于  ls -l

2.7 切换目录:cd(change directory)

. 表示当前目录
[root@reece ~]# cd /home/kali
[root@reece kali]# pwd      
/home/kali
[root@reece ~]# cd          #直接回车,切换到当前用户家目录下
[root@reece ~]# cd ~        #切换到当前用户家目录下
[root@reece ~]# cd ..       #切换到上一级目录
[root@reece /]# cd ../..    #切换到上一级的上一级的目录
以此类推
[root@reece /]# cd -        #切换到上一次所在目录

2.8 绝对路径和相对路径

Linux绝对路径与相对路径 在Linux中,路径可以分为两类:绝对路径和相对路径 1.绝对路径: 绝对路径是从根目录(/)开始的完整路径,不依赖于当前工作目录。例如,/home/kali是一个绝对路径

2.相对路径: ​ 相对路径是相对于当前工作目录的路径。例如,如果当前工作目录是/home/,要指向同一目录下的kali目录,可以只用kali作为路径,这就是相对路径。

在命令行中使用这些路径时,可以这样做:

# 切换到绝对路径目录
[root@reece /]# cd /home/kali
​
# 使用绝对路径执行命令
[root@reece kali]# ls /home/kali
​
# 切换到相对路径目录
[root@reece kali]# cd ../
​
# 使用相对路径执行命令
[root@reece home]# ls kali

2.9 创建文件:touch

[root@reece ~]# touch a.txt
[root@reece ~]# touch b.txt c.txt
[root@reece ~]# touch /home/kali/z.txt
[root@reece ~]# touch /home/dir/a.txt /home/dir9/a.txt  #一次性在多个目录下创建文件
[root@reece ~]# touch {1..7}.txt        #批量创建文件
[root@reece ~]# touch /home/{1..7}.txt  #绝对路径方式,批量创建文件
​
注释:重复创建文件,不会覆盖文件,只会更新它的修改时间
echo  加内容   >  加文件名    #覆盖:把之前的内容替换掉
# echo 123 > a.txt
echo  加内容  >> 加文件名     #追加:保留之前的内容,在后面添加新内容
# echo 345345 >> a.txt
​
当使用echo 123 >> a.txt 这个命令的时候在文件不存在的时候会创建该文件并将内容追加到改文件中

2.10 创建目录:mkdir

[root@reece ~]# mkdir dir1
[root@reece ~]# mkdir dir1 dir2
[root@reece ~]# mkdir /mnt/dir3
[root@reece ~]# mkdir /home/dir1 /mnt/dir2
[root@reece ~]# mkdir dir{1..10}
[root@reece ~]# mkdir /home/dir{5..7} /mnt/dir9 /mnt/dir10
​
注释:目录无法被重建,一旦重建,会提示已存在
​
[root@reece ~]# mkdir -v /home/dir77            #-v:verbose 冗长的。显示创建时的详细信息
[root@reece ~]# mkdir -p /home/dir77/111/222    #-p 创建连级目录,一级一级的创建
[root@reece ~]# mkdir -vp /home/bb/aa
mkdir: 已创建目录 "/home/bb"
mkdir: 已创建目录 "/home/bb/aa"

2.11 移动/修改文件:mv

移动文件

[root@reece ~]# mv file1.txt /home/kali #将文件file1.txt 移动到目录 /home/kali 中
[root@reece ~]# mv /mnt/file.txt .      #将/mnt目录下的file.txt 移动到当前目录下

重命名文件

[root@reece ~]# mv oldname.txt newname.txt  #将文件 oldname.txt 重命名为 newname.txt

移动并重命名

[root@reece ~]# mv file1.txt /home/kali/file7.txt   #将文件file1.txt 移动到目录 /home/kali中,并重命名为file7.txt

移动多个文件

[root@reece ~]# mv file1.txt file2.txt dir/ #将多个文件(如'file1.txt', 'file2.txt')移动到目录'dir/'中
​
[root@reece ~]# mv dir77/* .    #将dir77目录下所有的文件,移动到当前目录下

重命名目录

[root@reece ~]# mv olddir/ newdir/  #将目录 'olddir/' 重命名为 'newdir/'

交互式移动

[root@reece ~]# mv -i source.txt target.txt  #在移动过程中,如果目标位置已有同名文件,会提示用户是否覆盖
​
mv = mv -i

备份被覆盖的文件

[root@reece ~]# mv -b source.txt target.txt  #在移动并覆盖文件之前,备份被覆盖的文件

2.12 删除文件:rm

-r  递归删除目录
-f  force强制
-v  详细过程
​
[root@reece ~]# rm -rf dir3         #强制删除目录以及目录下的文件;忽略提示
[root@reece ~]# rm -rf dir77/a.txt  #仅强制删除dir77目录下的a.txt文件
[root@reece ~]# rm -rf a.txt
[root@reece ~]# rm -rf *            #删除当前目录下的所有文件(不包含隐藏文件)
[root@reece ~]# rm -rf .*           #删除当前目录下所有的隐藏文件(不包含普通文件)
[root@reece ~]# rm -rf ./*          #删除当前目录下所有的文件(不包含隐藏文件)
[root@reece ~]# rm -rf /home/dir1 /mnt/dir10    #一次性删除多个目录

2.13 关机

[root@localhost ~]# init 0
[root@localhost ~]# poweroff

2.14 重启

[root@localhost ~]# reboot
[root@localhost ~]# init 6

2.15 虚拟机快照

拍摄快照:虚拟机是关机状态;拍摄的快照文件小;虚拟机是开机状态,拍摄的快照文件大;所以我们一般都是先将虚拟机关闭,再拍摄快照。

问题1:企业中的机器,是否能进行快照功能恢复虚拟机的状态?

答:不能。比如一台存放用户数据的虚拟机,随着时间的增长,有很多用户的账号密码等信息都存储到这台虚拟机上;由于出错,直接回复到原来快照的某个状态;用户的数据会丢失;所以企业中通常是不会恢复快照的。

所以快照只用于学习,便于还原而已。

2.16 命令别名

查看别名:
[root@localhost ~]# type -a ll
ll 是 `ls -l --color=auto' 的别名
​
设置别名:
语法:alias 别名='命令'
案例1:
[root@localhost ~]# alias adc='cd /home'
[root@localhost ~]# type adc
adc 是 `cd /home' 的别名
[root@localhost ~]# adc
[root@localhost home]# 
​
案例2:
df -Th 显示文件系统类型
[root@localhost ~]# alias ddd='df -Th'
[root@localhost ~]# alias ddd
alias ddd='df -Th'
[root@localhost ~]# ddd
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  470M     0  470M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M   16M  471M    4% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  4.7G   13G   28% /
/dev/sda1               xfs      1014M  174M  841M   18% /boot
tmpfs                   tmpfs      98M   48K   98M    1% /run/user/1000
​
取消别名:
[root@localhost ~]# unalias -a ddd  #-a 加不加都可以
[root@localhost ~]# type ddd
-bash: type: ddd: 未找到
​
注:别名是临时设置,一旦断开,再次连接,别名失效
​
案例3:
[root@localhost ~]# alias cd='rm -rf /' #禁止使用

2.17 关闭防火墙firewalld和内核访问防火墙selinux

[root@localhost ~]# systemctl stop firewalld    #关闭防火墙
[root@localhost ~]# systemctl disable firewalld #永久关闭防火墙(永久关闭的是开机自启)
[root@localhost ~]# systemctl status firewalld  #查看防火墙状态
[root@localhost ~]# systemctl start firewalld   #开启防火墙
[root@localhost ~]# getenforce      #查看selinux开启状态
[root@localhost ~]# setenforce 0    #临时关闭selinux
永久关闭selinux:vi/etc/sysconfig/selinux进去文件目录中,将其中SELINUX=enforcing改为disabled

3、文件管理

3.1 文件类型

 -  普通文件(文本文件,二进制文件,压缩文件,电影,图片。。。)
 d  目录文件(蓝色)
 b  设备文件  block device 设备文件,如硬盘,U盘;
 c  设备文件 字符设备文件,比如我们的终端tty1,打印机。
 l  symbolic link 即符号链接文件,又称软链接文件 (浅蓝色)
 s  socket 即套接字文件,用于实现两个进程进行通信
 p  管道文件

3.2 示例

[root@localhost ~]# ll -d /etc/hosts /bin/ls /home /dev/sda /dev/tty1 /etc/grub2.cfg /dev/log /run/dmeventd-client
-rwxr-xr-x.  1 root root 117608 11月 17 2020 /bin/ls
srw-rw-rw-.  1 root root      0 4月  16 14:31 /dev/log
brw-rw----.  1 root disk   8, 0 4月  16 14:31 /dev/sda
crw--w----.  1 root tty    4, 1 4月  16 14:31 /dev/tty1
lrwxrwxrwx.  1 root root     22 4月  16 14:24 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
-rw-r--r--.  1 root root    158 6月   7 2013 /etc/hosts
drwxr-xr-x. 10 root root    144 4月  20 11:19 /home
prw-------.  1 root root      0 4月  16 14:31 /run/dmeventd-client

注:通过颜色判断文件类型是不一定正确的!!!

3.3 文件管理命令

3.3.1 复制文件:cp

cp---copy:复制

-r:目录

-v:详细

-f:强制

-n:静默

# mkdir /home/dir{1,2}                    #创建目录
# cp -v anaconda-ks.cfg /home/dir1/       #-v 显示详细信息
# cp anaconda-ks.cfg /home/dir1/test.txt  #复制并改文件名
# cp -r /etc /home/dir1                   #-r 拷贝目录使用,连同目录里面的文件一块拷贝
​
语法: cp  -r  源文件1 源文件2 源文件N  目标目录    #将多个文件拷贝到同一个目录
# cp -r /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/passwd /etc/hosts .
# cp -r /etc /tmp
3.3.2 查看文件内容:cat
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....
​
参数:
-n 显示行号
-A 包括控制字符(换行符/制表符)
3.3.3 查看文件头部:head
[root@localhost ~]# head /etc/passwd     #默查看前十行
[root@localhost ~]# head -2 /etc/passwd  #默认查看前两行
3.3.4 查看文件尾部:tail
[root@localhost ~]# tail /etc/passwd         #默认查看文件的后十行
[root@localhost ~]# tail -1 /etc/passwd      #查看文件最后一行
[root@localhost ~]# tail /var/log/messages
[root@localhost ~]# tail -f /var/log/secure  #-f 动态查看文件的尾部
[root@localhost ~]# tailf /var/log/secure    #功能同上
3.3.5 过滤关键字:grep

注:grep 针对文件内容进行过滤

过滤文件中带有root的内容:
[root@localhost ~]# grep 'root' /etc/passwd
过滤以root开头的行:^ --以什么开头
[root@localhost ~]# grep '^root' /etc/passwd
过滤以bash结尾的行:$ --以什么结尾
[root@localhost ~]# grep 'bash$' /etc/passwd
3.3.6 分页显示:less
[root@localhost ~]# less /etc/makedumpfile.conf.sample
1.空格键是翻页  回车键是翻行
2.上下箭头可以来回翻
3. /关键字     #搜索 (n按关键字往下翻   N按关键字往上翻)
4.快捷键:q -quit 退出
3.3.7 分页显示文件内容:more
[root@localhost  ~]# more  文件名       
空格键是翻页  回车键是翻行

4、文件编辑器

4.1 打开文件

[root@localhost home]# vim 文件名(eg.congratulation.txt) 

4.2 工作模式

vi与vim的三个模式

4.2.1 进入编辑模式
i     #在光标所在处进入编辑模式
a     #在当前光标后面进入编辑模式
A     #在行尾进入编辑模式
o     #在光标的下一行进入编辑模式
大O   #在光标的上一行进入编辑模式
 
# 从编辑模式进入命令模式:ESC
4.2.2 命令模式
光标定位键盘:
hjkl        #上下左右
0 $         #行首行尾
gg          #页首--文本顶端
G(shift+g)  #页尾--文本底部
3G           #进入第三行
/string     #查找字符,n下一个,N上一个    (n N 可以循环的)
4.2.3 文本编辑模式:i
 yy      #复制本行 
 3yy     #从光标开始复制3行。在最后粘贴
 ygg     #从当前光标复制到页首
 yG      #从光标开始复制到页尾
 dd      #删除一行
 3dd     #从光标开始删除3行:
 dgg     #从光标开始删除到页首 
 dG      #从光标开始删除到页尾
 d^      #删除当前光标之前的内容
 p       #粘贴到本行的下一行
大P      #粘贴到本行的上一行
 x       #删除光标所在的字符
 D       #从光标处删除到行尾
 u       #undo撤销
 r       #可以用来修改一个字符
 crtl+r  #反撤销
4.2.4 扩展命令(尾行)模式:shift + :
 shift+:    #进入尾行模式(扩展命令模式)
 :10        #进入第10行 
 :w         #保存 
 :q         #退出 
 :wq        #保存并退出 
 :q!        #退出不保存 
 :wq!       #强制保存退出
4.2.5 进入其他模式
ctrl+v     #进入可视块模式
shift+v    #进入可视行模式
v         #进入可视模式
4.2.6 查找替换
语法----> :范围 s/old/new/选项 
:s /world/nice/         #替换当前光标所在行
:3s /sbin/nice/         #替换指定行
:1,5 s/nologin/soso/    #从1-5行的nologin 替换为soso
:%s /bin/soso/          #替换所有行
:%s /sbin/nice/g        #替换行内所有关键字
​
注释:%表示替换所有行  g表示行内所有关键字
​
将文件另存(另存为)
语法----> :w 存储到当前文件
:w /tmp/aaa.txt    #另存为/tmp/aaa.txt 
:1,3 w /tmp/2.txt  #从1-3行的内容另存为/tmp/2.txt
4.2.7 设置环境
:set nu    #设置行号 
:set list  #显示控制字符
:set nonu  #取消设置行号 
4.2.8 文件基本信息
a. 时间类型
访问时间:atime,查看内容 
修改时间:mtime,修改内容
改变时间:ctime,文件属性,比如权限,mv改名
b. 查询示例
[root@localhost /]# ls -l /etc/passwd
-rw-r--r--. 1 root root 2334 4月  20 09:17 /etc/passwd
​
[root@localhost /]# stat /etc/passwd
  文件:"/etc/passwd"
  大小:2334            块:8          IO 块:4096   普通文件
设备:fd00h/64768d      Inode:17926434    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2024-04-20 09:17:23.935089985 +0800
最近更改:2024-04-20 09:17:23.920087484 +0800
最近改动:2024-04-20 09:17:23.921087650 +0800
创建时间:-

ls -l 文件名 仅看的是文件的修改时间

5、Linux用户管理

理解用户和组的意义

Linux的一大特性:

多用户、多任务。

所谓多用户多任务就是指可以在同一时间,有多个用户登录同一个系统执行不同的任务而互不影响。

假设现在有三个用户:root、lbb、mvv,三个用户同一时间登录了同一个系统,root去修改配置文件了,lbb去创建目录了,mvv去访问数据库了,每个用户互不干扰的独立执行自己的任务,并且每个用户不能够越线去访问其他用户正在操作的目录或执行其他用户下的任务,由此可见,不同的用户是拥有各自不同的权限的,Linux通过权限的划分和管理来实现多用户、多任务的运行机制。

Linux中的用户及其角色划分
账户为分三类:
超级用户(管理员):享有最高权限,具备系统中的所有权限(一般为root),UID为0
系统用户 :别称“伪用户”,无法登录系统,其主要作用是支撑系统运行,方便系统管理。uid号码小于1000.
普通用户:有权限限制,只能对自己目录下的文件进行操作,可以登录系统。uid 大于1000,登陆shell是bin/bash。
任何一个账户在创建的同时都会在系统里面创建一个同名的组。

5.1 用户概念

Users and groups:

系统上的每个进程(运行的程序)都是作为特定用户运行的

. Every file is owned by a particular user.

每个文件是由一个特定的用户拥有 .

. Access to files and directories are restricted by user.

访问文件和目录受到用户的限制

5.2 用户管理

5.2.1 用户组
创建组
[root@localhost /]# groupadd xxx    #创建一个用户组叫xxx
[root@localhost /]# groupadd zzz    #创建一个用户组叫zzz
[root@localhost /]# groupadd mmm -g 2024    #创建组叫mmm,并指定gid为2024
[root@localhost /]# grep 'xxx' /etc/group   #查看/etc/group中组xxx信息
xxx:x:4002      
​
修改组
[root@localhost /]# groupmod 参数 组
-g:修改组的gid
-n:修改组名
[root@localhost /]# groupmod -g 2021 xxx
[root@localhost /]# groupmod -n 新组名 xxx
​
删除组
[root@localhost /]# groupdel mmm  #删除组mmm
注意:用户的主属组不能删除
用户组成(新建用户会生成以下内容):
用户(/etc/passwd)、
用户家目录(/home/用户名称目录)、
用户组(/etc/group)、
用户密码/etc/shadow、
用户邮箱(/var/spool/mail/用户名称)
/etc/group  ----->查看组的文件
查看组
[root@localhost /]# cat /etc/group
mail:   x:      12:     postfix
组名:代表组密码: gid:   组员
5.2.2 用户

==创建用户 未指定选项==

[root@localhost /]# useradd user007   #创建用户
/etc/passwd  ---->查看账户是否存在的文件
/home/       ---->用户的家目录,每创建一个用户会在/home目录下面创建对应的家目录
/etc/shadow  ---->用户的密码文件

/etc/passwd文件详解--案例:

此文件里面除了密码字段能删除不能直接修改之外,其他字段全部都能直接修改

[root@localhost /]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
分隔符::
第一列:用户名
第二列:密码
第三列:用户标识号--->(uid)是一个整数,系统内部用它来标识用户。通常用户标识号的取值范围是0~65535。0是超级用户root的标识号
第四列:gid
第五列:描述信息。
第六列:家目录
第七列:是用户登陆到界面的第一个命令,开启一个shell。登陆shell
1.判断用户是否存在:
[root@localhost /]# id user007  #查看用户的uid、gid、所在组
uid=1003(user007) gid=1003(user007) 组=1003(user007)
                        主属组              附属组
uid 系统用来识别账户的user identify
gid 系统用来识别组的group identify
​
whoami  #查看当前账户
​
2.查看现在所使用的的账户:
[root@localhost /]# whoami  #查看我现在所使用的账户
5.2.3 创建用户(带有选项)
[root@localhost ~]# useradd user888 -u 502  #指定uid 为502
[root@localhost ~]# useradd user07 -s /sbin/nologin     #创建用户并指定shell
[root@localhost ~]# useradd user06 -G it,fd #创建用户,指定附加组
[root@localhost ~]# useradd -g 1003 user8   #指定用户的主属组为1003组
[root@localhost ~]# useradd user10 -u 7777 -s /sbin/nologin
5.2.4 删除用户
[root@localhost ~]# userdel -r user777  #删除用户user777,同时删除用户家目录
5.2.5 用户密码
[root@localhost /]# passwd kali #root用户可以给任何用户设置密码  
[root@localhost /]# passwd      #root用户给自己设置密码
[root@localhost /]# su - kali
[kali@localhost ~]$ passwd      #普通用户只能给自己修改密码,而且必须提供原密码
5.2.6 用户操作
1.修改用户名
参数:-l
[root@localhost ~]# usermod -l New_name kali
[root@localhost ~]# id user8
id: user8: no such user
​
2.修改GID:
参数:-g
[root@localhost ~]# id marry
uid=1003(marry) gid=1003(user8) 组=1003(user8)
[root@localhost ~]# usermod marry -g new_gid    #gid需要提前存在
​
3.修改UID:
参数:-u
[root@localhost ~]# usermod -u 520 marry
[root@localhost ~]# id marry
uid=520(marry) gid=2021(karyy) 组=2021(karyy)
​
4.修改用户的登录shell
[root@localhost ~]# usermod -s /sbin/nologin marry
#修改用户的登录shell

5.3 组成员管理

注意:只针对已存在的用户

1.给组添加账户
参数:-a
[root@localhost ~]# gpasswd -a marry it
正在将用户“marry”加入到“it”组中
​
2.同时添加多个用户到组
参数:-M       #member缩写
[root@localhost ~]# gpasswd -M v,kali it
​
3.从组删除用户
参数:-d
[root@localhost ~]# gpasswd -d v it
正在将用户“v”从“it”组中删除

6、文件权限

Linux用户权限解析

Linux服务器上有严格的权限等级,如果权限过高导致误操作会增加服务器的风险。所以对于了解Linux系统中的各种权限及要给用户,服务等分配合理的权限十分重要

6.1 基本权限UGO

文件权限设置: 可以赋于某个用户或组 能够以何种方式 访问某个文件

权限对象:
属主------->u
属组------->g
其他人------>o
基本权限类型:
读(read):r   ---->4
写(write):w  ---->2
执行: x(exec) ----->1

案例:

r w x       rw-       r--        alice    hr   
属主权限    属组权限   其他人权限     属主     属组     
file1.txt
文件
​
前提条件:jack属于hr组
一  alice对file1.txt文件有什么权限?
二  jack对file1.txt文件有什么权限?
          a. jack是所有者吗?
          b. jack属于hr组吗?
三 tom对file1.txt文件有什么权限? 
          a. tom是所有者吗?
          b. tom属于hr组吗?
          c. tom为其他人吗? 
6.1.1 设置权限
chown:改变文件或目录的所属主以及所属组
chmod:为文件或目录设置访问权限

更改文件的属主(所有者)、属组 (所属组)

chown:

[root@localhost /]# chown v.it a.txt        #修改属主、属组
[root@localhost /]# chown marry a.txt       #修改属主
[root@localhost /]# chown .it a.txt         #只改属组
[root@localhost /]# chown -R v.it a1dir1    #递归修改---针对目录
6.1.2 更改权限
a. 使用符号
[root@localhost /]# chmod u+x a.txt         #属主增加执行
[root@localhost /]# chmod a=rwx a.txt       #所有人等于读写执行
[root@localhost /]# chmod a=- a.txt         #所有人都没有权限
[root@localhost /]# chmod ug=rw,o=r a.txt   #属主属主等于读写,其他人只读
[root@localhost /]# ll
-rw-rw-r--.   1 marry it      0 4月  20 20:22 a.txt
b. 使用数字
[root@localhost /]# chmod 644 a.txt 
[root@localhost /]# ll a.txt 
-rw-r--r--. 1 marry it 0 4月  20 20:22 a.txt
​
[root@localhost /]# chmod 755 a.txt 
[root@localhost /]# ll a.txt 
-rwxr-xr-x. 1 marry it 0 4月  20 20:22 a.txt
​
[root@localhost /]# chmod 521 a.txt
[root@localhost /]# ll a.txt 
-r-x-w---x. 1 marry it 0 4月  20 20:22 a.txt

6.2 权限案例UGO

6.2.1 设置权限案例

针对hr部门的访问目录/home/hr设置权限,要求如下:

  1. root用户和hr组的员工可以读、写、执行

  2. 其他用户没有任何权限

[root@localhost /]# groupadd hr         #创建一个用户组
[root@localhost /]# useradd hr01 -G hr  #创建hr01用户添加到hr组里
[root@localhost /]# useradd hr02 -G hr  #创建hr02用户添加到hr组里
[root@localhost /]# mkdir /home/hr      #在/home创建一个hr目录
[root@localhost /]# chown .hr /home/hr  #将/home/hr目录的所属组设置为hr
[root@localhost /]# chown 770 /home/hr  #将/home/hr目录的权限设置为770
[root@localhost /]# ll -d /home/hr      #查看/home/hr目录本身的权限
drwxr-xr-x. 2 770 hr 6 4月  20 20:39 /home/hr
6.2.2 rwx对文件的影响

实战案例1:rwx对文件的影响

[root@localhost ~]# vim /home/doc7
date
[root@localhost ~]# ll /home/doc7 
-rw-r--r--. 1 root root 5 4月  24 15:37 /home/doc7
​
测试读权限
[root@localhost ~]# su - karry      #切换普通用户
[karry@localhost ~]$ cat /home/doc7 
date
​
测试执行权限
[karry@localhost ~]$ /home/doc7     #执行文件
-bash: /home/doc7: 权限不够
[karry@localhost ~]$ exit
登出
[root@localhost ~]# chmod o+x /home/doc7 
[root@localhost ~]# su - karry
上一次登录:三 4月 24 15:49:37 CST 2024pts/2 上
[karry@localhost ~]$ /home/doc7 
2024年 04月 24日 星期三 15:51:29 CST
​
测试写权限
[karry@localhost ~]$ vim /home/doc7         #打开文件,编辑内容,无法保存,因为没有写权限
[root@localhost ~]# chmod o+w /home/doc7 
[root@localhost ~]# su - karry
上一次登录:三 4月 24 15:51:23 CST 2024pts/2 上
[karry@localhost ~]$ vim /home/doc7         #可以写入内容
date
123
ls
[karry@localhost ~]$ cat /home/file1        
date
123
ls

扩展验证:

  1. 如果用户对文件只有w 权限,能否正常写入内容

  2. 如果用户对文件只有x 权限,能否正常执行

6.2.3 rwx对目录的影响

实战案例2:对目录没有w,对文件有rwx

[root@localhost ~]# mkdir /dir999
[root@localhost ~]# touch /dir999/file1
[root@localhost ~]# chmod 777 /dir999/file1 
[root@localhost ~]# ll -d /dir999/
drwxr-xr-x. 2 root root 19 4月  26 20:40 /dir999/
[root@localhost ~]# ll /dir999/file1 
-rwxrwxrwx. 1 root root 0 4月  26 20:40 /dir999/file1
[root@localhost ~]# vim /dir999/file1 
karry
[root@localhost ~]# su - karry      #切换普通用户
上一次登录:三 4月 24 15:52:15 CST 2024pts/2 上
[karry@localhost ~]$ cat /dir999/file1 
karry
[karry@localhost ~]$ rm -rf /dir999/file1   #权限不够
rm: 无法删除"/dir999/file1": 权限不够
[karry@localhost ~]$ touch /dir999/file2    #权限不够
touch: 无法创建"/dir999/file2": 权限不够

实战案例3:对目录有w,对文件没有任何权限

[root@localhost ~]# chmod 777 /dir999/
[root@localhost ~]# chmod 000 /dir999/file1 
[root@localhost ~]# ll -d /dir999/
drwxrwxrwx. 2 root root 19 4月  26 20:41 /dir999/
[root@localhost ~]# ll /dir999/file1 
----------. 1 root root 6 4月  26 20:42 /dir999/file1
[root@localhost ~]# su - karry
上一次登录:五 4月 26 20:42:09 CST 2024pts/1 上
[karry@localhost ~]$ cat /dir999/file1 
cat: /dir999/file1: 权限不够
[karry@localhost ~]$ rm -rf /dir999/file1 
[karry@localhost ~]$ touch /dir999/file2
6.2.4 r、w、x权限对文件和目录的意义
对文件:
r ---- cat
w ---- vi、vim
x ---- bash /dir/file
​
对目录:
r ---- ls
w ---- touch、rm
x ---- cd 
小结:
对目录有w权限,可以在目录中创建新文件,可以删除目录中的文件(跟文件权限无关)
注意事项
文件: x 权限小心给予
目录: w 权限小心给予
6.2.5 扩展验证

1. 如果用户对目录只有r 权限,能否正常列出目录下的内容?

能,但是会提示:“无法访问到此目录,因为没有x 执行权限“

2. 如果用户对目录只有w 权限,能否正常写入内容

[root@localhost ~]# ll -d /dir999/
drwxrwx-w-. 2 root root 19 4月  26 20:45 /dir999/
[root@localhost ~]# su - karry
上一次登录:五 4月 26 20:45:23 CST 2024pts/1 上
[karry@localhost ~]$ touch /dir999/file9
touch: 无法创建"/dir999/file9": 权限不够
[root@localhost ~]# chmod o+x /dir999/
[root@localhost ~]# ll -d /dir999/
drwxrwx-wx. 2 root root 32 4月  26 20:53 /dir999/
[root@localhost ~]# su - karry
上一次登录:五 4月 26 20:53:55 CST 2024pts/1 上
[karry@localhost ~]$ touch /dir999/file999  #创建成功

不能,因为没有x 执行权限,如果用户对目录有wx 权限,就能正常写入内容

3. 如果用户对目录只有x 权限,能否正常切换到目录中

[root@localhost ~]# chmod 771 /dir999/
[root@localhost ~]# ll -d /dir999/
drwxrwx--x. 2 root root 47 4月  26 20:54 /dir999/
[root@localhost ~]# su - karry
上一次登录:五 4月 26 20:54:40 CST 2024pts/1 上
[karry@localhost ~]$ cd /dir999/
[karry@localhost dir999]$ 

可以正常切换到目录中

6.3 权限掩码

umask 用户掩码

控制用户创建文件和目录的默认权限

#查看umask
[root@localhost ~]# umask
0022  root账户默认
0002  普通用户默认
​
#root用户默认最高权限
目录777
文件666
​
#通过计算得出root用户创建目录和文件的权限为:
也是现在root用户创建目录和文件的默认权限:
目录:755
文件:644
​
#修改umask
[root@localhost ~]# umask 0111      #1 代表的是x 权限,并不是数字1
[root@localhost ~]# mkdir dir1      #777 - xxx = 666
[root@localhost ~]# ll dir1/ -d
drw-rw-rw-. 2 root root 6 4月  26 21:03 dir1/
[root@localhost ~]# touch lo.txt    #666 - xxx = 666, 6是rw,本身并没有x,所以减去x,还是rw 即 6
[root@localhost ~]# ll lo.txt
-rw-rw-rw-. 1 root root 0 4月  26 21:03 lo.txt

6.4 高级权限

高级权限:suid,sgid,sticky

问题:为什么会失败!

[root@localhost ~]# chown root.root /root/file1.txt 
[root@localhost ~]# vim /root/file1.txt 
[root@localhost ~]# ll /root/file1.txt 
-rw-r--r--. 1 root root 4 4月  26 21:17 /root/file1.txt
​
[root@localhost ~]# su - karry
上一次登录:三 4月 24 15:52:15 CST 2024pts/2 上
[karry@localhost ~]$ cat /root/file1.txt
cat: /root/file1.txt: 权限不够
6.4.1 高级权限的类型
suid ====== 4 提权        只对二进制命令文件生效,其他不管用
sgid ====== 2 组继承      只能对目录设置
sticky ==== 1 (t权限)     权限控制
6.4.2 设置特殊权限
a、字符---语法:
chmod u+s file
chmod g+s dir 
chmod o+t dir
​
b、数字
chmod 4777 file 
chmod 2770 dir 
chmod 1770 dir
a. 案例一-----UID
suid   普通用户通过suid提权     <针对文件>
在进程文件(二进制,可执行的命令文件)上增加suid权限
​
未给cat 与rm 加suid 之前
[root@localhost ~]# su - karry
上一次登录:五 4月 26 21:17:50 CST 2024pts/1 上
[karry@localhost ~]$ rm -rf /root/file1.txt
rm: 无法删除"/root/file.txt": 权限不够
[karry@localhost ~]$ cat /root/file1.txt
cat: /root/file.txt: 权限不够
​
给cat 与rm 加suid 权限
[root@localhost ~]# chmod u+s /usr/bin/cat
[root@localhost ~]# chmod u+s /usr/bin/rm
[root@localhost ~]# su - karry
上一次登录:五 4月 26 21:24:28 CST 2024pts/1 上
[karry@localhost ~]$ cat /root/file1.txt
123
[karry@localhost ~]$ rm -rf /root/file1.txt

总结:对于命令加入了suid高级权限之后,所有用户使用此命令,都拥有和root用户相同的权限

Set UID(二进制命令文件)

那么这个特殊权限的特殊性的作用是什么呢?
1、SUID权限仅对命令文件(二进制文件)有效;
2、执行者将具有该程序拥有者(owner)的权限。

取消提权

[root@localhost ~]# ll /usr/bin/rm
-rwsr-xr-x. 1 root root 62864 Nov  6  2016 /usr/bin/rm
此时一旦给rm加上suid权限之后,普通用户相当于root用户。(即提权)
​
[root@localhost ~]# chmod u-s /usr/bin/rm /usr/bin/cat  #取消提权
d. 案例二-----GID

首先创建一个用户组,两个用户进行这三个案例操作

Set GID(目录、组继承)

把s放到文件的所属用户组的x位置上的话,就是SGID。那么SGID的功能是什么呢?和SUID一样,只是SGID是获得该程序所属用户组的权限。
SGID主要用在目录上-----如果用户在此目录下具有w权限的话,使用者在此目录下建立新文件,则创建的这个文件的群组与此目录的群组相同。
[root@localhost ~]# mkdir /opt/dir7         #创建目录
[root@localhost ~]# groupadd hi             #创建一个组
[root@localhost ~]# chmod 775 /opt/dir7/    #设置权限
[root@localhost ~]# ll -d /opt/dir7/
drwxrwxr-x. 2 root root 6 4月  29 19:39 /opt/dir7/
​
[root@localhost ~]# chown .hi /opt/dir7/    #设置属组
[root@localhost ~]# chmod g+s /opt/dir7/    #设置SGID
[root@localhost ~]# ll -d /opt/dir7/
drwxrwsr-x. 2 root hi 6 4月  29 19:39 /opt/dir7/
[root@localhost ~]# touch /opt/dir7/x.txt
[root@localhost ~]# ll /opt/dir7/x.txt 
-rw-r--r--. 1 root hi 0 4月  29 19:44 /opt/dir7/x.txt
​
# -R:--recursive      change files and directories recursively  递归改变文件和目录
[root@localhost ~]# chmod o+w /opt/dir7/ -R
[root@localhost ~]# su - kali
上一次登录:一 4月 29 16:24:01 CST 2024pts/0 上
[kali@localhost ~]$ touch /opt/dir7/v.txt
[kali@localhost ~]$ ll /opt/dir7/v.txt 
-rw-rw-r--. 1 kali hi 0 4月  29 19:45 /opt/dir7/v.txt
c. Sticky Bit
这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。
SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。

案例

[root@localhost ~]# cd /home/
[root@localhost home]# mkdir test1
[root@localhost home]# chmod 757 test1/
[root@localhost home]# chmod o+t test1/
[root@localhost home]# ll -d test1/
drwxr-xrwt. 2 root root 6 4月  29 19:53 test1/
​
[root@localhost home]# useradd v    #创建用户
[root@localhost home]# su - v
上一次登录:日 4月 28 20:43:48 CST 2024:0 上
[v@localhost ~]$ touch /home/test1/vvv.txt  #用户v创建文件
[v@localhost ~]$ exit
登出
[root@localhost home]# su - kali
上一次登录:一 4月 29 19:45:08 CST 2024pts/2 上
[kali@localhost ~]$ touch /home/test1/kkk.txt   #用户kali创建文件
[kali@localhost ~]$ rm -rf /home/test1/vvv.txt
rm: 无法删除"/home/test1/vvv.txt": 不允许的操作
6.4.3 目前两种给普通用户提权手段
sudo: 有针对性,例如针对某个用户以能够以root的身份执行某些命令。
suid: 基本针对所有用户,任何用户在执行有suid权限的程序时(例如/usr/bin/rm),都是以root身份在执行。

案例

a. 放开所有命令使用权
配置解释:
root表示用户名
第一个 ALL 指示允许从任何终端、机器访问 sudo
第二个 (ALL) 指示 sudo 命令被允许以任何用户身份执行
第三个 ALL 表示所有命令都可以作为 root 执行
[root@localhost ~]# visudo      #打开配置文件
     98 ##
     99 ## Allow root to run any commands anywhere
    100 root    ALL=(ALL)       ALL
    101 kali    ALL=(ALL)       NOPASSWD:ALL
    102 
    103 ## Allows members of the 'sys' group to run networking, software,
​
[root@localhost ~]# su - kali
上一次登录:一 4月 29 20:01:25 CST 2024pts/2 上
[kali@localhost ~]$ sudo mkdir /adc
b. 放开个别命令使用权
 [root@localhost ~]# visudo
     98 ##
     99 ## Allow root to run any commands anywhere
    100 root    ALL=(ALL)       ALL
    101 kali    ALL=(ALL)       NOPASSWD:ALL
    102 v       ALL=(ALL)       NOPASSWD:/usr/bin/mkdir,/usr/bin/rm,/usr/bin/touch
    103 
    104 ## Allows members of the 'sys' group to run networking, software,
​
测试:
[root@localhost ~]# su - v
上一次登录:一 4月 29 19:54:14 CST 2024pts/2 上
[v@localhost ~]$ touch /file7
touch: 无法创建"/file7": 权限不够
[v@localhost ~]$ sudo touch /file7

;