day01

1.不要安装安全类的软件

2.确保window 64位 不是教育版

文件系统(磁盘上组织文件的一种方法和数据结构) ntfs —-支持的单个文件最大是4TB fat32 —-支持的最大单个文件是4G

3.开启虚拟机提示VT-X未开启(物理机没有开启虚拟化)

环境部署系统安装:

虚拟平台(vmware-workstation)+创建一台虚拟机+RHEL-server-8.5-x86_64.iso

(网络模式选择-仅主机 nat* 桥接;磁盘类型ide sata scsi nvme*)

​ 面试:

​ linux必须创建分区: / swap(虚拟内存)

​ 一般llinux 需要创建哪些分区: / /boot swap

登陆主通过用户名密码验证

linux系统管理员 默认root用户—–后期登录主机通过管理员登录

​ 普通用户 redhat

判断命令是否成功,第一种执行后没有任何提示返回到下一个命令提示符 第二种有对应命令结果提示

1.查看主机ip地址

1
2
3
4
5
#ip   a ==ip addr
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:c3:cf:a9 brd ff:ff:ff:ff:ff:ff
inet 192.168.220.162/24 brd 192.168.220.255 scope global dynamic ens160
valid_lft 1710sec preferred_lft 1710sec
1
#ifconfig

2.终端(标准的输入输出设备键盘鼠标显示器)

虚拟终端:ctrl+alt+F3 ~ F6 ctrl +alt+F2 /dev/tty3 /dev/tty4 命令行的终端

​ 模拟终端: 图形化模拟的终端窗口

​ 远程终端: 伪终端 通过远程软件基于远程连接的终端窗口 /dev/pts/0 /dev/pts/1 …

物理终端

1
#tty   查看当前终端的设备文件

3.终端的命令提示符

1
2
3
4
5
6
[root@localhost ~]# 
用户名@主机名 当前路径~标记的是当用户的家目录/root #标记管理员
注:目录----window 文件夹
[redhat@localhost ~]$ pwd --print workdoing directory 打印当前目录路径
/home/redhat
redhat ~标记是 /home/redhat $标记普通用户

4.命令的标准格式

1
2
3
4
5
6
1.#命令      #ifconfig
2.#命令 参数 #ip a
3.#命令 -选项... #ls -l #ls -a
4.#命令 -选项... 参数 #ls -l /root
-l 短选项
--long 长选项

5.基础命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ip a   查看ip地址
#ifconfig 查看ip地址
#tty 查看当前终端的设备文件名
#cat /etc/redhat-realse 查看操作系统发行版信息
#uname -r 查看内核版本
#pwd 显示当前目录路径
#hostname 查看当前的完整主机名
#hostname HOSTNAME 在当前主机运行状态下临时更改主机名。改完后终端提示符设备主机名需要退出重新登录识别
#hostnamectl set-hostname HOSTNAME 永久更改主机名 vim /etc/hostname
#passwd [USERNAME] 修改或者设置用户的密码
#passwd -d [USERNAME] 删除用户密码

注:
管理执行passwd: 可以指定用户名;不要输入之前的密码;可以更改和删除所有用户的密码;密码等级没有严格要求
普通用户执行passwd: 不能至指定用户名只能修改自己的密码;需要输入之前的密码; 密码登记有严格要求

6.系统密码重置

1
2
3
重启客户机----在启动界面快速将鼠标点进去上下键切换一下(停留在启动界面)+e----找到linux开头的行在行尾添加------rd.break-------   mount   -o   remount,rw    /sysroot   ----chroot   /sysroot     -----passwd root   

----touch /.autorelabel ---exit ---exit

1.安装linux操作系统

2.第一天基础命令整理总结

3.破解密码

day02

cd 切换目录

1
2
3
4
5
6
7
8
#cd   chang  directory
相对路径: 相对于当前所在的路径开始查找 cd home

/ 根目录 cd /
~ 当前用户的家目录
. 当前目录
.. 上层目录 cd ../../..
- 上一次所切换的路径

su 用户切换

1
2
3
4
5
su    USERNAME     切换到指定用户,当前路径没有更改
su 切换到root用户
su -l USERNAME == su - redhat
切换到指定用户,更改当前路径返回到当前用户的家目录

快捷键

ctrl+c 终止当前名令执行

ctrl+l 清屏 == clear

ls 列出命令(查看目录下的所有文件)

1
2
3
4
5
6
7
-l    长格式显示文件以及文件的属性   ls  -l     ==  ll  
-d 查看指定目录的属性 ll -d /root 列出的是/root目录的属性信息 ll -d 显示当前目录属性
-a 显示指定目录下所有文件包含隐藏文件和. .. 当前目录和上一级目录 ls -l -a == ls -la == ll -a
-A 显示指定目录下所有文件包含隐藏文件
-h 文件大小转化
-i 显示文件inode节点号
-R 递归显示当前目录以及嵌套目录中所有的文件

linux基本思想一切皆文件—–7种文件类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-普通文本文件   

d 目录文件

l 软链接文件(快捷方式)

b 块设备文件

c字符设备文件

p管道文件

s socket套接字文件

2-11字符 标记的是权限标识符
第二列: 硬链接次数
第三列: 所属用户
第四列: 所属组
第五列: 文件大小
第六列:文件创建时间或修改时间
第七列:文件名
/ Linux文件系统的最上层根目录,其他所有目录均是该目录的子目录
/bin Binary的缩写,存放普通用户可执行的程序或命令
/boot 存放系统启动时所需的文件,这些文件若损坏常会导致系统无法启动,一般不要改动
/dev dev 是设备(device)的英文缩写。包含所有的设备文件
/etc 存放了系统管理时要用到的各种配置文件和子目录
/home 存放一般用户的个人目录
/lib 是库(library)英文缩写,存放系统的各种库文件
/lib64 存放系统本身需要用到64位程序的共享函数库(library)
/mnt /media 可以临时将别的文件系统挂在这个目录下,即为其他的文件系统提供安装点
/opt 该目录通常提供给较大型的第三方应用程序使用,例如Sun Staroffice、Corel WordPerfect,这可避免将文件分散至整个文件系统
/proc 可以在这个目录下获取系统信息。这些信息是在内存中由系统自己产生的(内核)
/root 超级用户的个人目录,普通用户没有权限访问
/run 保存自系统启动以来描述系统信息的文件(应用层的进程信息)
/sbin 和/bin类似,这些文件往往用来进行系统管理,只有root可使用
/srv srv 是服务(server)的简写,服务启动之后需要访问的数据目录
/sys 本目录是将内核的一些信息映射文件,以供应用程序所用 系统文件
/tmp 用来存放不同程序执行时产生的临时文件。
/home 存放一般用户的个人目录
/usr 一般用户程序安装所在的目录,用于安装各种应用程序
/var 通常各种系统日志文件放在这里 动态变化的数据文件

面试—–软链接和硬链接区别

在linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号inode。

(1)符号链接又叫软链接,和原文件不是一个文件。例如Windows的快捷方式,

作用特点:在指定路径查找某个文件访问快速便捷,删除源文件快捷方式不能访问

创建对象:文本文件目录文件都可以创建,并且可以跨文件系统

创建链接文件:ln -s 原文件 链接文件

如何判断是否是链接文件: l

(2)硬链接,

概念:多个文件名指向同一个Inode

作用特点:防止用户误删除,备份(仅对文件名备份)

创建对象:对目录文件不能创建,并且不可以跨文件系统

