第0章:Linux基础入门
0.1 什么是计算机
计算机的组成:
控制器:是整个计算机的中枢神经,根据程序要求进行控制,协调计算机各部分工作及内存与外设的访问等。
输入设备:将文字、数据、程序和控制命令等信息输入到计算机。
存储器:存储程序、数据、命令等信息。
运算器:对数据进行各种算术运算和逻辑运算。
输出设备:将计算机计算后的信息输出出来。
计算机的功能:接收输入设备的指令和数据,经过cpu的数据和逻辑运算处理产生有用的信息存储起来或者输出到屏幕上。
0.2 操作系统简介
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是配置在计算机硬件上的第一层软件,任何其它软件都必须在操作系统的支持下才能运行。操作系统的主要工作是由操作系统内核实现的,操作系统的内核功能:
系统调用接口:程序员通过该接口与内核进行通信。
程序管理:一部计算机可能同时间有很多的工作在等待CPU运算处理,内核这个时候必须要能够控制这些工作,让CPU的资源做有效的分配才行。
内存管理:控制整个系统的内存管理,系统所有的程序代码与数据都必须要先存放在内核当中。通常内核会提供虚拟内存的功能,当内存不足时可以提供内存交换的功能。
文件系统管理 :例如数据的输入和输出等的工作,还有不同文件格式的支持等。
设备驱动:硬件的管理是内核的主要工作之一,设备的驱动程序就是内核管理着硬件的代码,设备的驱动程序可以使硬件准备好工作,时刻等待着程序的调用。好在目前都有所谓的“可加载模块”功能,可以将驱动程序编辑成模块,就不需要重新编译内核。
第一章:简单使用Linux
1.1 Linux的组成
Shell:Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。
应用程序:包括文本编辑器、编程语言、X Window、办公套件、Internet工具、数据库等。
Linux的操作界面常称为Shell,Shell是操作系统提供给用户使用的界面(图形、字符),它提供了用户与内核进行交互操作的一种接口。当用户发出指令(命令或鼠标操作),先将这些指令发送给Shell,由Shell将用户的指令翻译后传送给内核,再由内核来控制硬件的工作。然后内核将硬件的工作情况发送给Shell,并由Shell返回硬件的工作信息和情况。
1.2 使用终端访问Linux
(1)查看当前Linux的发行版信息
[root@server ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.3 (Plow)
(2)查看内核版本
[root@server ~]# uname -r
5.14.0-362.8.1.el9_3.x86_64
(3)查看shell的类型
#方法一:
[root@server ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
#方法二:
[root@server ~]# chsh -l
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
(4)查看当前默认的shell
[root@server ~]# echo $SHELL
/bin/bash
(5)shell提示符
对于普通用户,Bash shell 默认的提示符是:$
对于超级用户(rooot),Bash shell 默认的提示符是:#
(6)使用命令重启和关闭Linux操作系统:
重启:reboot、shutdown -r now
关机:poweroff、shutdown -h now
1.3 Linux基础命令使用
(1)切换用户:su
#切换到root用户,若切换其他普通用户则在后面加上用户名
[obboda@server ~]$ su -
#退出当前用户(或者使用快捷键ctrl + d)
[root@server ~]# exit
#查看当前登录用户
[obboda@server ~]$ whoami
obboda
(2)修改主机名
#临时修改,重启linux系统之后失效
[root@localhost ~]# hostname server
#永久生效,修改的是文件内容。重启linux系统后依旧生效
[root@localhost ~]# hostnamectl set-hostname server
#查看主机名配置文件
[root@localhost ~]# cat /etc/hostname
server
(3)查看当前工作目录:pwd
[obboda@server ~]$ pwd
/home/obboda
[obboda@server ~]$ su -
[root@server ~]# pwd
/root
(4)切换目录:cd
cd / :切换到根目录下
cd - :回到切换前的目录
cd ~ :切换到当前目录的家目录下(若cd不加参数默认为~)
cd .. :切换到上一级目录(. 表示当前目录)
(5)修改密码:passwd
#只有root用户能够指定修改其他用户密码,普通用户修改自己密码只需输入passwd
[root@server ~]# passwd test11
更改用户 test11 的密码 。
新的密码:
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
#删除test11的密码
[root@server ~]# passwd -d test11
清除用户的密码 test11。
passwd: 操作成功
第二章:Linux中执行命令
2.1 命令格式
命令格式: 主命令 选项 参数(操作对象)
命令:
- 内置命令(builtin):由shell程序自带的命令
- 外部命令:有独立的可执行程序文件,文件名即命令名
选项:指定命令的运行特性,指明要运行命令中的哪一个功能代码。
- 短选项:例如:-l,-d,如果同一命令同时使用多个短选项,多数可合并
- 长选项:例如--help,--human-readable
参数:命令的作用对象,即命令对什么生效。
终止命令: 按 Ctrl+c 键可中断正在执行的命令。
补全命令:输入命令关键字的前几个字符后,按 Tab 键,可实现命令自动补全。
2.2 查看命令帮助
(1)help 和 --help
#两种命令输出结果一样
[root@server ~]# help cd
[root@server ~]# cd --help
cd: cd [-L|[-P [-e]] [-@]] [目录]
改变 shell 工作目录。
改变当前目录至 DIR 目录。默认的 DIR 目录是 shell 变量 HOME
的值。
变量 CDPATH 定义了含有 DIR 的目录的搜索路径,其中不同的目录名称由冒号 (:)分隔。
一个空的目录名称表示当前目录。如果要切换到的 DIR 由斜杠 (/) 开头,则 CDPATH
不会用上变量。
如果路径找不到,并且 shell 选项 `cdable_vars' 被设定,则参数词被假定为一个
变量名。如果该变量有值,则它的值被当作 DIR 目录。
选项:
-L 强制跟随符号链接: 在处理 `..' 之后解析 DIR 中的符号链接。
-P 使用物理目录结构而不跟随符号链接: 在处理 `..' 之前解析 DIR 中的符号链接。
-e 如果使用了 -P 参数,但不能成功确定当前工作目录时,返回非零的返回值。
-@ 在支持拓展属性的系统上,将一个有这些属性的文件当作有文件属性的目录。
默认情况下跟随符号链接,如同指定 `-L'。
`..' 使用移除向前相邻目录名成员直到 DIR 开始或一个斜杠的方式处理。
退出状态:
如果目录改变,或在使用 -P 选项时 $PWD 修改成功时返回 0,否则非零。
(2)man
man用来提供在线帮助,使用权限是所有用户。使用man命令可以调阅其中的帮助信息,非常方便实用。
[root@server ~]# man ls
(3)info
info与man的用途其实差不多,都是用来查询命令的用法或者是文件的格式。但是与man page不同的是,info page则是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写, 并且在各个页面中还有类似网页的『超链接』来跳到各不同的页面中,每个独立的页面也被称为一个节点(node)。
2.3 date命令
date命令中的参数以及作用:
按照默认格式查看当前系统时间:
[root@server ~]# date
2024年 11月 05日 星期二 17:15:59 CST
参数%j可用来查看今天是当年中的第几天:
[root@server ~]# date "+%j"
310
按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间:
[root@server ~]# date "+%Y-%m-%d %H:%M:%S"
2024-11-05 17:19:34
将系统的当前时间设置为2022年9月1日8点30分:
[root@server ~]# date -s "20220901 8:30:00"
2022年 09月 01日 星期四 08:30:00 CST
2.4 timedatectl命令
timedatectl命令用于设置系统的时间,英文全称为:“time date control”
查看系统时间与时区:
[root@server ~]# timedatectl status
Local time: 四 2022-09-01 08:02:51 CST
Universal time: 四 2022-09-01 00:02:51 UTC
RTC time: 二 2024-11-05 09:24:11
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: active
RTC in local TZ: no
若时区不正确,可以进行手动设置(日期、时间同理):
[root@server ~]# timedatectl set-timezone Asia/Shanghai
2.5 查看目录下的文件:ls
[root@server ~]# ls -lh /root/
总用量 184K
drwxr-xr-x. 2 root root 6 1月 15 2024 公共
drwxr-xr-x. 2 root root 6 1月 15 2024 模板
drwxr-xr-x. 2 root root 6 1月 15 2024 视频
drwxr-xr-x. 2 root root 53 1月 15 2024 图片
drwxr-xr-x. 2 root root 6 1月 15 2024 文档
drwxr-xr-x. 2 root root 6 1月 15 2024 下载
drwxr-xr-x. 2 root root 6 1月 15 2024 音乐
drwxr-xr-x. 2 root root 6 1月 15 2024 桌面
-rw-------. 1 root root 813 1月 8 2024 anaconda-ks.cfg
-rw-r--r--. 1 root root 345 11月 1 18:26 haha.txt
-r-xr-xr-x. 1 root root 173K 1月 15 2024 vsftpd-3.0.5-5.el9.x86_64.rpm
第三章:Linux文件类型和根目录结构
3.1 Linux文件类型
3.2 Linux系统的目录结构
第四章:从命令行管理文件
4.1 创建链接文件
符号链接又叫软链接,和原文件不是一个文件 例如Windows的快捷方式,如果原始文件被删除,所有指向它的符号链接也就都被破坏了。软链接有自己的node,是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径。符号链接可以跨越文件系统,也可以为目录建立。
创建软链接文件:ln -s 源文件 目标文件
[root@server ~]# ln -s /etc/hostname /root/hostname
[root@server ~]# ll -i /etc/hostname /root/hostname
67575434 -rw-r--r--. 1 root root 7 10月 24 20:11 /etc/hostname
35247713 lrwxrwxrwx. 1 root root 13 11月 5 17:54 /root/hostname -> /etc/hostname
硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为inode)。当移动或者删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在件结构中的位置。
创建软链接文件:ln 源文件 目标文件
[root@server ~]# ln /etc/hostname /root/hostname
[root@server ~]# ll -i /etc/hostname /root/hostname
67575434 -rw-r--r--. 2 root root 7 10月 24 20:11 /etc/hostname
67575434 -rw-r--r--. 2 root root 7 10月 24 20:11 /root/hostname
4.2 目录操作命令
(1)创建目录
命令格式:mkdir [-pv] [路径]目录名
-p :可快速创建出目录结构中指定的每个目录,对于已存在的目录不会被覆盖
-v :显示创建目录的详细过程
[root@server ~]# mkdir -pv /root/1/2/3
mkdir: 已创建目录 '/root/1'
mkdir: 已创建目录 '/root/1/2'
mkdir: 已创建目录 '/root/1/2/3'
(2)统计目录及文件的空间占用情况
命令格式:du [选项] [目录名]
(3)删除目录文件
命令格式:rm [-rf] 目录/文件名
-r :递归删除目录下的所有子目录和文件
-f :强制删除不会询问
4.3 创建、删除普通文件
(1)创建普通文件
命令格式:touch [选项] 文件名
touch的两种用法:
- 如果文件不存在,则表示创建文件。
- 如果文件已存在,更新文件的三个时间。 stat 可以查看文件的详细信息。
[root@server ~]# stat /etc/hostname
文件:/etc/hostname
大小:7 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:67575434 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:hostname_etc_t:s0
最近访问:2024-11-05 15:57:08.146390808 +0800
最近更改:2024-10-24 20:11:42.864992358 +0800
最近改动:2024-11-05 17:56:06.190608537 +0800
创建时间:2024-10-24 20:11:42.864992358 +0800
[root@server ~]# touch /etc/hostname
[root@server ~]# stat /etc/hostname
文件:/etc/hostname
大小:7 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:67575434 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:hostname_etc_t:s0
最近访问:2024-11-05 18:15:50.469058365 +0800
最近更改:2024-11-05 18:15:50.469058365 +0800
最近改动:2024-11-05 18:15:50.469058365 +0800
创建时间:2024-10-24 20:11:42.864992358 +0800
注:三个时间是指atime、mtime和ctime,分别对应访问文件时间、修改内容的时间和修改文件元数据的时间。
(2)创建多个文件
方法1: touch 文件名1 文件名2 文件名3
方法2: touch {文件名1,文件名2,文件名3}
[root@server xixi]# touch {1,2}{3,4}
[root@server xixi]# ls
13 14 23 24
[root@server xixi]# touch haha{1..10}
[root@server xixi]# ls
13 14 23 24 haha1 haha10 haha2 haha3 haha4 haha5 haha6 haha7 haha8 haha9
(3)删除普通文件
命令格式: rm [-f] 文件名
4.4 数据流和重定向
(1)数据流
- 标准输入(standard input,简称stdin):默认情况下,标准输入指从键盘获取的输入。
- 标准输出(standard output,简称stdout):默认情况下,命令执行所回传正确的信息会输出到屏幕上。
- 标准错误输出(standard error output,简称stderr):默认情况下,标准错误输出可以理解为命令执行失败后,所回传的错误信息会输出到屏幕上。
不管正确或错误的数据都是默认输出到屏幕上,所以屏幕是混乱的。所以就需要用数据流重定向将这两条数据分开。数据流重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备去,而分别传送所用的特殊字符如下所示:
- 标准输入(stdin):代码为0
- 标准输出(stdout):代码为1
- 标注错误输出(stderr):代码为2
(2)重定向操作符
重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号。
- 输出重定向操作符:>、>>
- 输入重定向操作符:<、<<
注:结束标识字符串可以是任何字符串,只要它在输入的开始和结束时保持一致即可。
(3)输出重定向案例
- 案例1:输出重定向(覆盖)
[root@server xixi]# date > date.txt
- 案例2:输出重定向(追加)
[root@server xixi]# date >> date.txt
- 案例3:错误输出重定向
[root@server xixi]# ls /home /aa 2>error.txt
- 案例4:正确和错误都输入到相同文件
[root@server xixi]# ls /home /aa &>list.txt
[root@server xixi]# ls /home /aa >list.txt 2>&1
- 案例5:重定向到空设备/dev/null
[root@server xixi]# ls /home/ /aa >list.txt 2>/dev/null
[root@server xixi]# ls /home/ /aa &>/dev/null
(4)输入重定向案例
- 案例1:从文件读取数据作为cat命令的输入
[root@server xixi]# echo test > file
[root@server xixi]# cat < file
test
- 案例2:标准输入重定向<<并不表示追加,而是表示输入结束的意思,即作为一个结束符
[root@server xixi]# cat > file3 << end
> hello
> end
[root@server xixi]# cat file3
hello
4.6 tee命令读取数据输出到文件
管道符 | :用于两个命令或者多个命令相连接,将管道符左边命令的输出作为管道符右边命令的输入。
tee:读取标准输入的数据,并将其内容输出到文件的同时输出到屏幕(即想把输出保存到文件中,又想在屏幕上看到内容)
命令格式:tee [-ai] [文件]
-a :即--append,附加到现有文件后面,而非覆盖
-i :即--ignore-interrupts,忽略中断信号
示例:
[root@server xixi]# date | tee time.txt
2024年 11月 05日 星期二 19:34:23 CST
[root@server xixi]# cat time.txt
2024年 11月 05日 星期二 19:34:23 CST
4.7 vim编辑器
在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数。Vim编辑器中设置了三种模式:命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键。
进入vim编辑器:vim 文件
注:存在该文件则直接进行编辑,若不存在该文件则创建该文件后进行编辑。每次运行vim编辑器时,默认处于命令模式。
4.7.1 命令模式下的常用按键
(1)光标跳转按键
(2)复制、粘贴、删除(剪切)
4.7.2 编辑模式
可通过如下任意一种功能键从命令模式切换到编辑模式。按esc键可从编辑模式切换到命令模式。
4.7.3 末行模式
按:或 / 可从命令模式切换到末行模式。按esc键可从编辑模式切换到命令模式。
(1)查找关键字并替换
(2)保存退出
(3)其他操作
4.7.4 vim的拓展用法
(1)可视化模式
在命令模式下按Ctrl+v进入可视化模式。该模式下通过光标移动选择文本,选取后按 y 可以把文本提取到缓冲区(即复制),c 可以剪切。之后可以使用p在光标后粘贴,P粘贴在光标前。
(2)替换模式
在命令模式下按r,再输入要替换的新字符,只替换光标所在位置的字符。
在命令模式下按R,将从光标所在位置连续替换后续字符,按ESC退出。
第五章:文件内容显示
5.1 浏览普通文件内容
5.2 过滤文件内容显示:grep
(1)基础使用
在指定的普通文件中查找并显示含有指定字符串的行,也可与管道符一起使用,语法为:grep [选项] 关键字符串 文件名
(2)使用特殊符号进行字符串的匹配
5.3 切割显示:cut
cut命令用于按列提取文本内容,语法为: cut [选项] 文件名称
-c:仅显示行中指定范围的字符。
-d:指定字段的分隔符,默认的字段分隔符为“TAB”。
-f:显示指定字段的内容。
示例:
# 查看用户信息配置文件前五行
[root@server xixi]# head -n 5 /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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# 以 : 为分割,提取每行第一段 | 输出前五行
[root@server xixi]# cut -d: -f1 /etc/passwd | head -n 5
root
bin
daemon
adm
lp
# 提取每行第二个字符 | 输出前五行
[root@server xixi]# cut -c2 /etc/passwd | head -n 5
o
i
a
d
p
5.4 排序显示sort
sort命令用于对文本内容进行排序显示,语法为: sort [选项] 文件名称
示例:
# 现有一个用户文件
[root@server xixi]# cat user.txt
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
polkitd:x:998:996:User for polkitd
geoclue:x:997:995:User for geoclue
rtkit:x:172:172:RealtimeKit
pulse:x:171:171:PulseAudio System Daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
unbound:x:996:991:Unbound DNS resolver
rpc:x:32:32:Rpcbind Daemon
gluster:x:995:990:GlusterFS daemons
# 以 : 为分割,以第三个字段作为排序依据,进行数字排序
[root@server xixi]# sort -n -t: -k3 user.txt
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
pulse:x:171:171:PulseAudio System Daemon
rtkit:x:172:172:RealtimeKit
gluster:x:995:990:GlusterFS daemons
unbound:x:996:991:Unbound DNS resolver
geoclue:x:997:995:User for geoclue
polkitd:x:998:996:User for polkitd
5.5 去重显示uniq
uniq命令用于去除文本中连续的重复行,语法为: uniq [选项] 文件名称
-c :在每列旁边显示该行重复出现的次数。
示例:
[root@server xixi]# cat uniq.txt
Welcome to kongd.com
Welcome to kongd.com
Welcome to kongd.com
Welcome to kongd.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
# 去重
[root@server xixi]# uniq uniq.txt
Welcome to kongd.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
# 去重,显示重复行次数
[root@server xixi]# uniq -c uniq.txt
4 Welcome to kongd.com
1 Red Hat certified
1 Free Linux Lessons
1 Professional guidance
1 Linux Course
5.6 替换文件中的字符显示:tr
tr 指令从标准输入读取数据,经过替换或者删除后,将结果输出到标准输出。语法为:tr [选项] SET1 SET2
-c :代所有不属于第一字符集的字符
-d :删除所有属于第一字符集的字符
-s :把连续重复的字符以单独一个字符表示
示例:
# 将文件中的小写字母全部转换为大写字母输出
[root@server xixi]# cat fruit.txt | tr a-z A-Z
ABANDON
CAT
DATE
BANANA
第六章:文件的其他操作命令
6.1 文本内容统计:wc
wc命令用于统计指定文本文件的行数、字数或字节数,语法为: wc [选项] 文件名称
示例:/etc/passwd是用于保存系统账户信息的文件,统计当前系统中有多少个用户
[root@localhost ~]# wc -l /etc/passwd
45 /etc/passwd
6.2 复制、移动文件
(1)cp:复制文件或目录
语法:cp [选项] 源文件 目标文件
(2)mv:移动文件或目录
语法: mv [选项] 源文件名 目标文件名
剪切操作不同于复制操作,因为它会把源文件删除掉,只保留剪切后的文件。如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实本质就是对文件进行了重命名操作。
示例:
[root@localhost xixi]# ls
haha.log
[root@localhost xixi]# mv haha.log xixi.log
[root@localhost xixi]# ls
xixi.log
6.3 查找文件路径
(1)find详解
其中 find 命令:find命令默认接的命令是 -print ,它默认以\n将找到的文件分隔。可以使用-print0来使用\0分隔,这样就不会分行了。但是一定要注意,-print0针对的是\n转\0,如果查找的文件名本身就含有空格,则find后-print0仍然会显示空格。
(2)find示例
1.按照文件名搜索
# 语法:
[root@localhost ~]# find 路径 [选项] 搜索内容
选项:
-name: 按照文件名搜索
-iname: 按照文件名搜索,不区分文件名大小写
-inum: 按照 inode 号搜索
# 示例1:查询/etc目录下,以host开头的文件
[root@localhost xixi]# find /etc/ -name "host*"
/etc/hosts
/etc/avahi/hosts
/etc/nvme/hostnqn
/etc/nvme/hostid
/etc/hostname
# 示例2:查找/etc目录下,父目录名以ssh结尾,且自身为ssh开头的文件
[root@localhost xixi]# find /etc/ -path "*ssh/ssh*"
/etc/ssh/ssh_config
/etc/ssh/ssh_config.d
/etc/ssh/ssh_config.d/50-redhat.conf
/etc/ssh/sshd_config.d
/etc/ssh/sshd_config.d/50-redhat.conf
/etc/ssh/sshd_config.d/01-permitrootlogin.conf
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub
/etc/ssh/sshd_config
2.按照文件大小搜索
# 语法:
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-size [+|-]大小: 按照指定大小搜索文件,这里的“+”的意思是搜索比指定大小还要大的文件, “-”的意思是搜索比指定大小还要小的文件
注意:-size 0可以查找大小为0的普通文件。如果要查找没有任何文件的目录或者空的普通文件可以使用-empty
# 示例3:查询当前目录下,大于5M的文件
[root@localhost ~]# find . -size +5M
./.cache/mozilla/firefox/cv7bcl6l.default-default/startupCache/scriptCache.bin
./.cache/mozilla/firefox/cv7bcl6l.default-default/startupCache/startupCache.8.little
3.按照修改时间搜索 Linux 中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个时间,我们可以按照时间来搜索文件。
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-atime [+|-]时间: 按照文件访问时间搜索
-mtime [+|-]时间: 按照文件数据修改时间搜索
-ctime [+|-]时间: 按照文件状态修改时间搜索
-newer file: 把比file修改时间更新的文件列出来
-newerXY:如果所考虑的文件的时间戳X比文件引用的时间戳Y新,则成功。字母X和Y可以是以下任意字母。
a文件引用的访问时间
B文件引用的出生时间
c索引节点状态更改参考时间
m文件引用的修改时间
t将所指定的参数理解为一个具体的时间值
示例:搜索/test下2021-06-03到2021-06-06之间修改过的文件
[root@localhost ~]# find /test -type f -newermt 2021-06-03 -a ! -newermt 2021-06-06
- -5:代表 5 天内修改的文件。
- 5:代表前 5~6 天那一天修改的文件。
- +5:代表 6 天前修改的文件。
4.按照权限搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-perm 权限模式: 查找文件权限刚好等于“权限模式”的文件
-perm -权限模式: 查找文件权限全部包含“权限模式”的文件
-perm +权限模式: 查找文件权限包含“权限模式”的任意一个权限的文件
如果要在整个系统中搜索权限中包括SUID权限的所有文件,只需使用-4000即可:
[root@kongd ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/chage
………………省略部分输出信息………………
5.按照所有者和所属组搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-uid 用户 ID: 按照用户 ID 查找所有者是指定 ID 的文件
-gid 组 ID: 按照用户组 ID 查找所属组是指定 ID 的文件
-user 用户名: 按照用户名查找所有者是指定用户的文件
-group 组名: 按照组名查找所属组是指定用户组的文件
-nouser: 查找没有所有者的文件
6.按照文件类型搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-type d: 查找目录
-type f: 查找普通文件
-type l: 查找软链接文件
7.逻辑运算符
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-a: and 逻辑与
-o: or 逻辑或
-not: not 逻辑非
优先级:与>或>非
6.4 压缩和解压缩
(1)zip 和 unzip 命令
# 素材准备:
[root@localhost ~]# mkdir /test
[root@localhost ~]# cd /test
[root@localhost test]# for i in {1..5};do echo "test$i" > test$i.txt;done
[root@localhost test]# ls
test1.txt test2.txt test3.txt test4.txt test5.txt
[root@localhost test]# mkdir dir1
[root@localhost test]# cp /etc/fstab dir1/
# 实例1: 使用zip压缩文件test1.txt
[root@localhost test]# zip test1.zip test1.txt
adding: test1.txt (stored 0%)
[root@localhost test]# ls test1*
test1.txt test1.zip
# 压缩率为最高压缩test2.txt
[root@localhost test]# zip -9 test2.zip test2.txt
adding: test2.txt (stored 0%)
[root@localhost test]# ls test2*
test2.txt test2.zip
# 实例2: 将当前目录dir1连同目录下文件一起压缩
[root@localhost test]# zip -r dir1.zip dir1/
adding: dir1/ (stored 0%)
adding: dir1/fstab (deflated 44%)
[root@localhost test]# ls dir1*
dir1.zip
dir1:
fstab
# 实例3: 向压缩文件中test1.zip中添加test2. txt文件
[root@localhost test]# zip -m test1.zip test2.txt
adding: test2.txt (stored 0%)
# 实例4: 删除压缩文件中的文件
[root@localhost test]# zip -d test1.zip test2.txt
# 实例5: 压缩文件时排除某个文件
[root@localhost test]# zip test.zip *.txt -x test1.txt
adding: test3.txt (stored 0%)
adding: test4.txt (stored 0%)
adding: test5.txt (stored 0%)
# 实例6: 解压文件test2.zip
[root@localhost test]# unzip test2.zip
Archive: test2.zip
extracting: test2.txt
# 实例7:将压缩文件text.zip在指定目录dir1下解压缩
[root@localhost test]# unzip test.zip -d dir1
Archive: test.zip
extracting: dir1/test3.txt
extracting: dir1/test4.txt
extracting: dir1/test5.txt
# 实例8: 查看压缩文件目录,但不解压
[root@localhost test]# unzip -v test.zip
(2)gzip和gunzip命令
# gzip(gunzip=gzip -d)命令
# 实例1: 使用gzip压缩文件
[root@localhost test]# gzip test1.txt
[root@localhost test]# ls test1*
test1.txt.gz test1.zip
# 实例2: 使用gzip压缩目录下文件
[root@localhost test]# gzip -r dir1/
[root@localhost test]# ls dir1
fstab.gz test3.txt.gz test4.txt.gz test5.txt.gz
# 注意: 以上压缩之后原始文件就没有了。
# 实例3: 压缩但保留原始文件
[root@localhost test]# gzip -c test2.txt > test2.txt.gz
[root@localhost test]# ls test2*
test2.txt test2.txt.gz test2.zip
注:查看压缩过的文本文件内容: zcat、zless。 zcat 文件名.gz
(3)bzip2、bunzip2命令
bzip2、bunzip2(=bzip2 -d)是更新的Linux压缩工具,比gzip有着更高的压缩率。
bzip2、bunzip2示例如下:
[root@localhost test]# bzip2 man.config //将man.config以bzip2压缩,此时man.config变成
man.config.bz2
[root@localhost test]# bzip2 -9 -c man.config > man.config.bz2 //将man.config用最佳的压缩比压缩,并保留原本的档案
[root@localhost test]# bzip2 -d man.config.bz2 //将man.config.bz2解压缩,可用bunzip2取代
bzip2 -d
[root@localhost test]#bunzip2 man.config.bz2 //将man.config.bz2解压缩
(4)xz、unxz命令
# 实例1:压缩文件
[root@localhost test]# xz test1.txt
[root@localhost test]# ls test1.txt.xz
test1.txt.xz
# 实例1:压缩文件
[root@localhost test]# xz test1.txt
[root@localhost test]# ls test1.txt.xz
test1.txt.xz
# 实例3:查看压缩文件内容
[root@localhost test]# xzcat test1.txt.xz
test1
# 实例4:解压缩(xz -d等价于unxz)
[root@localhost test]# unxz test1.txt.xz
# 实例5:解压缩目录dir1下文件
[root@localhost test]# xz -d dir1/*
[root@localhost test]# ls dir1
fstab test3.txt test4.txt test5.txt
注:查看压缩过的文件内容: xzcat、xzless 。 xzcat 文件名.xz
6.5 tar 归档命令
格式: tar [选项] [args]……
必选项:
辅助选项:
额外的选项:
#打包时排除某个文件
tar cf 文件名.tar --exclude=路径/文件 路径
注:此处的路径前后需要保持保持一致,统一使用绝对路径或者相对路径
1.创建(非压缩的)打包文件,将指定的一个或多个文件或目录备份生成为一个指定的包文件
tar cvf/cfv/-cvf 文件名.tar 要打包的目录或文件名列表……
2.列出包文件中的文件列表
tar t[v]f 包文件名
3.创建带压缩的包文件,为节省存储空间,通常需要生成压缩格式的tar包文件,tar命令支持三种不同的压缩方式
tar czf/-czf 文件名.tar.gz 要打包压缩的目录或文件名……
tar cjf/-cjf 文件名.tar.bz2 要打包压缩的目录或文件名……
tar cJf/-cJf 文件名.tar.xz 要打包压缩的目录或文件名……
4.提取包文件到指定目录
tar xf/-xf/-xzf 文件名.tar.gz [-C 目标路径]
tar xf/-xf/-xjf 文件名.tar.bz2 [-C 目标路径]
tar xf/-xf/-xJf 文件名.tar.xz [-C 目标路径]
第七章 命令解释器-shell
7.1 什么是shell
shell:壳,命令解释器,负责解析用户输入的命令。命令分两类:
- 内置命令 (shell内置),shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分都差不多
- 外置命令,在文件系统的某个目录下,有个与命令名称相同的文件
type 命令查看命令是file、alias 还是 builtin
- type -a 列出当前命令可以如何执行
- type -t 仅列出命令按照哪种方式执行
那shell如何知道命令的可执行文件在哪个路径下呢?系统为了让用户在命令行快速方便地执行命令,将可执行文件的路径存储在环境变量PATH中。
在众多环境变量里面有一个环境变量叫做PATH,当用户每次执行外部命令的时候都会去该变量所记录的路径下搜索和命令同名的二进制文件,如果有则执行该二进制文件,如果没有则提示命令找不到。
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
7.2 Linux 中的特殊符号
7.3 命令别名
别名是命令的快捷方式。对于需要经常执行,并需要很长时间输入的长命令创建快捷方式很有用。
语法:alias 别名=’原命令 [选项]…… [参数]……’
# 查看设置的别名
[root@node13 ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
……
# 删除别名:
[root@node13 ~]#unalias 别名
注意:在命令行中使用alias命令设置的别名仅在该次登入有效,如果重新开启一个 Shell,或者重新登录系统,则这些alias将无法使用。
在linux中提供alias永久化的方法: (1)若要让某个用户使用该别名,则把别名加在 ~/.bash_profile 或~/.bashrc 中。然后source ~/.bashrc或者 source ~/.bash_profile 。(2)若要让每一位用户都使用该别名,则把别名加在/etc/bashrc 或者 /etc/profile 中,然后 source /etc/bashrc 或者source /etc/profile。
7.4 命令历史
history 命令可以查阅命令历史记录 ,也可在命令行利用向上或向下光标键来进行查询。
语法: history [选项] [参数]
选项:
number:显示最近number条命令历史
-c:清空当前历史命令
-a [file]:后面没跟文件时,默认将缓冲区中历史命令写入~/.bash_history中
-r [file]:将历史命令文件中的命令读入当前历史命令缓冲区中
-w:将当前历史命令缓冲区命令写入历史命令文件中;
[root@node13 ~]# history 5
1871 ls -l
1872 ls -l /
1873 touch a
1874 touch b
1875 history 5
[root@node13 ~]# !1871 将1871条命令再执行一遍
ls -l
[root@node13 ~]# !!
执行上一条命令
命令行中的其它快捷键:
ctrl+d 输入已结束;也可当做exit
ctrl+c 键盘中断请求,终止当前的命令
Ctrl+a 移动到当前行的开头
Ctrl+e 移动到当前行的结尾
Ctrl+l 清屏==clear
Ctrl+u 剪切命令行中光标所在处之前的所有字符(不包括自身)
Ctrl+k 剪切命令行中光标所在处之后的所有字符(包括自身)
ctrl+←/→ 光标在命令行中按照单词跳转
引用上一条命令的最后一个参数
方法1:!$
方法2:先按Alt再输入.
方法3:先按Esc在输入.
示例:生产环境中,history命令记录操作时间、操作用户、操作IP
(1)/etc/profile文件中加入以下内容
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
export HISTTIMEFORMAT="[%F %T][`whoami`][${USER_IP}] "
(2)执行:source /etc/profile
[root@VM-8-15-centos ~]# history
1 [2020-12-25 18:10:27][root][111.18.44.17]
2 [2020-12-20 10:35:16][root][111.18.44.17] cat /etc/redhat-release
3 [2020-12-20 14:02:20][root][111.18.44.17] exit
4 [2020-12-24 09:39:17][root][111.18.44.17] cat /etc/redhat-release
5 [2020-12-24 10:06:17][root][111.18.44.17] awk 'NR==5' /etc/passwd
6 [2020-12-24 10:08:31][root][111.18.44.17] whereis ifconfig
第八章:用户和组管理
8.1 Linux 中的用户和组的分类
1.Linux下的用户可以分为三类:
- 超级用户——用户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。
- 系统用户(伪用户)——是Linux系统正常工作所必需的用户。主要是为了满足相应的系统进程对文件属主的要求而建立的,例如:bin、daemon、adm、lp等用户。系统用户不能用来登录。
- 普通用户——是为了让使用者能够使用Linux系统资源而建立的,我们的大多数用户属于此类。
2.Linux中的组有以下两类:
- 基本组(私有组):建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组。
- 附加组(公有组):可以容纳多个用户,组中的用户都具有组所拥有的权利。
3.Linux中用户和用户组的配置文件
在Linux中,用户账号、密码、用户组信息和用户组密码均是存放在不同的配置文件中的。
(1))用户账号文件——/etc/passwd passwd 是一个文本文件,用于定义系统的用户账号,由于所有用户都对passwd有读权限,所以该文件中只定义用户账号,而不保存口令。
[root@node13 ~]# ll /etc/passwd
-rw-r--r-- 1 root root 2917 May 6 17:44 /etc/passwd
[root@node13 ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
# 每行定义一个用户账号信息,每行由7个字段组成,字段之间用“:”分隔,其格式如下:
账号名称:密码:UID:GID:个人资料:主目录:Shell
/etc/passwd文件中字段说明:
账号名称:用户登录Linux系统时使用的名称。
密码:以前是以加密格式保存密码的位置,现在密码保存在/etc/shadow文件中,此处只是密码占符“x”或“*”。若为“x”,说明密码经过了shadow的保护。
UID:用户的标识,是一个数值,用它来区分不同的用户,每个用户都有一个UID数值:
超级用户的UID——0
系统用户的UID——1~999
普通用户的UID——≥1000
GID:用户所在基本组的标识,是一个数值,用它来区分不同的组,相同的组具有相同的GID。
个人资料:可以记录用户的完整姓名、地址、办公室电话、家庭电话等个人信息。
主目录:类似Windows 的个人目录,通常是/home/username,这里username是用户名,用户执行“cd~”命令时当前目录会切换到个人主目录。
Shell:定义用户登录后激活的Shell,默认是Bash Shell
(2)用户密码文件——/etc/shadow
[root@node13 ~]# ll /etc/shadow ---------- 1 root root 3872 May 6 17:44 /etc/shadow
[root@node13 ~]# head -1 /etc/shadow
root:$6$3EZ8vA1hgB3VTWb0$IlamoUyDh1RS.wftgz4qj0kmVrka7Yi6SgIo1aM6eu8nbFM9haOVRTtNDDfkix8MCugx8p8lufmItgsOsu1rl1:19083:0:99999:7:::
# 每行定义了一个用户信息,行中各字段用“:”隔开,其格式如下:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/shadow文件中的每行9个字段的含义分别为:
(3)用户组账号文件——/etc/group 系统中的每个组,在/etc/group文件中有一行记录,任何用户均可以读取用户组账户信息配置文件。
[root@node13 ~]# ll /etc/group
-rw-r--r-- 1 root root 1150 May 6 17:44 /etc/group
[root@node13 ~]# head -1 /etc/group
root:x:0:
/etc/group文件字段说明:
第一字段:用户组
第二字段:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;
第三字段:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;
第四字段:组成员,如果有多个成员,用,号分割;
8.2 用户管理
8.2.1添加新用户
命令格式: useradd [选项] <username>
常用选项:
-c 注释信息——设定与用户相关的说明信息(如,真实姓名、邮箱地址等)。
-d 目录——设定用户的家目录(默认为/home/用户名)。
-e YYYY-MM-DD——设置用户的失效日期,此日期后将不能使用该账号。
-f 天数——指定密码到期后多少天账号被禁用,若指定为0,则表示账号到期后被立即禁用;若指定为-1,则表示
账号过期后不被禁用(即密码永不过期)。
-g 组名或GID号——为用户指定所属的基本组,该组在指定时必须已存在。
-G 组名或GID号列表——为用户指定所属的附加组,各组在指定时已存在,附加组可以有多个,组 之间用“,”分
隔。
-M——不创建用户家目录。
-N——不创建与用户名同名的基本组。
-p 密码——指定用户的登录密码。
-s shell名——指定用户登录后使用的Shell,默认是bash。
-u 用户号——设置账号的UID,默认是已有用户的最大UID加1。如果同时有-o选项,则可以重复使用其他用户的标识号。
示例:
# 示例1:新建一个用户zhang3,查看passwd、shadow文件中的变化,并确认该用户的家目录中的初始配置文件。
[root@localhost ~]# useradd zhang3
[root@localhost ~]# tail -1 /etc/passwd
zhang3:x:1001:1001::/home/zhang3:/bin/bash
[root@localhost ~]# tail -1 /etc/shadow
zhang3:!!:16925:0:99999:7::: //注意密码字段的内容为“!!”,表示密码尚未设置
[root@localhost ~]# ls -ld /home/zhang3
drwx------. 3 zhang3 zhang3 74 11月 4 15:58 /home/zhang3
[root@localhost ~]# ls -A /home/zhang3
.bash_logout .bash_profile .bashrc .mozilla
# 示例2:新建一个用户wang5,指定其UID为1005、登录Shell为/bin/bash,账号永不过期
[root@localhost ~]# useradd -u 1005 -s /bin/bash -e -1 wang5
# 示例3:新建一个辅助管理员用户admin,将其用户家目录指定为/admin,基本组指定为wheel,附加组同时属于adm组和root组
[root@localhost ~]# useradd -d /admin -g wheel -G adm,root admin st3
# 示例4:新建一个用于访问FTP的zhao6用户,禁止其登录且不创建家目录。
[root@localhost ~]# useradd -M -s /sbin/nologin zhao6
8.2.2修改用户信息——usermod命令
命令格式:usermod [选项] username
常用的选项包括-c,-d,-m,-g,-G,-s,-u等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
另外,还可以使用如下选项: -l 新用户名——更改账户的名称,必须在该用户未登录的情况下才能使用。 -L——锁定(暂停)用户账户,使其不能登录使用。 -U——解锁用户账户。
示例:
# 示例1:将用户admin的家目录移至/home目录下。
[root@localhost ~]# usermod -d /home/admin -m admin
# 示例2:将用户wang5的名称修改为wangwu,并暂停使用该账号。
[root@localhost ~]# usermod wang5 -l wangwu -L
8.2.3 为用户账号设置密码——passwd命令
Linux的账户必须设置密码后,才能登录系统
命令格式: passwd [账户名]
常用选项:
-d——清空指定用户的口令。这与未设置口令的账户不同,未设置口令的账户无法登录系统,而口令为空的账户可以。
-e——使用户的账号密码立即过期,强迫用户下次登录时必须修改口令。
-i——口令过期后多少天停用账户。
-l——锁定(停用)用户账户。
-n——指定口令的最短存活期。
-x——指定密码的最长使用期限。
-u——解锁用户账户。
# 使用该方式也可修改用户密码
[root@localhost ~]#echo 密码 | passwd --stdin 用户名
8.2.4 删除用户账号——userdel命令
命令格式: userdel [-r] 账户名
注: -r——在删除该账户的同时,一并删除该账户对应的家目录。
8.2.5 用户间切换——su(substitute user)命令
命令格式: su [用户名]
注:从root用户切换到任何用户不需要密码验证,而从普通用户到root或其他普通用户均需要输入目标用户的密码且验证成功后才可切换。
su 和 su -命令区别就是加载的配置文件不一样:
- su 切换方式加载的文件: ~/.bashrc,/etc/bashrc
- su -切换方式加载的文件: /etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile
8.2.6 控制用户对系统命令的使用权限
使用sudo命令可以提高普通用户的操作权限,不过这个权限需要root用户进行配置/etc/sudoers文件才可使用。
sudo的执行流程如下(默认只有root用户能使用):
- 当用户执行sudo时,便会让用户输入自己的密码来确认(root执行sudo时不需要输入密码);
- 若欲切换的身份与执行者身份相同,那也不需要输入密码。
- 若密码输入成功,系统会去/etc/sudoers文件中查找该用户是否有执行sudo的权限;
- 若用户具有执行sudo的权限,便开始sudo后续接的命令;
sudo -l:列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
sudo -u 用户名 命令:以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是 UID。
sudo -k:清除存活期时间,下次再使用sudo时要再输入密码。
sudo -b 命令:在后台执行指定的命令。
sudo -p 提示语 :可以更改询问密码的提示语,其中%u会代换为使用者账号名称,%h会显示主机 名称。
配置/etc/sudoers文件的2种方式:
[root@localhost ~]# vim /etc/sudoers
或者
[root@localhost ~]# visudo
root ALL=(ALL)
ALL
参数代表含义:
1、用户账号:系统哪个账号可以使用sudo这个命令。
2、登录者的来源主机名
3、可切换的身份:这个账号可以切换成什么身份来执行后续的命令。默认root可以切换成任何人。
4、可执行的命令:这个命令最好使用绝对路径编写。默认root可以切换任何身份且进行任何命令。
说明:ALL是关键字,代表任何身份、主机或命令。
8.3 用户组管理
(1)创建用户组
命令格式: groupadd [-r] 用户组名称
选项:
-g GID——指定新用户组的组标识号(GID),默认值是已有的最大的GID加1。
-r——建立一个系统组账号,与-g 不同时使用时,则分配一个1~999的GID。
(2)修改用户组属性
命令格式: groupmod 选项 用户组
选项:
-g GID——为用户组指定新的组标识号。
-n 新用户组——将用户组的名字改为新名字修改用户组的 名称和用户组的GID值。
(3)添加/删除组成员
命令格式: gpasswd [选项] [用户] [组]
注:只有root用户和组管理员才能够使用该命令。
选项:
-r 删除组密码
-a——把用户加入组
-d——把用户从组中删除。
-M——可同时添加多个用户
-A——给组指派管理员。
(4)删除组账户
命令格式: groupdel 用户组名
8.4 查询用户和组信息
[root@node13 ~]# id centos 显示出某个用户的详细信息
uid=1042(centos) gid=1042(centos) groups=1042(centos)
[root@node13 ~]# useradd -g centos -G root admin
[root@node13 ~]# groups admin 显示出用户的所属组信息
admin : centos root
8.5 查看用户登录系统的情况
(1)users:查看当前登录系统的用户
[root@node12 ~]# users
root
(2)last:列出目前与过去登入系统的用户相关信息,该命令默认会去读取/var/log/wtmp文件,并把该文件记录的登入系统的用户名单全部显示出来。
# 显示最近的两条登录信息
[root@node13 ~]# last -2
...
# 显示最近的两条登录信息
[root@node13 ~]# last -f /var/log/wtmp -n 3
...
(3)如果想要知道每个账号的最近登录时间,则可使用lastlog查看,该命令会读取/var/log/lastlog文件。
[root@node13 ~]# lastlog
...
(4)w:显示登录到系统的用户信息。
(5)who:显示目前登录到系统的用户,who通常通过/var/run/utmp文件来获取信息 。
第九章:Linux文件系统权限
9.1 文件的一般权限
文件的权限针对三类对象进行定义:
- owner 属主,缩写u
- group 属组,缩写g
- other 其他,缩写o
每个文件针对每类访问者定义了三种主要权限:
- r:Read 读
- w:Write 写
- x:eXecute 执行
注意:root账户不受文件权限的读写限制,执行权限受限制
1.修改文件或目录的权限—chmod(change mode)命令
命令格式 1: chmod [选项] [ugoa][+-=][rwx] 文件或目录...
命令格式2: chmod [选项] nnn 文件或目录...
常用的选项:-R,递归修改指定目录下所有文件、子目录的权限。
- ugoa :表示权限设置所针对的用户类别,可以是其中字母中的一个或组合,u(user)表示文件或目录的属主(所有者);g(group)表示属组内的用户;o(others)表示其他用户;a(all)表示所有用户(即u+g+o)。
- +或-或=:表示设置权限的操作动作,+代表添加某个权限;-代表取消某个权限;=表示只赋予给定的权限,并取消原有的权限。
- rwx :用字符形式表示的所设置的权限,可以是其中一个字母或组合。
- nnn :用三位八进制数字表示的权限。
2.对于文件和目录来说,r,w,x有着不同的作用和含义:
对于文件和目录可能出现的权限:
3.修改文件或目录的属主和属组
(1)修改文件或目录的所属者
命令格式 : chown [选项] 新属主[:[新属组]] 文件或目录……
选项:-R可递归设置指定目录下的全部文件(包括子目录和子目录中的文件)的所属关系。
(2)修改文件或目录的属组
命令1: chown [选项] :新属组 文件或目录……
命令2: chgrp [选项] 新属组 文件或目录……
9.2 文件和目录的特殊权限
在Linux系统中,用户对文件或目录的访问权限除了r、w、x三种一般权限外,还有SET UID(SUID)、SET GID(SGID)、Sticky Bit(粘滞位)三种特殊权限,用于对文件或目录进行更加灵活方便的访问控制。
9.2.1 SUID权限
SUID 权限的含义:是为了让一般用户在执行某些程序的时候, 在程序的运行期间, 暂时获得该程序文件所属者的权限。
分析:student用户要更改自己的密码,student 在执行 passwd 修改自己的密码时, 其修改的密码, 最终是需要保存到 /etc/shadow 这个文件中, 而这个文件的权限是 --------- ,它的拥有者是 root ,也只有 root 可以“ 强制” 存储,其他用户连看都不行。可偏偏 student 去执行 passwd (/usr/bin/passwd) ,却可以更新自己的密码。这就是因为有 s 权限的存在,当 s权限在拥有者的权限位上时, 即如-rwsr-xr-x 这样时, 称为 SUID 。SUID 即 Set UID , UID 指的是拥有者的的 ID, 而这个程序 (/usr/bin/passwd) 的拥有者为(root) 。
[root@node13 ~]# which passwd
/usr/bin/passwd
[root@node13 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 33600 Apr 7 2020 /usr/bin/passwd
注意:
- suid仅对二进制文件有效。
- 在执行过程中,调用者会暂时获得该文件的所有者权限。
- 该权限只在程序执行的过程中有效。
# 查询整个系统中设置了 SUID 的文件
find / -perm /4000
9.2.2 SGID权限
SGID 可以用在两个方面:
- 文件: 如 果 SGID 设置在二进制文件上, 则不论用户是谁,在执行该程序的时候,程序的所属组将会变成该程序文件的所属组。
- 目录, 如 果 SGID 是设置在 A 目录上, 则在 A 目录内所建立的文件或目录的所属组, 将会是此 A 目录的所属组。 一 般来说, SGID 多用在特定的多人团队的项目开发上,在系统中用的很少。
# 查询整个系统中设置了 SGID 的文件
find / -perm /2000
9.2.3 Sticky Bit权限
Sticky Bit (SBit) 当前只针对目录有效, 对文件没有效果。其对目录的作用是:在具有 SBit 的目录下, 用户若在该目录下具有 w 及 x 权限 , 则当用户在该目录下建立文件或目录时, 只有文件拥有者与 root 才有权力删除。 例如:当 student 用户属于 A 目录的组成员或属于 other ,且拥有 wx 权限时, 可以对该目录内任何人建立的目录或文件进行“ 删除/重命名/移动” 等操作。 如果将 A 目录加上了 Sticky Bit 权限, 则 student用户只能针对自己建立的文件或目录进行“ 删除/重命名/移动” 等操作。
9.2.4 设置文件和目录的特殊权限
为文件或目录添加三种特殊权限同样可以通过chmod命令来实施,使用“u±s”、“g±s”、“o±t”的字符权限模式分别用于添加和移除SUID、GUID、sticky权限。 若使用数字形式的权限模式,可采用“nnnn”格式的四位八进制数字表示,其中:后面三位是一般权限的数字表示,前面第一位则是特殊权限的标志数字:
0——表示不设置特殊权限
1——表示只设置sticky
2——表示只设置GUID权限
3——表示只设置SGID和 sticky权限
4——表示只设置SUID权限
5——表示只设置SUID和sticky权限
6——表示只设置SUID和SGID
7 ——表示同时设置SUID、GUID、sticky3种权限
9.3 ACL权限
ACL 权限分配:给指定的用户指定目录分配指定的权限。
ACL权限管理命令:
(1)查看ACL权限
[root@localhost ~]# getfacle 文件名
(2)设定ACL权限
语法: setfacl 选项 文件名
选项:
-m:设定 ACL 权限。如果是给予用户 ACL 权限,则使用u:用户名:权限 格式赋予;如果是给予组 ACL 权限,则使用 g:组名:权限 格式赋予;
-x:删除指定的 ACL 权限;
-b:删除所有的 ACL 权限;
-d:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;
-k:删除默认 ACL 权限;
-R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效;
9.4 权限掩码umask
在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与 umask值有关。
其具体关系是:新建文件的默认权限=0666-umask值 新建目录的默认权限=0777-umask值
# 分别查看、修改用户当前默认的umask值
[root@localhost ~]# umask
0022
[root@localhost ~]# touch file800
[root@localhost ~]# mkdir dir800
[root@localhost ~]# ll -d dir800 file800
drwxr-xr-x. 2 root root 4096 3月 11 19:40 dir800
-rw-r--r--. 1 root root 0 3月 11 19:40 file800
#修改shell umask值(临时)
[root@localhost ~]# umask 000
[root@localhost ~]# mkdir dir900
[root@localhost ~]# touch file900
[root@localhost ~]# ll -d dir900 file900
drwxrwxrwx. 2 root root 4096 3月 11 19:44 dir900 -rw-rw-rw-. 1 root root
0 3月 11 19:44 file900
#修改shell umask值(永久)
[root@localhost ~]# vim /etc/profile
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
[root@localhost ~]# source /etc/profile //立即在当前shell中生效
#通过umask决定新建用户家目录的权限
[root@localhost ~]# vim /etc/login.defs
UMASK 077
[root@localhost ~]# useradd gougou
[root@localhost ~]# ll -d /home/gougou/
drwx------. 4 gougou gougou 4096 3月 11 19:50 /home/gougou/
[root@localhost ~]# vim /etc/login.defs
UMASK 000
[root@localhost ~]# useradd yangyang
[root@localhost ~]# ll -d /home/yangyang/
drwxrwxrwx. 4 yangyang yangyang 4096 3月 11 19:53 /home/yangyang/
第十章:管理Linux的联网
10.1 配置网络
网络接口是指网络中的计算机或网络设备与其他设备实现通讯的进出口。这里,主要是指计算机的网络接口即网卡设备。 从RHEL7开始引入了一种新的“一致网络设备命名”的方式为网络接口命名,该方式可以根据固件、设备拓扑、设备类型和位置信息分配固定的名字。网络接口的名称的前两个字符为网络类型符号。如: en——表示以太网(Ethernet)、wl表示无线局域网(wlan)、ww表示无线广域网(wwan);接下来的字符根据设备类型或位置选择,如: o——表示内置(onboard)于主板上的集成设备(即集成网卡)及索引号; s——表示是插在可以热拔插的插槽上的独立设备及索引号; x——表示基于MAC地址命名的设备; p——表示PCI插槽的物理位置及编号。
一个网络接口,可以有多个网络连接,但同一时间只能有一个网络连接处于活动状态。
(1)使用ip命令配置临时生效的网络连接
[root@master ~]# ip -4 addr add 192.168.168.16/24 dev ens160
(2)nmcli(命令行工具)
nmcli device:可以简写为nmcli d,查看网卡设备
[root@kongd ~]# nmcli device
DEVICE TYPE STATE CONNECTION
ens160 ethernet connected ens160
lo loopback unmanaged --
[root@kongd ~]# nmcli device show
connected:已被NM管理,并且当前有活跃的connection
disconnected:已被NM管理,但是当前没有活跃的connection
unmanaged:未被NM管理
unavailable:不可用,NM无法管理,通常出现于网卡为down的时候
# nmcli connection:可以简写为 nmcli c,查看相应的会话
[root@kongd ~]# nmcli connection
NAME UUID TYPE DEVICE
ens160 39c494c3-7621-43fb-9c42-15e330b3d4dc ethernet ens160
[root@kongd ~]# nmcli connection show
[root@kongd ~]# nmcli connection show 39c494c3-7621-43fb-9c42-15e330b3d4dc
[root@kongd ~]# nmcli connection show /etc/sysconfig/network-scripts/ifcfg-ens160
(3)配置已存在会话的网卡的ip地址(非交互式)
[root@kongd ~]# nmcli c mo ens160 ipv4.method manual ipv4.addresses 192.168.150.200/24
ipv4.gateway 192.168.150.2 ipv4.dns 223.5.5.5 autoconnect yes
[root@kongd ~]# nmcli c up ens160
10.2 网络测试命令
(1)使用ping命令测试网络的连通性 命令一般格式为: ping [选项] <目标主机名或IP地址>
(2)使用tracepath命令用来追踪并显示报文到达目的主机所经过的路由信息 命令一般格式为: tracepath [选项] <目标主机名或IP地址>
10.3 通过域名访问主机
(1)配置静态解析,通过/etc/hosts文件实现域名解析
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.168.11 master
[root@master ~]# ping master
PING master (192.168.168.11) 56(84) bytes of data.
64 bytes from master (192.168.168.11): icmp_seq=1 ttl=64 time=0.131 ms
(2)通过/etc/resolv.conf文件指派域名解析服务器的地址,由dns服务器做域名解析
10.4 从网站下载文件
(1)wget命令
用于在终端命令行里下载网络文件,英文全称为:“web get”,语法格式为:wget [选项] 网址
选项:
-P 下载到指定目录
-t 最大尝试次数
-b 后台下载模式
-c 断点续传
-p 下载页面内所有资源,包括图片、视频等
-r 递归下载
(2)curl命令
是一个网络工具,其主要作用是通过http、https、ftp等方式下载/上传文件