创建硬链接: ln 原文件 新文件

多个文件名是否指向同一个节点号,以及硬链接次数是否改变

touch FILENAME 创建文件

mkdir DIRNAME 创建目录

rm FILENAME 删除文件

rm -r DIRNAME 删除目录文件

cat FILENAME 查看文件

nano FILENAME 编辑文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@www ~]#touch   aaa  在当前路径创建了aaa文件
[root@www ~]#ln -s aaa a.lnk 对aaa文件创建快捷文件叫a.lnk
[root@www ~]#nano aaa 编辑文件内容 ctrl-x -- y - enter
[root@www ~]#cat aaa 查看aaa文件的内容
[root@www ~]#cat a.lnk
[root@www ~]#rm aaa 删除aaa文件
[root@www ~]#rm a.lnk
[root@www ~]#mkdir dir1 创建目录
[root@www ~]#ln -s dir1 dir1.lnk
[root@www ~]#rm -r dir1
L
注:
[root@www ~]#ln -s /root/dir /dir1.lnk 将/root下的dir目录创建快捷文件在/目录下

[root@www ~]#ln -s dir /dir2.lnk 有问题(将/dir目录创建快捷文件在/目录下)
[root@www ~]# ll /
lrwxrwxrwx. 1 root root 3 Feb 11 01:08 dir2.lnk -> dir
1
2
3
4
5
6
创建硬链接只对文本件可以
[root@www ~]# touch b
[root@www ~]# ln b bbb
[root@www ~]# ll -i
33951783 -rw-r--r--. 2 root root 0 Feb 11 01:14 b
33951783 -rw-r--r--. 2 root root 0 Feb 11 01:14 bbb

***文件系统层级结构FHS

date

date命令用于显示或设置系统的时间与日期,语法格式为:“ date [+指定的格式]”。

用户只需在强大的date命令后输入以“+”号开头的参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与指定格式输出的时间信息结合到一起。例如,把打包后的文件自动按照“年-月-日”的格式打包成“backup-2020-9-1.tar.gz”,用户只需要看一眼文件名称就能大概了解到每个文件的备份时间了。date命令中常见的参数格式及作用如表2-4所示。

表2-4 date命令中的参数以及作用

参数 作用
%S 秒(00~59)
%M 分钟(00~59)
%H 小时(00~23)
%I 小时(00~12)
%m 月份(1~12)
%p 显示出AM或PM
%a 缩写的工作日名称(例如:Sun)
%A 完整的工作日名称(例如:Sunday)
%b 缩写的月份名称(例如:Jan)
%B 完整的月份名称(例如:January)
%q 季度(1~4)
%y 简写年份(例如:20)
%Y 完整年份(例如:2020)
%d 本月中的第几天
%j 今年中的第几天
%n 换行符(相当于按下回车键)
%t 跳格(相当于按下Tab键)

按照默认格式查看当前系统时间的date命令如下所示:

1
2
[root@kongd ~]# date
Sat Sep 5 09:13:45 CST 2020

按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间的date命令如下所示:

1
2
[root@kongd ~]# date "+%Y-%m-%d %H:%M:%S"
2020-09-05 09:14:35

将系统的当前时间设置为2020年11月1日8点30分的date命令如下所示:

1
2
3
4
[root@A /]# #date    月日时分年点秒
[root@A /]# date 121210102021.10
[root@kongd ~]# date -s "20201101 8:30:00"
Sun Nov 1 08:30:00 CST 2020

再次使用date命令并按照默认的格式查看当前的系统时间,如下所示:(月日时分年点秒)

1
2
[root@kongd ~]# date
Sun Nov 1 08:30:08 CST 2020

date命令中的参数%j可用来查看今天是当年中的第几天。这个参数能够很好地区分备份时间的新旧,即数字越大,越靠近当前时间。该参数的使用方式以及显示结果如下所示:

1
2
[root@kongd ~]# date "+%j"
306

clock

显示计算机的时间和日期

hwclock -s 系统时间向硬件时间同步

hwclock -w 硬件时间向系统时间同步

timedatectl status

timedatectl命令用于设置系统的时间,英文全称为:“time date control”,语法格式为:“ timedatectl [参数]”。

发现电脑时间跟实际不符?如果只差几分钟的话,我们可以直接调整,但如果差几个小时,那么除了调整当前的时间,还有必要检查下时区了,timedatectl命令中的参数以及作用:

参数 作用
status 显示状态信息
list-timezones 列出已知时区
set-time 设置系统时间
set-timezone 设置生效时区

查看系统时间与时区:

1
2
3
4
5
6
7
8
[root@kongd ~]# timedatectl status
Local time: Sun 2020-09-06 19:51:22 CST
Universal time: Sun 2020-09-06 11:51:22 UTC
RTC time: Sun 2020-09-06 19:51:21
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no

如果您查到的时区不是上海(Asia/Shanghai),可以手动进行设置:

1
2
[root@kongd ~]# timedatectl set-timezone Asia/Shanghai
[root@kongd ~]# timedatectl get-timezone

如果时间还是不正确,我们可以手动的修改系统日期:

1
[root@kongd ~]# timedatectl set-time 2021-05-18

而如果想修改时间的话,也很简单:

1
2
3
[root@kongd ~]# timedatectl set-time 9:30
[root@kongd ~]# date
Tue May 18 09:30:01 CST 2021

[root@localhost ~]# localectl set-locale LANG=en_US

文件管理命令

touch 创建文本文件

stat FILENAME 查看文件详细属性

touch [-option…] FILENAME…

touch FILE1 FILE2 FILE3

touch /{FILE1,FILE2,FILE3}

touch {a..c}{1..3} a1 a2 a3 b1 b2 b3 c1 c2 c3

mkdir 创建目录

mkdir [-options..] DIRNAME

​ -p parents 指定父目录创建(从左向右依次创建多级目录)

​ -v verbose 详细信息 显示创建的详细结果

创建多级目录 mkdir -pv /1/2/3/4/5

tree 树状显示目录结构

rm 删除文件

rm [-options] FILENMAE/DIRNAME…

​ -f force 强制

​ -r 递归,递归删除目录文件

rm FILE1 FILE2

rm f* 删除以f开头的所有文件

rm *.txt

rm * 删除当前目录下所有文本文件

rm -f

rm -r d1

rm -rf dd1

du 查看系统文件占用磁盘大小 KB

-a 查看指定目录下所有文件占用的总大小,以及该目录下每个文件占用磁盘空间的大小

-s 只显示指定目录下所有文件占用磁盘的大小,不显示子目录

-h 显示大小可以进行单位转换

mv 移动文件

1
2
3
4
5
6
7
8
9
10
11
12
13
mv  [-options]   源文件名...     目标路径

[root@localhost ~]# touch a
[root@localhost ~]# ll
-rw-r--r--. 1 root root 0 Feb 11 03:33 a
[root@localhost ~]# mv a /
[root@localhost ~]# ll /
total 28
-rw-r--r--. 1 root root 0 Feb 11 03:33 a
移动并改名
[root@localhost ~]# mv f /file 将f文件移动到/目录并改名为file (file文件在/目录下是不存在)
文件重命名
[root@localhost test]# mv a aaa

cp 复制文件

cp [-options] 源文件名… 目标路径

​ -r 递归复制目录文件

​ -p 复制文件保持文件原属性

​ -a== -rp 复制目录保持目录文件的原属性

1
2
3
4
5
6
7
8
[root@localhost test]# cp -p  /test/a  /pub    复制/test/a文件到 /pub目录,复制保持文件原属性
[root@localhost test]# ll /pub
total 4
-rw-r--r--. 1 root root 10 Feb 11 03:25 a
[root@localhost test]# cp -rp /test/d1 /pub

[root@localhost test]# cp /test/a /pub/a.txt 复制/test/a文件到 /pub目录并改名为a.txt
[root@localhost test]# cp -r /test/d1 /pub/dir1

wget 下载文件

wget [-option…] URL

​ -P 指定下载文件到指定路径

​ -b 将下载进程放在后台运行

​ -c 断点续传

​ -t 指定下载尝试次数

​ -r 下载目录文件

​ -o

​ -O

1
2
3
root@localhost test]# wget http://mirrors.163.com/centos/8/infra/x86_64/infra-common/Packages/a/awscli-1.18.156-1.el8.noarch.rpm     ---把awscli-1.18.156-1.el8.noarch.rpm 下载到当前路径

root@localhost test]# wget http://mirrors.163.com/centos/8/infra/x86_64/infra-common/Packages/a/awscli-1.18.156-1.el8.noarch.rpm -P /pub 把awscli-1.18.156-1.el8.noarch.rpm 下载到/pub目录

day03

查看目录文件: ls

查看文本文件内容

cat 将文件内容输出到终端,查看文件内容(正序)

​ -n 查看文件内容显示标号

tac 将文件内容输出到终端,查看文件内容(逆序显示)

more 一般对于大文件查看通过终端窗口可以分页显示,最后所有内容输出到终端查看显示

less 打开阅读,分页显示,退出需要通过q

​ ?关键字 或者 /关键字

​ n 向上匹配关键字

​ N 向下匹配关键字

head 查看文件的前十行信息

​ -n 指定显示的行数

​ -n 3

tail 查看文件的后十行信息

​ -n 3

​ -f follow 追加显示文件内容 ctrl+c

tail -f /var/log/messages

文本编辑

1.nano

2.vi / vim *** 文本编辑器

终端最后一行

显示新文件或者文件名几行几个字符或者没有任何信息 (执行便捷命令)

–insert— (编辑文件内容)

:末行模式

img点击并拖拽以移动

命令模式:

dd 删除光标所在行

d+enter 删除光标所在行和光标的下一行

dG 删除光标所在行以及文档尾的所有行

dgg 删除光标所在行以及文档首的所有行

d^ 删除光标到行首的内容,不包含光标字符

d$ 删除光标到行尾,包含的光标所在字符

x 删除光标所在字符

G 跳转到文档尾

gg 跳转到文档首

4G 跳转到第四行

^ 行首

$ 行尾

yy 复制

4yy 复制从光标开始一共四行内容

cc 剪切

4cc 剪切从光标开始一共四行内容

p 粘贴(粘贴在光标所在的下一行)

u 向左撤销(返回上一次的编辑状态)

ctrl+r 重做(向右撤销,返回到近期编辑的状态)

插入模式:

a 在光标后插入内容

A 光标所在行的行尾

i 在光标前插入内容

I 光标所在行的行首

o 进入插入模式,在光标的下一行添加内容

O 进入插入模式,在光标的上一行添加内容

s 删除光标所在字符,进入插入模式

S 删除光标所在行,进入插入模式

末行模式:

:q 退出

:q! 强制退出

:w 保存

:wq 保存退出 == ZZ 命令模式

:wq! 强制保存退出

:10 跳转到第十行

:r FILENMAE 将指定文件的内容读取到光标所在下一行

:%s %匹配符,表示匹配所有行 s 替换命令 /要替换的字符/替换后的字符/ 替换的是每一行第一次匹配到的关键字 g 替换匹配到的所有关键字 %s /0/1/g

:set nu 显示行号

:set nonu 取消行号

/关键字 快速匹配关键字所在行的内容

:noh 取消高亮标记

vim -o /etc/passwd /etc/shadow 多个文件水平分割显示内容

​ -O /etc/passwd /etc/shadow 左右分屏显示文件内容

​ ctrl+w+w

vim + /etc/passwd 打开该文件进入文档尾

3.”>”或“>>”实现文件编辑

echo 打印命令

1
2
#echo  this is test    (标准输入输出命令)
this is test
$引用变量
1
2
3
4
5
6
#name=zhangsan
#echo $name
zhangsan
${}
#echo ${name}
zhangsan
$?显示上一条命令的退出码 0成功 1-255错误状态
1
2
3
4
5
6
7
8
9
[root@localhost ~]# echo ${name}
zhangsan
[root@localhost ~]# echo $?
0
[root@localhost ~]# haha
bash: haha: command not found...
Failed to search for file: Cannot update read-only repo
[root@localhost ~]# echo $?
127
| 管道符(将前面命令的标准输出作为后面命令的标准输入)—无名管道
1
2
3
4
显示一个文件的第十行
#head /etc/passwd | tail -1
eg:显示/etc/passwd文件20-25行的内容

**p 标识的管道文件(命名管道)

1
2
3
4
5
6
7
开启两个终端
1终端:
#mkfifo /p1
#echo 123 > /p1
2终端:
#cat /p1
123

三种引号区别

‘ 单引号’ 强引用,不识别引号中特殊字符的特殊含义 echo ‘$PS1’

“ 双引号” 弱引用,识别特殊含义的字符, echo “$PS1” —如果是变量单引和双引有区别

`反引号` 命令替换符 == $()

1
[root@localhost /]# echo "根目录下所有的文件\`ls`"

“>” 输出重定向符 (将前面命令的输出结果写入指定文件)

1
echo   helloworld > FILE      将helloworld输出结果通过输出重定向符写入指定文件,当文件不存在会创建该文件

“>>” 追加重定向符

1
echo this is test >> FILENAME 

< 输入重定向符

1
2
cat   <  /etc/passwd
head < /etc/passwd

4.文件编辑<< 终止结束符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost /]# cat << EOF       查看内容,匹配终止结束符结束输入
> this is test --标准输入
> EOF --匹配到终止结束符,结束标准输入
this is test --将前面标准输入的内容标准输出

---------------------------
[root@localhost /]# cat << EOF > file2
> this is 1
> this is 2
> this is 3
> EOF
[root@localhost /]# cat file2
this is 1
this is 2
this is 3

文件描述符:0 文件标准输入符1标准(正确)输出描述符 2错误输出描述符

1
2
3
4
5
cat 0< /etc/passwd
cat fff 1> file == cat fff > file
cat fff 2> file
cat fff &> file == cat fff 1> file 2> file == cat fff 1> file 2>&1
cat fff 1> file 2> /dev/null

文件内容处理相关命令—(行)

grep 文本过滤显示命令

命令格式: grep [-options…] 关键字 文件名…

#grep root /etc/passwd 将/etc/passwd 文件中有root关键字的行打印显示

​ -v 反过滤,把没有关键字的行打印显示

​ -o 只显示匹配到的关键字

​ -c 显示匹配关键字的行数

​ -i 忽略大小写

​ -n 过滤显示行号

​ -w 按照单词过滤

​ -A 2 显示关键字以及下两行信息

​ -B 2 显示关键字以及上两行信息

​ -C 3 显示关键字以及上下三行信息

1
2
3
4
5
6
7
过滤指定文件/etc/passwd将文件中有nologin关键字的行写入login文件,并按照原文件的顺序写入。           
[root@localhost /]# grep nologin /etc/passwd > login
只显示一个配合文件的关键信息
[root@localhost /]# grep -v ^# /etc/login.defs | grep -v ^$
判断/usr/bin是否存在passwd可执行文件
[root@localhost /]# ll /usr/bin | grep -w passwd
-rwsr-xr-x. 1 root root 34512 Aug 12 2018 passwd

^ 以什么开头 ^q ^#

$ 以什么结尾 a$

^$ 空白行

[] 定义取值范围,该范围内的任意单个字符 [1-9] grep ^[0-9] FILENAME 开头是0-9任意一个数字的行显示

[^] ^取反 ^[^0-9] ^[!0-9]

cut 文本内容剪切命令

​ -d 指定文件内容的分割符

​ -f 指定截取的字段

1
2
3
#cut -d : -f 1  /etc/passwd
[root@localhost /]# date |cut -d " " -f 6
2022

​ -c 指定字符截取 cut -c 1-3 /etc/passwd

wc 文本统计命令 行 单词书 字节数 文件名

-l 只统计行数

-w 只统计单词数

-c 统计字节数

-m 统计字符数

当前系统共有多少用户

1
2
[root@localhost /]# echo 当前系统共有用户\`wc -l /etc/passwd | cut -d " "  -f 1`个 > file
当前系统共有用户44个

sort 文本排序 默认按照字符排序

​ -n 按照数值大小升序显示

​ -r逆序显示

​ -t 指定分隔符

-k 指定字段

-u unique 去重 ==sort a.txt | uniq

1
2
[root@localhost /]# sort -t : -k 3  -n /etc/passwd
将/etc/passwd 文件内容通过:分割将第三个字段进行排序升序显示每一行内容

uniq 去重命令(重复行相邻)

​ -c 显示每一行重复的次数

-d 只显示重复出现的行

-D 显示重复出现的所有行

tr 字符替换

1
2
3
4
5
6
7
8
echo abcde | tr  -t   a   1
-c 反选定
echo abcde | tr -c abc 0 把处理abc之外的字符替换为0字符
abc00
-s 将连续重复的字符替换为单个字符
echo aaaaabcd | tr -s a 1 将连续的多个a字符替换为一个1字符
-d 删除选定字符
echo abcdef | tr -d abc

day04

文件查找4种方式

whereis 查询范围通过系统环境变量路径搜索文件$PATH,所有的文件

which 查询范围通过系统环境变量路径搜索文件$PATH,找的是可执行文件(查找命令文件)

locate 全局搜索,但是需要在搜素前将系统文件导入数据库updatedb;查找速度快

*find 全局搜索文件。

注意事项:
1)-prune 必须和 -path,-o 一起使用
2)-prune -o 的顺序不 能调换
3)-name等必须放在-prune -o后面才能使用

! -a -o

eg: find . -path ./tmp -prune -o -name "*.txt"

[root@localhost test]# find . ! -name “out*” -a -name “*.txt”

find / -name FILENAME -type f

find -name FILENAME

find ../.. -name FILENAME

-exec -ok

#-exec -ok find 查找文件的结果通过 可以将前面命令的结果默认通过换 行识别为多个文件参数通过后面命令进行处理

find / -type f -exec cp -p {} /test ;

find / -type f -ok cp -p {} /test ;

[root@localhost test]# find . -type f |xargs -I {} cp {} /test

-I 将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。

find

find命令格式:

1
find   path  -option  【 -print 】  【 -exec   -ok   |xargs  |grep  】 【  command  {} \;  】

find命令的参数:

1)path:要查找的目录路径。

  ~ 表示$HOME目录
   . 表示当前目录
   / 表示根目录 

2)print:表示将结果输出到标准输出。

3)exec:对匹配的文件执行该参数所给出的shell命令。
形式为command {} ;,注意{}与;之间有空格

4)ok:与exec作用相同,
区别在于,在执行命令之前,都会给出提示,让用户确认是否执行

5)|xargs 与exec作用相同 ,起承接作用

区别在于 |xargs 主要用于承接删除操作 ,而 -exec 都可用 如复制、移动、重命名等

6)options :表示查找方式

options常用的有下选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-name   filename               #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-prune #忽略某个目录

下面通过一些简单的例子来介绍下find的常规用法:

1、按名字查找

  在当前目录及子目录中,查找大写字母开头的txt文件 
   $ find . -name '[A-Z]*.txt' -print   

  在/etc及其子目录中,查找host开头的文件 
  $ find /etc -name 'host*' -print   

  在$HOME目录及其子目录中,查找所有文件   
  $ find ~ -name '*' -print 

  在当前目录及子目录中,查找不是out开头的txt文件   
  $ find . -name "out*" -prune -o -name "*.txt" -print 

2、按目录查找   

  在当前目录除aa之外的子目录内搜索 txt文件   
  $ find . -path "./aa" -prune -o -name "*.txt" -print   

  在当前目录及除aa和bb之外的子目录中查找txt文件   
  $ find . −path′./dir0′−o−path′./dir1′−path′./dir0′−o−path′./dir1′ -a -prune -o -name '*.txt' -print

注意:在1、2处都需要加空格,否则会出现如图所示的报错

       在3处加不加 -a都可以

  在当前目录,不再子目录中,查找txt文件 
  $ find . ! -name "." -type d -prune -o -type f -name "*.txt" -print 

 或者   find . -name *.txt -type f -print

3、按权限查找   

  在当前目录及子目录中,查找属主具有读写执行,其他具有读执行权限的文件   
  $ find . -perm 755 -print 

  查找用户有写权限或者组用户有写权限的文件或目录
  find ./ -perm /220
  find ./ -perm /u+w,g+w
  find ./ -perm /u=w,g=w

4、按类型查找  (b/d/c/p/l/f ) 

  在当前目录及子目录下,查找符号链接文件   
  $ find . -type l -print 

5、按属主及属组   

  查找属主是www的文件   
  $ find / -user www -type f -print   

  查找属主被删除的文件 
  $ find / -nouser -type f -print   

  查找属组 mysql 的文件 
  $ find / -group mysql -type f -print   

  查找用户组被删掉的文件 
  $ find / -nogroup -type f -print 

6、按时间查找   

  查找2天内被更改过的文件 
   $ find . -mtime -2 -type f -print   

  查找2天前被更改过的文件 
  $ find . -mtime +2 -type f -print   

  查找一天内被访问的文件 
  $ find . -atime -1 -type f -print   

  查找一天前被访问的文件 
  $ find . -atime +1 -type f -print   

  查找一天内状态被改变的文件 
  $ find . -ctime -1 -type f -print   

  查找一天前状态被改变的文件 
  $ find . -ctime +1 -type f -print   

  查找10分钟以前状态被改变的文件 
  $ find . -cmin +10 -type f -print 

7、按文件新旧   

  查找比 aa.txt 新的文件 
  $ find . -newer "aa.txt" -type f -print   

  查找比 aa.txt 旧的文件 
  $ find . ! -newer "aa.txt" -type f -print   

  查找比aa.txt新,比bb.txt旧的文件 
  $ find . -newer 'aa.txt' ! -newer 'bb.txt' -type f -print 

8、按大小查找   

  查找超过1M的文件 
  $ find / -size +1M -type f -print   

  查找等于6字节的文件 
  $ find . -size 6c -print   

  查找小于32k的文件 
  $ find . -size -32k -print 

9、执行命令   

  1)查找 del.txt 并删除,删除前提示确认 
  $ find . -name 'del.txt' -ok rm {} \;   

 2) 查找 aa.txt 并备份为aa.txt.bak 
  $ find . -name 'aa.txt' -exec cp {} {}.bak \;

 3)查当前目录下的所有普通文件

# find . -type f -exec ls -l {} \; 

-rw-r–r– 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r–r– 1 root root 12959 2003-02-25 ./conf/magic
-rw-r–r– 1 root root 180 2003-02-25 ./conf.d/README

查当前目录下的所有普通文件,并在 - exec 选项中使用 ls -l 命令将它们列出

4)在 /logs 目录中查找更改时间在5日以前的文件并删除它们
$ find logs -type f -mtime +5 -exec -ok rm {} ;

5)查询当天修改过的文件

# find ./ -mtime -1 -type f -exec ls -l {} ;

6)查询文件并询问是否要显示

# find   ./   -mtime   -1   -type f   -ok   ls -l   {} \;  
< ls … ./classDB.inc.php > ? y
-rw-r–r–    1 cnscn    cnscn       13709   1月 12 12:22 ./classDB.inc.php
# find   ./   -mtime   -1   -type f   -ok   ls -l   {} \;  
< ls … ./classDB.inc.php > ? n

文件压缩解压缩

tar

-c

-x

-t

-v

-f

-j

-J

-z

-C

文件传输:

window –linux xftp实现文件传送

​ rz FILENAME 接收 sz 传送 —lrzsz包

linux–linux

文件发送: scp mima root@192.168.220.154:/root

文件接收: scp root@192.168.220.154:/root/mima /passwd

​ scp -r

​ [root@162 ~]# sftp 192.168.220.154 发起sftp的远程连接

​ sftp> put file

​ sftp> get filename

文件管理名

touch > >> vi/vim nano

mkdir

rm -rf

cp

mv

wget

cat tac more less head tail (vim nano) grep

vim**** nano > >>

echo this is test > a.txt

cat < file

grep wc cut sort uniq tr

whereis

which

locate

find****

tar

bash 特性

1.bzip and bzip2

image-20220215174723597

用途:
制作压缩文件、解开压缩文件

命令格式:

gzip [-9] 文件名…
bzip2 [-9] 文件名…
gzip -d .gz格式的压缩文件
bzip2 -d *.bz2格式的压缩文件

image-20220215174739146

常用命令选项:
-9:表示高压缩比,多在创建压缩包时用
-d:用于解开已经压缩过的文件

2.tar

用途:
制作归档文件、释放归档文件
格式:

tar [选项]… 归档文件名 源文件或目录
tar [选项]… 归档文件名 [-C 目标目录]

image-20220215174831834

alias 定义命令别名

alias 别名=”命令本身”

l临时别名,仅在当前终端运行状态下生效

vim /etc/bashrc 1–exit 2–bash 3–source /etc/bashrc

永久别名对系统所有用户都生效

vim ~/.bashrc

永久别名仅对当前用生效

定义别名
定义别名的方法很简单,格式如下所示:

alias [name[=value]]

这里需要注意的是:

等号(=)前后不能有空格,否则就会出现语法错误了。
如果value中有空格或tab,则value一定要使用引号(单、双引号都行)括起来。

了解了别名的基础知识之后,我们来看一个定义别名的例子:

[roc@roclinux ~]$ alias vi=’vim’
这个例子定义了一个 vim 命令的别名,以后,当我们执行 vi 命令时,其实真正执行的是 vim 命令。

如何查看别名
如果太热衷于设置别名,那么你就会面临着要记住很多别名的困扰,因此,学会查看所有已设置的别名,就显得尤为重要了。

查看别名的方法也很简单,直接输入 alias 命令,不加任何选项和参数即可:
image-20220215174945311

命令缓存

1.建立命令缓存

执行命令自动在缓存建立

hash -p /usr/bin/touch touch

hash -p /usr/bin/touch chuangjian

2.删除缓存

hash -d chuangjian

hash -r 清空所有缓存

exit终端

缓存特点: 命令缓存—alias–名令文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[root@162 ~]# hash
hits command
3 /usr/bin/vim
1 /usr/bin/cat
1 /usr/sbin/pidof
2 /usr/bin/su
[root@162 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@162 ~]# which touch
/usr/bin/touch
[root@162 ~]# touch a
[root@162 ~]# hash
hits command
3 /usr/bin/vim
1 /usr/bin/cat
1 /usr/bin/touch
1 /usr/sbin/pidof
2 /usr/bin/su
[root@162 ~]# touch /usr/bin/touch ---=优先通过缓存匹配
[root@162 ~]# hash
hits command
3 /usr/bin/vim
1 /usr/bin/cat
2 /usr/bin/touch
1 /usr/sbin/pidof
2 /usr/bin/su

[root@162 ~]# mv /usr/bin/touch /usr/local/bin
[root@162 ~]# touch b
bash: /usr/bin/touch: No such file or directory
[root@162 ~]# hash -d touch
[root@162 ~]# hash
hits command
3 /usr/bin/vim
1 /usr/bin/cat
1 /usr/sbin/pidof
3 /usr/bin/mv
2 /usr/bin/su
[root@162 ~]# touch b ----不存在缓存以及别名执行环境变量路径下的命令文件
[root@162 ~]# hash -p /usr/bin/tac chakan --别名

history

展示数行之前的历史命令。命令编号前面前缀上感叹号可以再次执行这个命令。如果我们需要编辑历史列表中的命令,我们可以按下 Ctrl + r 并输入与命令相关的第一个字符。我们可以看到的命令会自动补全,可以根据我们目前的需要来编辑它:

命令列表会保存在一个叫 .bash_history 的文件里。history 命令是一个非常有用的用于减少输入次数的工具,特别是进行命令行编辑的时候。默认情况下,bash 保留最后输入的500个命令,不过可以通过修改 HISTSIZE 环境变量来增加:
image-20220215174529724

Linux history 命令

但上述变化,在我们的下一次启动不会保留。为了保持 HISTSIZE 变量的变化,我们需要通过手工修改文件编辑:

  1. #要设置 history 长度,请看bash(1)文档中的 HISTSIZE 和 HISTFILESIZE
  2. HISTSIZE=1000

重要: 我们的更改不会立刻生效,除非我们重启了 shell 。

day05

用户组

AAA

用户类别

管理员 只有一个UID=0

普通用户 1-65535

​ 系统用户 1-999

​ 系统管理账号:1-200

​ 系统普通账号 : 201-999

​ 一般用户 1000-

公有模式 users ** 私有模式 用户在自己的组当中(创建用户会创建一个和用户同名的组)

1.用户创建

useradd == adduser 添加用户或者更新添加用户的基本信息

1
2
3
4
5
6
7
8
9
10
#useradd    USERNAME
#useradd -u 1111 -g 1000 -d /test/user2 -s /sbin/nologin user2
创建用户命令 (选项) 要创建的用户名
-c 更改描述名称
-u 指定UID
-g 指定用户的基本组(主组)
-G 指定用户的附加组
-d 指定家目录
-s 指定shell字段
-r 指定系统用户
2.查看系统中用户信息

1)用户的配置文件(/etc/passwd)

用户名:密码占位符: 用户唯一id值:基本组的组id:描述字段(注释):家目录:shell

2)id 判断系统某一个用户是否存在

3)grep ^USERNAME /etc/passwd

3.用户修改

usermod [options] LOGIN

-c 修改描述名称

-d 指定家目录

-g 修改基本组

-G 修改附属组 会将用户以指定的附属组进行修改

-l 修改登录名称

-L 锁定用户

-s 修改shell

-u 修改UID

-U 解锁

4.删除用户

userdel -r USERNAME 完整删除一个用户相关的所有信息

注: 也会删除用户的基本组,但是如果基本组当中存在的其他的用户通过userdel -r 不能删除该基本组

userdel USERNAME 只删除用户配置文件相关信息,如果要完整删除用户需要手动删除用户的家目录/home/USERNAME和邮件文件/var/spool/mail/USERNAME

组类别

管理组 只有一个

普通组 1-65535

​ 基本组(默认组、主组) 一个用户只有一个基本组

​ 附属组 一个用户可以有多

1.创建组

groupadd GROUPNAME

​ -g 指定gid

​ -r 指定为系统组(1-999)

groupadd -g 456 -r GROUPNAME

2.查看组信息

1)查看组配置文件/etc/group

组名:组密码占位符:组id:组中的用户名(把当前组作为附属组的用户名)

2)grep ^USERNAME /etc/group

3)组修改

groupmod 修改组信息

-g 修改组id

-n 修改组名

groupmod -n grp1 g1 将g1组名改为grp1

4)删除组

groupdel GROUPNAME

只能删除附属组组当中有用户也可以删除,不能删除基本组

用户密码管理

1.设置密码

passwd USERNAME 用户密码修改,设置用户密码

passwd / chage更改密码参数

​ -l 锁定用户密码

​ -u 解锁用户

​ -x

​ -n

​ -w

​ -d

[root@162 ~]# echo mima | passwd –stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.

chpasswd 批量更改

echo root:mima | chpasswd

vim file

root:mima1

zhangsan:mima2

cat file | chpasswd

chpasswd < file

2.查看密码信息 /etc/shadow

用户名:密码:最后一次设置密码的时间(1970.1.1开始统计到设置密码的天数):密码最短时间:最长:警告时间:宽限时间:过期精确时间(1970.1.1开始统计到密码失效的天数)

组密码管理

1)设置组密码

gpasswd GROUPNAME

-a 将指定用户拉到某一个组

-d 从组中移除用户

-M 设置组成员列表

-r 删除组密码

-R 锁定组密码(解锁–重置组密码)

-A 设置组长(可以将添加,删除组中用户)

newgrp 切换新组

注:作为管理员切换组不需要组密码,如果是组成员也不需要验证组密码

2)查看组密码/etc/gshadow

组名:组密码:组长:组成员

补充:

useradd haha /etc/passwd /etc/shadow /etc/group /etc/gshadow

​ /home/USERNAME 家目录

​ /var/spool/mail/USERNAME 邮件文件

默认定义用户添加的相关参数值:/etc/login.defs /etc/default/useradd

实验:创建学习组1,学习组2 ;他们的组gid分别为1111,2222,添加成员并将uid为1088,

和uid为1066的成员为两组的组长,其中一组组长有一个‘外号’laoda。

不同学习组进入需要密码才能进入(设置密码);即使密码泄露也不希望组之外的成员进入。

groupadd -g 1111 g1

groupadd g2

groupmod -g 2222 g2

useradd u1

usermod -u 1088 u1

useradd u2

usermod -u 1066 u2

gpasswd -a u1 g1

gpasswd -a u2 g2

gpasswd -A u1 g1

gpasswd -A u2 g2

usermod -c laoda u1

gpasswd g1

gpasswd g2

gpasswd -R g1

gpasswd -R g2

kali

sudo用户授权

通过管理员给普通用户下发执行命令的特权

vim /etc/sudoers

redhat ALL=(ALL) NOPASSWD: /usr/sbin/useradd

提权用户 提权用户所在的主机名=(授权用户) 提权不需要密码验证: 提取可执行的命令

$sudo useradd u1

su

su redhat

su - redhat

w | who | users查看系统通过哪些用户基于终端登录

last 查看当前主机近期时间里通过哪些用户验证登录当前主机

whoami 查看当前终端通过哪一个用户身份登录

权限

[root@162 ~]# ll
total 40
-rw-r–r–. 1 root root 0 Feb 13 21:15 111

系统权限在文件中标识

2-11

2-10 9个字符标识一般权限r w x

​ 9个字符每三个字符一组标记权限 所属用户 所属组 其他用户

​ 用户如何匹配对应文件的权限

​ 111该文件所属用户是root用户,对于root用户对111文件现在拥有rw-

11 扩展权限标识符 .没有扩展权限 +有扩展权限

系统当中权限的描述方式:

字符形式: rwx (系统权限的标识)

数值形式: 4=r 2=w 1=x 对于111文件所属用户root他的权限6 所属组的权限4 其他用户的权限4

(用户方便描述权限)

系统中文件默认的权限值

**权限掩码:(权限过滤符) umask = 022 033

目录最高权限:777 755 744

文本文件的权限: 666 644 644

6 6 6

rw- rw- rw-

0 3 3 0 4 4 0 5 5

— -wx -wx r-x r-x

rw- r– r–

6 4 4

权限修改:chmod

chmod 权限 FILENAME(管理员可以更改所有用户创建文件的权限;但是普通用户只能更改自己创建的文件(文件的所属用户是当前用户))

字符形式: chmod u=rwx,g+wx,o-x a chmod ugo=rw FILENAME == chmod a=rw FILENAME

数值形式: chmod 644 FILENAME chmod 66 FILENAME 066

chown 更改文件所属用户 chown 所属用户名 FILENAME chown u1 a chown u2:u2 a chown :u4 a

chgrp 更改文件的所属组 chgrp 所属组(组名) FIELNAME

权限匹配规则:(没有扩展权限时)

标准定义: 安全上下文

通过发起者用户执行一个可执行文件(命令),匹配一个目标文件时,判断执行文件的发起者身份是否是目标文件的的所属用户,如果是直接匹配所属用户权限,如果不是开始匹配是否是文件所组的用户如果是直接匹配所属组权限,不是则直接匹配其他用户的权限。

(首先判断发起用户,是否是文件的所属用户,如果是直接匹配所属用户权限,如果不是开始匹配是否是文件所组的用户如果是直接匹配所属组权限,不是则直接匹配其他用户的权限。)

文件权限字符含义

d目录: r 查看(列出)目录下的文件信息 ls

​ w 能够在指定目录中创建文件 touch > >> vim nano mkdir mv cp (对于普通用户如果没有写权限,则不能删除该目录下的文件)

​ x 打开该目录 cd

-文本文件: r 查看该文件的内容

​ w 编辑文件内容

​ x 运行文本内容(命令文件)

1
2
3
4
5
6
7
8
9
10
[redhat@162 ~]$ cd /root
-bash: cd: /root: Permission denied
作为redhat对于/root目录没有执行权限

[root@162 /]# ll /root -d redhat用户对于/root是其他用户,需要其他用户位加上执行权限
dr-xr-x---. 18 root root 4096 Feb 16 21:35 /root
[root@162 /]# chmod o+x /root
[root@162 /]# su - redhat

[redhat@162 ~]$ cd /root
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@162 /]# touch file
[root@162 /]# ll
-rw-r--r--. 1 root root 0 Feb 16 22:03 file
[redhat@162 /]$ cat file

[redhat@162 /]$ echo this is red1 >file
-bash: file: Permission denied
[root@162 /]# chmod o+w file
[redhat@162 /]$ echo this is red1 > file
[redhat@162 /]$ cat file
this is red1

[redhat@162 /]$ ./file
-bash: ./file: Permission denied
[root@162 /]# chmod o+x file
[redhat@162 /]$ ./file
./file: line 1: this: command not found

特殊权限

chmod u+s,o+s,o+t FILENAME 是在文件对应的执行位显示,如果文件默认没有执行权限特殊权限大写标识,如果有特殊权限特殊权限字符小写标识。

chmod 7644 FILENAME 特殊权限是7(u+s=4,g+s=2.o+t=1) 644标准权限

u+s =4 所属用户的强制位(对于可执行文件的所属用户禁锢) —1.对可执行文件设置有意义

g+s =2 所属组的强制位(对于可执行文件的所属组禁锢)(对目录文件设置–目录文件的所属组禁锢;表示任何用户创建文件的所属组都是当前目录的所属组)

o+t =1 sticky冒险位(对一个目录文件存在冒险位,用户只能删除自己文件不能删除别人的文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@162 /]# ll /usr/bin/touch 
-rwxr-xr-x. 1 root root 109776 Feb 14 03:07 /urs/bin/touch

[redhat@162 ~]$ touch red1 // 通过当前用户redhat,执行可执行文件touch,所以touch进程文件的所属用户就是当前用户,根据当前进程创建目标文件,所以目标文件的所属用户以及所属组和进程文件的所属用户和所属组一样。
[redhat@162 ~]$ ll red1
-rw-rw-r--. 1 redhat redhat 0 Feb 16 22:40 red1


root@162 /]# chmod u+s /usr/bin/touch
[root@162 /]# ll /usr/bin/touch 对可执行文件设置u+s
-rwsr-xr-x. 1 root root 109776 Feb 14 03:07 /usr/bin/touch

[redhat@162 ~]$ touch red2 //通过当前用户redhat执行可执行文件touch,touch进程文件的所属用户取决于文件自身的用户root,所属组取决于发起者身份redhat的基本组,所以目标文件的所属用户是root:redhat
[redhat@162 ~]$ ll red2
-rw-rw-r--. 1 root redhat 0 Feb 16 22:46 red2

root@162 /]# chmod g+s /usr/bin/touch
[root@162 /]# ll /usr/bin/touch 对可执行文件设置u+s,g+s
-rwsr-sr-x. 1 root root 109776 Feb 14 03:07 /usr/bin/touch

[redhat@162 ~]$ touch red3 //通过当前用户redhat执行可执行文件touch,touch进程文件的所属用户取决于文件自身的用户root,所属组取决于文件自身的所属组root,所以目标文件的所属用户是root:root
[redhat@162 ~]$ ll red3
-rw-rw-r--. 1 root redhat 0 Feb 16 22:46 red2
1
2
3
4
5
6
7
8
9
10
实际案例:
[root@162 /]# ll /etc/shadow
----------. 1 root root 1812 Feb 16 03:21 /etc/shadow

为什么用户能够通过passwd修改密码命令对密码文件有写权限

[root@162 /]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 34512 Aug 12 2018 /usr/bin/passwd

[redhat@162 ~]$ passwd 通过发起者身份redhat,运行passwd可执行文件,可执行文件进程的所属用户取决于文件自身用户root,通过root用户对密码文件进行操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
g+s  对目录设置
[root@162 /]# chmod o+w /pub

[redhat@162 pub]$ touch aa
[redhat@162 pub]$ ll
total 0
-rw-rw-r--. 1 redhat redhat 0 Feb 17 01:12 aa

[root@162 /]# chmod g+s /pub -目录所属组禁锢
[root@162 /]# ll -d /pub
drwxr-srwx. 2 root root 16 Feb 17 01:12 /pub

[redhat@162 pub]$ touch bb --任何用户在该目录下创建的任意文件的所属组都和目录的所属组一样
[redhat@162 pub]$ ll
total 0
-rw-rw-r--. 1 redhat redhat 0 Feb 17 01:12 aa
-rw-rw-r--. 1 redhat root 0 Feb 17 01:13 bb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
目录o+t 
[root@162 /]# mkdir /test
[root@162 /]# ll -d /test
drwxr-xr-x. 2 root root 6 Feb 17 01:21 /test
[root@162 /]# chmod o+w /test

[u1@162 zuoye]$ cd /test
[u1@162 test]$ touch u1
[u1@162 test]$ touch u2
[u1@162 test]$ touch u3

[redhat@162 ~]$ cd /test
[redhat@162 test]$ touch red1
[redhat@162 test]$ touch red2
[redhat@162 test]$ touch red3

[root@162 test]# touch root1
[root@162 test]# touch root2
[root@162 test]# touch root3

[redhat@162 test]$ rm root1 ---对于当前目录没有特殊权限,但对当用户拥有写权限,所以用户可以删除任意用户创建的文件
rm: remove write-protected regular empty file 'root1'? y

[root@162 test]# chmod o+t /test --设置特殊权限
[root@162 test]# ll -d /test
drwxr-xrwt. 2 root root 98 Feb 17 01:25 /test

[redhat@162 test]$ rm red1

redhat@162 test]$ rm root2
rm: remove write-protected regular empty file 'root2'? y
rm: cannot remove 'root2': Operation not permitted ---用户只能删除自己文件不能删除别人的文件
注:对于管理员,目录文件有特殊权限该用户也可以删除任何用户创建的文件

扩展权限:

1
2
3
4
5
6
7
8
9
10
getfacl   FILENAME   查看文件的权限列表

setfacl -m u:USERNAME:prem FILENAME
g:GROUPNAME:prem FILENAME

setfacl -x u:USERNAME: FILENAME 删除文件的一条扩展权限

setfacl -b FILENAME 清空指定文件的扩展权限

应用场景(对于系统中的文件,只要求对某一个或者某一些用户对文件由不同的权限可以通过扩展权限来实现)

day06

网络管理

三种网络模式

仅主机: 虚拟机都为仅主机模式,多台虚拟可以互ping; 物理机 –ping —->虚拟机

nat: 虚拟机都为nat模式,多台虚拟可以互ping; 物理机 <—–ping —->虚拟机 只要物理能访问外网虚拟机就能上网

桥接: 虚拟机都为桥接模式,多台虚拟可以互ping;物理机 <—–ping —->虚拟机 (同一网段的地址);可以访问外网(当前主机的地址能不能访问外网)

网卡动态和静态地址配置

1.虚拟图形界面

2.nmtui 连接图形化界面进行配置(键盘)

3.nm-connection-editor 鼠标控制

4.网卡配置文件

[root@162 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet 网卡类型 Ethernet真实网卡
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp 网卡模式dhcp动态模式 none 静态模式
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens160 网卡配置文件名
UUID=29a02f09-4754-4f2f-a91b-b0fd3cbf7987
DEVICE=ens160 网卡设备名
ONBOOT=no 网卡开机后是否自动连接
IPV6_PRIVACY=no

注:RHEL7- 一个网卡设备可以对应多个网卡配置文件,但是当前网卡默认只能连接一个网卡配置

*****5.nmcli 网络管理工具

nmcli device show 显示主机所有网络设备详细信息

​ status 显示主机设备和会话(网卡配置文件)

​ connect 将设备和指定会话文件链接

nmcli connection show

​ modify

​ edit

​ add

​ delete

​ up

​ down

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
nmcli配置静态ip地址

[root@162 ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.220.111/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.220.2 connection.autoconnect yes
--修改ens160会话文件参数 网络模式=manual ipv4.地址= connection.autoconnect yes 设置网卡开机自动连接
[root@162 ~]# nmcli connection up ens160 ---激活ens160网卡配置

[root@162 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens160
UUID=29a02f09-4754-4f2f-a91b-b0fd3cbf7987
DEVICE=ens160
ONBOOT=yes
DNS1=114.114.114.114
IPV6_PRIVACY=no
IPADDR=192.168.220.111
PREFIX=24
GATEWAY=192.168.220.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
[root@162 ~]# nmcli connection edit ens160     --进入编辑网卡配置文件

===| nmcli interactive connection editor |===

Editing existing '802-3-ethernet' connection: 'ens160'

Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [<setting>.<prop>]' for detailed property description.

You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, tc, proxy
nmcli> tab
activate describe help print remove set
back goto nmcli quit save verify
nmcli> goto ipv4 进入iPv4模式
You may edit the following properties: method, dns, dns-search, dns-options, dns-priority, addresses, gateway, routes, route-metric, route-table, routing-rules, ignore-auto-routes, ignore-auto-dns, dhcp-client-id, dhcp-timeout, dhcp-send-hostname, dhcp-hostname, dhcp-fqdn, never-default, may-fail, dad-timeout
nmcli ipv4>
activate describe help print remove set
back goto nmcli quit save verify
nmcli ipv4> set method
auto disabled link-local manual shared
nmcli ipv4> set method auto 将网络模式改为自动模式
Do you also want to clear 'ipv4.addresses'? [yes]: yes
nmcli ipv4> save
Error: connection verification failed: ipv4.gateway: gateway cannot be set if there are no addresses configured
You may try running 'verify fix' to fix errors.
nmcli ipv4> remove
addresses dhcp-send-hostname dns-search method routing-rules
dad-timeout dhcp-timeout gateway never-default
dhcp-client-id dns ignore-auto-dns route-metric
dhcp-fqdn dns-options ignore-auto-routes routes
dhcp-hostname dns-priority may-fail route-table
nmcli ipv4> remove ipv4.gateway
nmcli ipv4> remove ipv4.dns
nmcli ipv4> save
Connection 'ens160' (29a02f09-4754-4f2f-a91b-b0fd3cbf7987) successfully updated.
nmcli ipv4> quit
[root@162 ~]# nmcli connection up ens160

[root@162 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens160
UUID=29a02f09-4754-4f2f-a91b-b0fd3cbf7987
DEVICE=ens160
ONBOOT=yes
IPV6_PRIVACY=no
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@162 ~]# nmcli connection add type ethernet ifname ens160 con-name work
Connection 'work' (dcab47ad-1250-458f-ad64-7471f4bb41e0) successfully added.
[root@162 ~]# vim /etc/sysconfig/network-scripts/ifcfg-work

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=work
UUID=dcab47ad-1250-458f-ad64-7471f4bb41e0
DEVICE=ens160
ONBOOT=yes
[root@162 ~]# nmcli connection modify work ipv4.method manual ipv4.addresses 192.168.220.111/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.220.2
[root@162 ~]# nmcli connection up work
root@162 ~]# nmcli connection delete work

day07

软件安装

1.获取软件 包

(1)本地获取

本地光盘存储介质获取

默认路径:/run/media/root/RHEL-8-1-0-BaseOS-x86_64

手动挂载: mkdir /sr0

​ mount /dev/sr0 /sr0 (临时生效)

​ 挂载命令 设备名称 挂载点目录

​ 取消挂载: 注意不能再挂载点目录中取消

                                 umount   设备名

​ umount 挂载点

(2)网络(上网)

网易开源镜像站

阿里开源镜像站

清华大学

2.安装软包RHEL8

/mnt/AppStream/Packages

/mnt/BaseOS/Packages

#cd /mnt/AppStream/Packages

rpm -ivh zsh-html-5.5.1-6.el8.noarch.rpm

​ -qpi 包名 查看一个软件包的详细信息

​ -evh 卸载软件包

​ -qa 查询已安装的所有软件包 rpm -qa | grep 软件名

​ -ql 查看指定软件的文件列表

​ -qf 查看某个文件是由哪一个包提供

​ -Uvh 更新软件包

​ -qd 查询软件的事例文档

[root@localhost ~]# rpm -ivh https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm

dnf/yum

能够自动解决依赖关系(自动识别依赖包并且下载对应依赖包,一次性安装无需手动指定)

1.获取软件包

(1)本地安装

mount /dev/sr0 /mnt

(2)网络安装

2.安装软件包

配置yum配置文件—-/etc/yum.repos.d/*.repo

vim /etc/yum.repos.d/base.repo

[AppStream] 源标示名称(名称自定义)

name=App 源名称

baseurl=file:///mnt/AppStream

gpgcheck=0

[BaseOS]

name=base

baseurl=file:///mnt/BaseOS

gpgcheck=0

#dnf install httpd -y

​ repolist 显示仓库状态

​ remove 移除,卸载软件

​ update

源码安装

解包 —— tar
解包、释放出源代码文件
配置 —— ./configure
针对当前系统、软件环境,配置好安装参数
编译 —— make
将源代码文件变为二进制的可执行程序
安装 —— make install
将编译好的程序文件复制到系统中

mkdir /test
rm -rf /test/*
mv tar-1.29.tar.gz /test

cd /test
ll
tar -zxvf tar-1.29.tar.gz
ll
dnf remove tar -y
touch 1
tar -cvzf 1.tar.gz 1 –系统默认的tar工具移除
ll
cd tar-1.29/
yum install gcc* -y –安装编译器

./configure —不能通过管理员运行
su redhat

rm -rf config.log

./configure –通过普通用户进行配置、

exit

make
make install
ll
tree
which tar
cd ..
ll
tar -zcvf 1.tar.gz 1
hash
hash -d tar
tar -zcvf 1.tar.gz 1
ll
history

ps pstree top kill PID killall 进程名称 & ctrl-z jobs fg bg nohup

top ***

磁盘管理

1.磁盘设备基本单位 扇区=512 数据层 1块 = 4KB

2.主机启动顺序

主机加电开机+bios硬件自检+mbr+grub2+启动内核+initrams+加载系统系统文件

3.mbr 默认只记录四个分区表项,但是可以把其中一个主分区作为扩展分区在扩展分区中可以分多个逻辑分区

​ 3主分区+1扩展分区(n逻辑分区)

​ 主分区

为什么创建多个分区:通过不同分区可以管理不同类型的数据文件;通过多个分区设置不同的文件系统类型,来存放不同数据类型的文件。

如何创建分区

1.条件

至少需要一块硬盘;有剩余空间

lsblk 可以显示系统所有块设备

2.磁盘管理工具创建分区

fdisk /dev/nvme0n2

n 创建新的分区 d删除分区 p打印分区列表 w 保存退 q退出不存

3.设置文件系统类型(格式化)

[root@localhost ~]# mkfs.xfs /dev/nvme0n2p2

4.使用分区

临时挂载

mkdir /p1

mount /dev/nvme0n2p1 /p1

umount /p1

永久挂载

vim /etc/fstab

设备名(UUID) 挂载点目录 文件系统类型 参数 开机备份 开机检查

mount -a 在当前主机运行状态下挂载所有加载/etc/fstab 文件设备新添加设信息

reboot 重启加载文件

blkid 查看设备id (设备的文件系统类型)

注: 一个文件系统可以同时挂载到多个挂点目录;多个文件系统挂载到一个挂载点目录,但是通过挂载点查看的是最后一次连接文件系统信息。