Linux基础知识汇总与实践
一、Linux系统基础指令与文本编辑器
1.Linux系统基础指令
1.1 关机和重启
(1)关机:
1.shutdown -h //立刻关机
2.shutdown -h 5 // 5分钟后关机
3.shutdow -h 20:25 //下午八点二十五分关机
4.poweroff // 立刻关机
重启:
1.shutdown -r now //立刻重启
2.shutdown -r 5 //5分钟后重启
3.shutdow -r 20:25 //下午八点二十五分重启
4.reboot //立刻重启
(2)logout:注销
sync:同步,将内存数据写入到磁盘 没保存的统一保存
halt:关机
1.2 帮助命令
帮助命令就是去查看其他命令的一些使用方法方式
Linux中命令主要分为两种:内部命令(Linux自带的一些shell脚本)和外部命令(通过环境变量寻找的一些shell脚本)
--help命令(主要针对内部命令):
1.help cd
2.help help
3.ls --help
4.rm --help
5.shutdown --help
6.ifconfig --help //查看网卡信息
man命令(命令说明书,基本都可以):
1.man cd
2.man ls
3.man shutdown
注意:man shutdown打开命令说明书之后,使用按键q退出
1.3 目录操作命令
(1)切换目录执行
1.cd / //切换到系统根目录
2.cd XXX //切换到XXX目录,前提是当前路径下有XXX目录
3.cd ~ //切换到当前用户的家目录 如果是root /root 如果是普通用户 /home/用户名
4.cd .. //切换到父目录
5.cd /AAA/BBB/CCC //切换到根目录下AAA中的BBB中的CCC
6.cd AAA/BBB/CCC //切换到当前目录下AAA中的BBB中的CCC
7.pwd //查看当前路径的位置
命令的组成:命令 [选项] {目标}
- 命令:指的是你要干什么事?
- 选项:关于这件事你想怎么干?
- 目标:这个事你对谁干?
实例:切换到当前目录下root中的study中的pic
查看当前路径的位置:
(2)查看目录指令
1.ls //查看当前路径下所有文件和目录的名称(.开头的文件 隐藏文件 ..父目录)
2.-l //以长列表的形式列出内容 等效于ll
3.-r //逆序列出
4.-d //查看当前目录
5.-a //列出所有文件包含隐藏和父目录..
6.-la //长列表显示-a
7.-A //同-a没父目录
8.-c //按文件的修改时间排序 谁最近修改谁最前
9.-lh //同-l 只不过将文件或目录大小以合适的单位显示kb mb b
10.-R //以递归的方式展出当前目录下所有的文件和目录
11.-i //显示文件或者目录的索引节点号(inode),一个节点表示的就是第一个文件,相当于就是文件在磁盘中的编号
实例:以长列表的形式列出内容 等效于ll:
逆序列出 查看当前目录:
列出所有文件包含隐藏和父目录…:
按文件的修改时间排序 单位显示kb mb b :
显示文件或者目录的索引节点号:
(3)mkdir创建目录
1.mkdir abc //创建单级目录
2.mkdir haha.java //目录名为haha.java
3.mkdir xixi/lala/heihei //报错
4.mkdir -p xixi/lala/heihei //创建多级目录
实例:创建目录:
(4)rmdir删除目录 真删除
1.rmdir abc //删除abc目录
2.rmdir haha.java //删除目录名为haha.java
3.rmdir //不能直接删除一个非空的目录
4.rmdir -p xixi/lala/heihei //递归删除
5.rmdir a/b/c a/b a //递归删除
6.rm -r aaa //和上述内容很像,都是递归删除
7.rm -rf aaa //-r 递归 -f强制无询问
实例:删除目录 真删除:
递归删除:
递归强制删除:
(5)cp复制文件/目录
1.cp [选项] 源 目
2.cp hehe.java haha.java //复制文件
3.cp -a aaa ppp //复制目录
(6)mv移动/剪切 文件/目录
1.mv haha.java kaka.java //如果是在当前目录下进行mv操作 相当于是给文件重命名
2.mv kaka.java /home/heng/kaka.java //真移动
3.mv aaa /home/heng/aaa
4.mv kkk uuu
1.4 文件的操作
(1)touch 创建文件
1.touch haha.txt //创建haha.txt文件
2.touch xixi.txtx gaga.txtx //创建两个文件
3.touch canlaoshi{1..5}.jpg //创建从1开始到5的文件
4.touch {1,2}{3,4}
5.rm //删除文件 -r -f
实例:创建文件:
1.5 如何给文件写入数据
(1)输出重定向
1.echo HelloWorld! > haha.txt
2.echo 你好世界 > haha.txt
> :重定向 将输入的内容覆盖到文件中
1.echo 我不好 >> haha.txt
2.echo 您好 >> haha.txt
>> :追加重定向 将输入的内容追加到文件末尾
实例:重定向 将输入的内容覆盖到文件中
追加重定向 将输入的内容追加到文件末尾:
(2)tee 命令将在控制台输入的内容先打印在控制台再写入到文件
[root@localhost ~]# tee haha.txt
Hello My Name is haha
Hello My Name is haha
[root@localhost ~]# cat ha
[root@localhost ~]# tee >> haha.txt
Hello
Nice
Pich
ls -i >> xixi.txt t
实例:tee 命令:
将在控制台输入的内容:
先打印在控制台 再写入到文件:
2.Linux系统文本编辑器
Linux系统下的文本编辑器为:VIM编辑器;它就相当于我们Windows系统下的office、WPS一样。它的基本操作如下:
VIM编辑器共有3种模式,分别为一般模式、编辑模式、命令模式。在不同的模式下我们对文件的操作权限不同。具体如下所示:
2.1 一般模式
1.dw //删除光标所在的单词
2.u //撤销
3.dd //删除当前光标所在的行
4.yy //复制光标坐在的行
5.p //粘贴到光标下一行
6.P //粘贴到光标上一行
7.cc //剪切光标所在行
8.$ //去光标所在行的行尾
9.^ //行首
输入i或a进入到编辑模式
2.2 编辑模式
按esc键进入到一般模式
2.3 命令模式
1.wq //保存退出
2.q //退出 未修改的时候可以退出 如果已经修改 则不能退出
3.wq! //强制保存退出
4.set nu //显示行号
5.set nonu //不显示行号
6.//行号 直接跳到第几行
7.3,5 d //删除3~5行
二、Linux文件系统操作
1. Linux目录结构
CentOS系统的目录:
目录树:
-
/bin (重点):binary的缩写,这个目录主要存放的是最经常使用的命令(普通),命令本身就是Linux下的可执行程序(C Python Shell)/usr/bin
-
/boot (重点):存放的是启动Linux的一些核心文件,包括一些连接文件和镜像文件
-
/dev:device 存放的是所有硬件的信息,每一个硬件都是以文件的形式存储在这个目录中的,类似Windows里面的 设备管理器
-
/etc (重点):下面存放的是系统相关的配置文件
-
/home:是所有普通用户家目录的存放地
-
/lib:library 系统开机所需要的最基本的动态链接共享库 /usr/lib
-
/media:U盘,光驱等外设存储硬件设备存放的地方,一般都会挂载在这个地方
-
/mnt (重点):mount 挂载 临时挂载别的文件系统,可以将外部的存储挂载在这个文件夹中
-
/opt:option选项 可选目录 存放的第三方软件包和数据文件 相当于Windows里的Download
-
/proc:虚拟目录 主要存的是系统在内存的映射,获取系统信息
-
/root (重点):超级管理员的家目录 普通用户进不来
-
/run:系统运行时所需要的文件
-
/sbin:s是SuperUser的意思 里面存放的是超级管理员能够使用的一些指令
-
/srv:service 存放的是一些服务启动后存取的数据
-
/sys:system 跟proc差不多,主要记录Linux内核信息
-
/tmp:temp 临时文件存放的地方
-
/usr (重点):类似Windows中的ProgramFiles 主要存放的应用程序和指令文件
-
/var (重点):存放不断扩充内容,最常见的日志
1.- //普通文件 类似于记事本文件txt 也包含其他的exe mp3 avi...
2.d //目录文件 director
3.c //字符设备文件 Character 串口端口设备读写,键盘
4.b //块设备 block 可供存储的接口设备 随机读写内存,持久化存储硬盘
5.p //管道文件 进程间通信使用的到文件
6.s //套接字文件 socket 通常用于网络通信
7.l //链接文件 link 类似于Windows中的快捷方式
2. Linux文件类型
(1)软链接(符号链接)
软链接的文件完全参照Windows中的快捷方式去理解,它只是存储源文件的路径而已,当我们打开软连接的话,读取路径,再打开该路径对应的文件
ln -s 源文件 链接文件
实例:
(2)硬链接
硬链接存储的是源文件的inode(物理内存地址),可以理解为C语言中的指针,实际上存的就是源文件的数据 (追随源文件修改的复制文件)
ln 源文件 链接文件
实例:
3. cat more less head tail文本查看
(1)cat 以只读的方式查看文本内容
-
-n 显示行号more是基于VIM编辑器文本查看器/编辑器,它主要是以全屏的方式按页显示文本信息;
-
回车 下一行;
-
空格 下一页;
-
Ctrl+f 向下滚动一页;
-
Ctrl+b 向上滚动一页;
-
q 结束文本显示 直接退出。
(2)less效果同more类似的,最大的区别在于,more直接将全部的文本信息加载进内存,看的话只能看一小部分;less是需要读取那里,则加载那里,省一些内存空间;
-
/ 字符串 从当页开始向下搜索字符串 n 向上 N 向下;
-
? 字符串 从当页开始向上搜索字符串 n 向上 N 向下。
(3)head 查看文本文件头部的部分内容;
head 文件名 //查看该文件前10行的内容
-n 数字 //查看该文件前n行的内容
(4)tail 查看文本文件尾部的部分内容。
1.tail 文件名 //查看该文件后10行的内容
2.-n 数字 //查看该文件前n行的内容
3.-f //实时追踪文件更新的内容(一般追加)适合用于日志
4. wc cut sort uniq grep文本统计排序筛选
(1)wc 文本统计;
1.-w //只显示单词数
2.-c //只显示字节数
3.-l //只显示行数
4.-m //只显示字符数
5.-L //只显示最长的一行的字符数
(2)cut 文本切割;
用于按列提取文本内容
1.-f //切割的列
2.-d //切割的分隔符
(3)uniq去除文本重复内容(行);
(4)sort对文本内容进行排序(按行);
1.-f //忽略大小写
2.-b //忽略缩进和空格
3.-n //以数字形式排序
4.-r //反向排序
5.-u //排序的同时去重复
6.-t //指定间隔符
7.-k //设置字段范围
(5)grep 可以根据特定的字符串,对指定文件中的每一行进行搜索,如果找到则直接输出该字符串所在行。
1.grep h //文件名 查找文件里含有字符串h的行并输出
2.grep -w //单词 文件名 查找文件里含有单词的行并输出
3.grep ^[q] //文件名 查找匹配以q开头的行
4.grep q$ //文件名 查找匹配以q结尾的行
5.grep ^[0-9] //数字开头
6.grep xx[q]oo //文件名 查找匹配xx开头oo结尾中间是q
实例:
实施监控实例:
查看文件里的内容:
查看文件里内容的单词数量:
将文件顺序排序(按首字母):
逆序排:
查fuck单词(没有):
检查是否加fuck单词:
再查fuck单词:
三、日期与时间命令、搜索命令、解压缩命令
1. 日期与时间命令
(1)date 显示当前系统的日期和时间(硬件时间 BIOS Basic Input Output System )
%S //秒
%M //分钟
%H //小时
%m //月份
%Y //年份
%d //当月中的第几天
%j //当年中的第几天
%p //显示AM还是PM
示例操作显示如下:
(2)基本操作
timedatectl 设置系统时间
status 显示时间状态信息
list-timezones 列出已知的时区
set-time 设置系统时间
set-timezone 设置系统时区
示例操作显示如下:
(3)clock 查看硬件时间
Linux clock命令用于调整 RTC 时间。RTC 是电脑内建的硬件时间,执行这项指令可以显示现在时刻,调整硬件时钟的时间,将系统时间设成与硬件时钟之时间一致,或是把系统时间回存到硬件时钟。
-w //系统时间给硬件
-s //硬件时间给系统
-utc //显示UTC时间
示例操作显示如下:
(4)cal 查看日历
-l, --one 只显示当前月份(默认)
-3, --three 显示上个月、当月和下个月
-s, --sunday 周日作为一周第一天
-m, --monday 周一用为一周第一天
-j, --julian 输出儒略日
-y, --year 输出整年
-V, --version 显示版本信息并退出
-h, --help 显示此帮助并退出
示例操作显示如下:
2. 搜索命令
(1)whereis
搜索系统命令的命令,这个命令不能搜索普通文件,而只能搜索命令。
[root@localhost ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
命令的所在路径 命令的帮助文档 命令的帮助文档。
(2)which
[root@localhost ~]# which ll
alias ll='ls -l --color=auto'
/usr/bin/ls
同whereis一样的,但是搜命令的所在地址,搜命令别名。
(3)locate
可以按照文件名搜索普通文件的命令
优点:按照Linux自带的内置数据库搜索,搜索速度较快,消耗资源也少,默认每天更新一下这个数据 库,也可以手动去更新/var/lib/mlocate/mlocate.db,手动更新数据库updatedb 。
缺点:只能通过文件名来搜索文件(权限、大小、修改时间)
[root@localhost ~]# updatedb //先手动更新数据库 再去寻找新建的文件
[root@localhost ~]# locate haha.java
[root@localhost ~]# locate python | more
[root@localhost ~]# locate *python
示例操作显示如下:
(4)find
用于按照指定条件来查找文件,文件名、大小、修改时间、访问时间、权限。
-
匹配文件名查找
[root@localhost ~]# find /root -name haha.java //-name文件名 /root/haha.java [root@localhost ~]# find / -name haha.java /root/haha.java [root@localhost /]# find / -iname abc //-iname 忽略大小写文件名 /root/abc /root/ABC /root/aBC /root/Abc /root/aBc [root@localhost ~]# find / -inum 53562145 //-inum 按照文件的inode找 /root/abc [root@localhost ~]# find / -name *python //以python结尾的文件
示例操作显示如下:
-
匹配文件大小
[root@localhost ~]# find /root -size +10000 //超过10000b文件 [root@localhost ~]# find /root -size -100 //小于100b文件
示例操作显示如下:
-
匹配修改时间
[root@localhost ~]# find /root -mtime -1 -mtime 修改时间 -atime 访问时间 -ctime 权限修改时间 +n n天以前 -n n天以内 n 表示n~n+1天
示例操作显示如下:
-
匹配所有者/组
[root@localhost ~]# find / -uid 1000 [root@localhost ~]# find /root -user root -uid 用户id -gid 组id -user 用户名 -group 组名 -nouser 无所有者 -nogroup 无所有组
示例操作显示如下:
-
匹配文件类型
b块设备 d目录 c字符设备 p管道设备 l链接文件 s套接字 f普通文本文件 [root@localhost ~]# find /dev -type l
示例操作显示如下:
-
逻辑运算
[root@localhost ~]# find /root -size +10000 -a -user root -a and -o or -not not
示例操作显示如下:
(5)输入输出相关
- 管道符 |
将前一个命令的输出 通过一个无形的管道作为下一个命令的输入,即就是实现将前一个命令的输出的数据作为后一条命令所需要的数据源参数。
主要使用的场合:如果一个命令的输出结果过多,可以通过管道让more或者less进行查看也可以grep按行查找文件内容。
管道符不去处理前一个命令的错误输出!
//查看所有安装的软件,并筛选出Python相关的包
[root@localhost ~]# rpm -qa | grep python
//将用户按照UID大小排序,并取前10个 后将数据写入到文件中
[root@localhost ~]# sort -t : -k 3 -n /etc/passwd | head > a.txt
示例操作显示如下:
-
重定向操作符
输出重定向: >覆盖 >>追加
输入重定向: <覆盖 <<追加
在Linux中 默认的输入设备是键盘 默认的输出设备是显示器(命令行),所谓的重定向就是将默认的输入或输出的位置进行更改。
command > file :将command的输出结果 覆盖到指定文件 如果文件不存在则创建;
command 1> file :将command的输出结果 覆盖到指定文件 如果文件不存在则创建;
command 2>file:将command的错误输出结果 覆盖到指定文件 如果文件不存在则创建;
command &> file:将command的正确的或错误的结果 覆盖到指定文件 如果文件不存在则创建;
command >> file:追加
command < file:使命令从指定的文件中读取数据
command < < 结束标识符:读取命令输入,直到遇到输入行为指定的结束标识符为止
示例操作显示如下:
3. 解压缩命令
3.1 zip和unzip
zip既是归档也是压缩命令,可以压缩目录。
(1)准备一些数据
[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]# mkdir dir1
[root@localhost test]# cp -r /etc/fstab dir1
示例操作显示如下:
(2)使用zip压缩test1.txt (保留)
[root@localhost test]# zip test1.txt.zip test1.txt
[root@localhost test]# ls test*
test1.txt test1.txt.zip test2.txt test3.txt test4.txt test5.txt
示例操作显示如下:
(3)使用压缩率最高情况压缩test2.txt (保留)
[root@localhost test]# zip -9 test2.txt.zip test2.txt
[root@localhost test]# ls test*
示例操作显示如下:
(4)将目录dir1连同其下所有的文件一起压缩
[root@localhost test]# zip -r dir1.zip dir1/
示例操作显示如下:
(5)将一个文件添加到压缩包里把text1.txt.zip中 添加test2.txt (文件直接进压缩包不保留)
[root@localhost test]# zip -m test1.txt.zip test2.txt
示例操作显示如下:
(6)在压缩包中删除一个文件
[root@localhost test]# zip -d test1.txt.zip test2.txt
deleting: test2.txt
示例操作显示如下:
(7)压缩文件时排除一些文件(保留源文件)
[root@localhost test]# zip test1.txt.zip *.txt -x test1.txt
示例操作显示如下:
//注释: zip xxy.zip /root/xxy_test/*.java -x xxy.java
压缩目录/root/xxy_test/下以.Java结尾的所有文件,同时排除xxy.java文件。
(8)解压test2.txt.zip 指定路径
[root@localhost test]# unzip test2.txt.zip -d dir1
Archive: test2.txt.zip
extracting: dir1/test2.txt
示例操作显示如下:
(9)直接当前解压
[root@localhost test]# unzip dir1.zip
Archive: dir1.zip
replace dir1/fstab? [y]es, [n]o, [A]ll, [N]one, [r]ename: r
new name: dir2
inflating: dir2
示例操作显示如下:
(10)查看某一个压缩包的内容
[root@localhost test]# unzip -v test1.txt.zip
Archive: test1.txt.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ---- - ----- -------- ----
6 Stored 6 0% 05-30-2021 15:21 7c59371b test1.txt
6 Stored 6 0% 05-30-2021 15:21 4e6f5599 test3.txt
6 Stored 6 0% 05-30-2021 15:21 012ec35e test4.txt
6 Stored 6 0% 05-30-2021 15:21 1835f21f test5.txt
-------- ------- --- ------- - ----- -------- ----- ----- -------- ----- -----
24 24 0% 4 files
3.2 gzip和gunzip
(1)直接压缩一个文件 压缩包的名字为 文件名.gz
[root@localhost test]# gzip test1.txt
示例操作显示如下:
(2)压缩一个目录,添加一个文件到压缩包
[root@localhost test]# gzip test3.txt > test1.txt.gz //不保留
[root@localhost test]# gzip -c test4.txt > test1.txt.gz //-c 保留源文件
示例操作显示如下:
3.3 bzip2和bunzip2
最新的Linux压缩工具,要比前两个的效率要高一些。
[root@localhost ~]# bzip2 -z 金庸-射雕英雄传txt精校版.txt //不保留源文件
[root@localhost ~]# bzip2 -9 -c pride-and-prejudice.txt > ppp.bz2
[root@localhost ~]# bunzip2 金庸-射雕英雄传txt精校版.txt.bz2
示例操作显示如下:
3.4 xz 和 unxz
[root@localhost ~]# xz pride-and-prejudice.txt //压一个文件
[root@localhost test]# xz dir1/* //压一个单级目录 没有-r
[root@localhost test]# unxz dir1.zip.xz //解压
示例操作显示如下:
3.5 tar 打包文件们并压缩
tar命令可以为Linux的文件和目录创建档案。利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢?这源于 Linux 中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
-A 或--catenate:新增文件到以存在的备份文件;
-B 设置区块大小;
-C < 目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项;
-d 记录文件的差别;
-c 创建.tar格式的包文件x 释放.tar格式的包文件;
-t 查看包中文件列表 ;
-v 显示详细信息 ;
-f 指定文件名 ;
-z 打包的同时用zip压缩;
-j 打包的同时用gzip压缩;
-J 打包的同时用xz压缩;
-l 文件系统边界设置;
-k 保留原有文件不覆盖;
-m 保留文件不被覆盖;
-w 确认压缩文件的正确性;
实例:
(1)创建非压缩的包文件
[root@localhost ~]# tar cvf test.tar test/
示例操作显示如下:
(2)创建带压缩的包文件 c[z|j|J|]vf
[root@localhost ~]# tar cJvf test2.tar test
示例操作显示如下:
(3)列出包中文件列表
[root@localhost ~]# tar tvf test.tar
示例操作显示如下:
(4)解包
示例操作显示如下:
四、用户和组管理与文件权限
1. 用户和组管理
1.1 用户和组管理的理解
用户:Linux系统最底层的安全设备,属于权限问题,系统要回收权力,系统用户即系统的使用者,对用户管理就是对文件的管理。
用户组:用户组是用户的延伸,组的存在是为了共享用户的权力,组和用户是两个不同的机制。组分为初始组和附加组。
Linux是多用户的操作系统,每个用户都至少有一个分组,每个用户都有自己的家目录。
1.2 Linux系统下,用户分为三个类型
(1)超级用户:用户名为root,有一切的权限,对系统进行一些维护的时候(建立新用户,删除一些文件);
(2)系统用户(伪用户):不能登录,存在的意义就是Linux在正常工作时所需要的內建的用户,主要是为了满足相应的系统进程对文件的操作;
(3)普通用户:用于管理Linux,常见用于一般的操作。
1.3 Linux系统下,组分为三类
(1)基本组(私有组):建立新的用户的时候,如果不去指定分组,系统就会自动创建一个和该用户名、相同的组,该组为该用户的基本组;
(2)附加组(公有组):可以容纳多个用户的分组,该组下所有的用户都具有该组对应的所有权限,当一个基本组加入别的用户时,该基本组就变为附加组;
(3)系统组:root组,存系统用户。
1.4 每一个用户都会分配一个标号 UID 唯一表示
超级用户:0
系统用户:1~999
普通用户:≥1000
新创建的普通用户如果不指定UID的,默认从1000开始,之后+1即可
1.5 用户和组一些管理文件
(1)/etc/passwd
一个文本文件,存储的是一些用户的定义信息,由于这个文件的权限是所有用户都可读,所以关于密码的内容是加密的,具体的密码在/etc/shadow中。
格式:用户名:登录口令不显示的:UID:GID:个人资料:家目录路径:Shell类型(用户类型)
(2)/etc/shadow
一个文本文件,存储的是用户的密码和时间管理。
格式:登录名:加密口令:最后一次修改的时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志(预留)
①加密口令:使用SHA-512/SHA-256/MD5算法加密后的密码,若为空表示该用户无密码登录,若为 * 表示该账号不能用户登录,若为"!"表示该用户口令已经被锁定
②最后一次修改的时间:最近一次更改密码的日期,以距离1970年1月1日的天数来表示的,数值越大越接近当前时间
③最小时间间隔:密码不能在多少天内被修改,默认值为0,不限制
④最大时间间隔:密码在多少天之后必须被修改,默认值为99999,不限制
⑤警告时间:提前多少天警告用户密码即将过期,默认值为7,0表示不提供警告
⑥不活动时间:密码过期多少天后禁用此用户
⑦失效时间:指定密码失效的时间,以距离1970年1月1日的天数表示,默认为空永久不失效
⑧标识:预留
(3)/etc/group
一个文本文件,存的是组的信息
组名:组加密口令:GID:组成员(如果是多个成员 成员之间用,分隔) /etc/gshadow 存的是组的密码信息
1.6 用户的相关操作
(1)查看用户信息
id [用户名] //查看用户 UID 和 GID 信息
who //查看当前所有登录的用户列表
whoami //查看当前登录用户的账户名
(2)useradd:添加用户 创建用户及其同名的用户组
-d //指定家目录
-e //指定失效日期 YYYY-MM-DD格式
-f //指定多少天后禁用,0过期即刻禁用,-1永不禁用
-g //指定分组 可以写组名 也可以写GID 前提该组必须存在
-G //指定附加组 多个组每个组用 , 分隔
-M //不创建家目录
-N //不创建于用户同名的基本组
-p //指定密码
-s //指定用户的Shell类型
-u //指定UID
(3)userdel:删除用户
userdel 用户名:删除用户但是不删除用户家目录
userdel -r 用户名:全删
(4)usermod:修改用户信息 除了具有useradd的参数外
usermod -l 新用户名 原用户名 //更改用户名称
usermod -u 6666 用户名 //更改用户uid
usermod -g 21 用户名 //更改用户初始组信息
usermod -G 21 用户名 //更改用户附加组信息
usermod -aG 72用户名 //添加用户的附加组
usermod -G “” 用户名 //删除所有附加组信息
usermod -c “hello” 用户名 //更改用户说明为“hello”
usermod -d /home/lee 用户名 //更改用户家目录的指向
usermod -md /home/lee 用户名 //更改用户家目录的指向和家目录的名字
usermod -s /bin/sh 用户名 //更改用户的默认shell
usermod -L 用户名 //冻结用户
usermod -U 用户名 //解锁用户
1.7 用户组相关操作
(1)groupadd:增加组
-g 指定GID
-r 建立一个系统组,与g不同时使用,并且分配一个1~999的GID
(2)groupdel:删除组
groupdel:不能移除用户“naruto”的主组 //基本组中有用户 不能直接删除组
(3)gpasswd:向组里面添加和删除成员
-a //把用户加入组,不改变原先用户所在的组
-d //把用户从组里面删除 组不能为空
-M //可以同时添加多个用户
-A //给组指派管理员
useradd -g //给用户改变分组
usermod -g //修改用户组
2.文件权限
2.1 权限种类
在Linux系统中权限主要分三种:r Read读 w Write写 x eXecute执行
(1)rwx作用到文件上
-
r 可以读取查看文件内容
-
w 可以修改文件内容,但是不代表可以删除文件,删除一个文件的前提条件是对该文件所在的目录具有写权限,才能删除文件
- x 改文件可以被执行
(2)rwx作用到目录上
-
r 可以查看目录内容
-
w 目录内容可以创建,删除,重命名
-
x 可以进入目录
(3)第1个字符一般用来区分文件和目录:
d:表示是一个目录,事实上在Ext2 FS中,目录是一个特殊的文件。
-:表示这是一个普通的文件。
l:表示这是一个符号链接文件,实际上它指向另一个文件。
b、c:分别表示区块设备和其他的外围设备,是特殊类型的文件。
s、p:这些文件关系到系统的数据结构和管道,通常很少见到。
(4)第2~10个字符当中的每3个为一组;如下图权限解释:
drwxr-xr-x. 2 root root 6 5月 22 13:31 公共
代表:属主 属组 大小 最后一次修改的日期 文件/目录名
-
第1个字符 d 表示文件类型;
-
第2~4个字符 rwx 表示的是文件属主的权限;
-
第5~7个字符 r-x 表示的是文件属组的权限;
-
第8~10个字符 r-x 表示其他所有用户对该文件的权限;
-
第11个字符“.”表示的是文件的访问控制ACL,“.”表示被SELinux安全上下文访问,空格表示没有访问;
-
数字:如果当前是文件 则表示该文件对应的硬链接数;如果目录的话,表示的是该目录下子目录的个数(“.”是当前目录“…”当前目录的父目录 );权限也可以用数字来表示。
2.2 修改权限
(1)第一种形式:+ - =变更权限
①chmod u=rwx,g=rw,o=x 文件/目录(u 属主 g 属组 o 其他所有用户 a所有人)
②chmod o+w 文件/目录
③chmod a-x 文件/目录
[heng@localhost ~]$ touch abc
-rw-rw-r--. 1 heng heng 0 6月 5 15:50 abc
//1.给abc属主给读写执行 属组读执行 其他读写
[heng@localhost ~]$ chmod u=rwx,g=rx,o=rw abc
-rwxr-xrw-. 1 heng heng 0 6月 5 15:50 abc
//2.给abc文件属主去除执行权限,属组增加写的权限
[heng@localhost ~]$ chmod u-x,g+w abc
-rw-rwxrw-. 1 heng heng 0 6月 5 15:50 abc
(2)第二种形式:通过数值变更,如下图数值变化:
//将abc文件权限修改为rwx r-x r-x
[heng@localhost ~]$ chmod 755 abc
-rwxr-xr-x. 1 heng heng 0 6月 5 15:50 abc
[heng@localhost ~]$ chmod 123 abc
---x-w--wx. 1 heng heng 0 6月 5 15:50 abc
[heng@localhost ~]$ chmod 000 abc
----------. 1 heng heng 0 6月 5 15:50 abc
(3)修改文件属主chown
[root@localhost heng]# chown root abc
----------. 1 root heng 0 6月 5 15:50 abc
[root@localhost ~]# chown -R heng test //将test目录下所有的文件和目录包括自己属主改为heng
(4)修改文件属组chgrp
[root@localhost ~]# chgrp -R heng test
实例练习:
①建立两个组 神仙、妖怪;
②建立四个用户唐僧、悟空、八戒、沙僧;把悟空、八戒、放入妖怪;把唐僧、沙僧、放入神仙;
③分别给四个用户设置密码;
④用悟空建立一个文件monkey.java 文件写一段话"I am monkey king!";
⑤给八戒一个可以rw的权限;
⑥八戒修改monkey.java,并加入一句话 “I am pig”;
⑦唐僧、沙僧对该文件没有权限;把沙僧放入妖怪组;
⑧让沙僧修改文件monkey.java 加入了一个冒泡排序“…”;
五、任务调度与磁盘管理
1. 任务调度
1.1 概述
在Linux里面,定时任务调用,是指系统在指定的时间去执行相关的命令或程序
任务调度分两种:
(1)系统工作:每天的日志处理,每天进行病毒扫描
(2)个别用户工作:和我们先关服务端软件有关联的一系列操作,每天2:00对数据库进行备份(自动化运维Shell Python)
1.2 基本使用
格式:crontab 任务调度指令
常用指令:
-e //编辑一个定时任务
-l //查询当前用户所有的定时任务
-r //删除当前用户所有的定时任务
1.3 参数细节说明
(1)占位符的含义
-
第1个 一小时当中的第几分钟 0~59;
-
第2个 一天当中的第几个小时 0~23;
- 第3个 一月当中的第几天 0~31;
-
第4个 一年当中的第几个月 1~12;
-
第5个 一周当中的星期几 0~7 (0 7都是周日)。
(2)特殊符号的说明
-
* 代表任何时间 第一个*就表示每分钟;
-
, 代表不连续的时间 0 8,12,16 * * * 表示每天在8:00 12:00 16:00做一些事情;
-
- 代表连续的时间 0 5 * * 1-6 表示每周周一到周六的5:00执行;
-
*/n 代表每隔多久执行一次,比如 /10 * * * * 表示每10分钟执行。
(3)特定时间的案例
-
45 22 * * * :每天22:45执行;
-
0 17 * * 1 :每周一17:00执行;
-
0 5 1,15 * * :每月1号和15号的5:00执行;
-
40 4 * * 1-5 :每周一到周五4:40执行;
-
/10 4 * * * :每天4:00 每隔10分钟执行一次;
-
0 0 1,15 * 1 :每月1号 15号 每周的周一 00:00执行时。
2. 磁盘管理与挂载
2.1 分区的基础知识
(1)mbr分区
最多支持四个主分区,系统只能安装在主分区,扩展分区要占一个主分区,mbr最大支持2TB,但有最好的兼容性的 。
(2)gtp分区
支持无限多个主分区(但是OS有限制,Windows最多支持128个),最大支持18EB的容量(1EB=1024PB 1PB=1024TB 1TB=1024GB),Windows7 x64以后都是支持gtp分区新的OEM。
2.2 Windows磁盘分区
(1)主分区:也叫引导分区,最多可能创建4个。当创建四个主分区时候,就无法再创建扩展分区了,当然也就没有逻辑分区了。主分区是独立的,对应磁盘上的第一个分区,“一般”就是C盘。Windows系统把所有的主分区和逻辑分区都叫做“盘”或者“驱动器”,并且把所有的可存储介质都显示为操作系统的“盘”。因此,从“盘”的概念上无法区分主分区和逻辑分区。并且盘符可以在操作系统中修改,这就是要加上“一般”二字的原因。
(2)扩展分区:除了主分区外,剩余的磁盘空间就是扩展分区了,扩展分区是一个概念,实际上是看不到的。当整个硬盘分为一个主分区的时候,就没有了扩展分区。
(3)逻辑分区:在扩展分区上面,可以创建多个逻辑分区。逻辑分区相当于一块存储截止,和操作系统还有别的逻辑分区、主分区没有什么关系,是“独立的”。
如下图Windows磁盘分区和电脑分区:
2.3 Linux磁盘分区
(1)对于Linux来说,无论有几个分区,分给哪一个目录使用,它们归根结底就只有一个根目录 / ,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分的。
(2)Linux采用了一种叫“载入”的处理方式,将目录和分区链接起来的。
如下图Linux磁盘分区:
2.4 Linux硬盘编号说明
(1)Linux硬盘分为IDE(并口)和SCSI(串口),目前基本上用的是串口
(2)对于IDE硬盘而言,驱动器的标识符为“hdx~”
-
hd:表明分区所在的设备类型 hd就是指IDE硬盘 sd指的是SCSI;
-
x:为盘号(a基本盘 b基本从属盘 c辅助主盘 d辅助从属盘… )相互独立的硬盘个体;
-
~:为某一个硬盘的分区 一般前四个分区1~4 表示的主分区或扩展分区 5以后 逻辑分区。
如下图Linux硬盘编号说明:
2.5 如何给Linux再去加上一块硬盘
(1)创建一个目录 用于挂载新的硬盘
[root@localhost ~]# mkdir newdisk
(2)在虚拟机设置中,添加一块1GB硬盘
在菜单栏 【虚拟机】—>【设置】,点击【添加】—>【硬盘】——>【下一步】
然后选择【SCSI(推荐)】—>【下一步】—>【创建新虚拟磁盘】—>【下一步】—> 磁盘大小改为 2 GB —>【下一步】——【磁盘文件默认】—>【完成】,在虚拟机硬件信息栏中看到“新硬盘”后,重启虚拟机,进行后续步骤。
(3)查看一下新的硬盘 重启一下
代码(新增之前的):
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─rhel-root 253:0 0 10G 0 lvm /
├─rhel-swap 253:1 0 4G 0 lvm [SWAP]
└─rhel-home 253:2 0 5G 0 lvm /home
sr0 11:0 1 3.8G 0 rom /run/media/root/RHEL-7.2 Server.x86_64
代码(新增之后的):
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─rhel-root 253:0 0 10G 0 lvm /
├─rhel-swap 253:1 0 4G 0 lvm [SWAP]
└─rhel-home 253:2 0 5G 0 lvm /home
sdb 8:16 0 2G 0 disk
sr0 11:0 1 3.8G 0 rom /run/media/root/RHEL-7.2 Server.x86_64
(4)给硬盘分区
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x030720f7 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-4194303,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-4194303,默认为 4194303):
将使用默认值 4194303
分区 1 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost dev]# mkfs -t xfs /dev/sdb1
[root@localhost dev]# lsblk -f
(5)格式化
(6)挂载 (临时挂载 重启之后就失效了)
[root@localhost /]# mkdir newdisk
[root@localhost /]# mount /dev/sdb1 /newdisk
(7)永久化挂载
[root@localhost /]# vim /etc/fstab
加入:/dev/sdb1 /newdisk xfs defaults 0 0
[root@localhost /]# mount -a //自动挂载
六、RPM与YUM软件包管理
1. RPM
RPM Redhat Package Manager 红帽的软件包管理工具 类似于Windows上setup.exe。
命令如下:rmp
-i //安装
-v //显示过程
-h //hash加密
-e //卸载
-q //查看
-a //所有
-p //软件包
-ql //查看软件在系统中的安装文件路径
-qlp //查看未安装的软件包在系统中如果安装后产生文件的路径
-qf //根据某个文件找出此文件属于哪个安装包
-qc //查看软件的配置文件名称
-qd //查看软件的帮助信息
--scripts //查看脚本
--nodeps //安装软件忽略软件依赖
--force //强行安装软件
-Kv //检测软件包是否被篡改
实例:
RPM:
[root@localhost ~]# rpm -qa //查找所有安装的应用程序
[root@localhost ~]# rpm -qa | grep firefox //查询指定名称的应用程序
firefox-38.3.0-2.el7_1.x86_64
[root@localhost ~]# rpm -qi firefox //查询安装程序的信息
Name : firefox
Version : 38.3.0
Release : 2.el7_1
Architecture: x86_64
Install Date: 2021年05月22日 星期六 19时31分24秒
..........
[root@localhost ~]# rpm -ql firefox //查询软件包中的文件
/usr/bin/firefox
/usr/lib64/firefox
/usr/lib64/firefox/LICENSE
/usr/lib64/firefox/application.ini
..........
卸载软件:
[root@localhost ~]# rpm -e firefox
安装软件:
[root@localhost /]# cd /run/media/root //前往系统镜像所在的路径
[root@localhost root]# cd RHEL-7.2\ Server.x86_64/ //进入到系统进行文件中
[root@localhost RHEL-7.2 Server.x86_64]# cd Packages/ //进入到系统镜像中 软件包这个文件夹
[root@localhost Packages]# ls -l firefox-38.3.0-2.el7_1.x86_64.rpm //查看火狐安装包
-r--r--r--. 150 root root 74994236 9月 21 2015 firefox-38.3.0-2.el7_1.x86_64.rpm
[root@localhost Packages]# cp firefox-38.3.0-2.el7_1.x86_64.rpm /opt //将火狐的安装包复制到/opt下
[root@localhost Packages]# cd /opt //进入到opt目录
[root@localhost opt]# rpm -ivh firefox-38.3.0-2.el7_1.x86_64.rpm //安装火狐
警告:firefox-38.3.0-2.el7_1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:firefox-38.3.0-2.el7_1 ########################## ( 13%)
2. YUM
YUM 基于RPM的一个包管理命令 能够从指定的服务器(指定本地)上去下载RPM包并执行,可以自动处理一些包之间的依赖关系,并依次安装。
命令如下:yum
yum: clean all //清除原有yum缓存
repolist //列出仓库信息
install software //安装软件
update //更新
list installed //列出已安装
list available //可安装软件
list all //列出所有软件
reinstall software //重新安装软件
remove software //卸载软件
info dhcp //查看dhcp信息
search dhcp //软件信息搜索,根据关键字搜索
whatprovides file //根据文件找出包含此文件的软件
安装软件组:
yum: groups list //列出软件组
groups info //查看软件组的信息
groups install sfgroup //安装软件组
groups remove sfgroup //卸载软件组
实例:
//查看当前YUM源上有哪些可以安装的程序包
[root@localhost opt]# yum list
[root@localhost opt]# yum list | grep firefox
firefox.x86_64 38.3.0-2.el7_1 @anaconda/7.2
[root@localhost opt]# rpm -e firefox //卸掉本地的火狐
[root@localhost opt]# yum install firefox-38.3.0-2.el7_1.x86_64.rpm //从YUM源上安装火狐浏览器
已加载插件:langpacks, product-id, search-disabled-repos, subscription-
: manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
正在检查 firefox-38.3.0-2.el7_1.x86_64.rpm: firefox-38.3.0-2.el7_1.x86_64
firefox-38.3.0-2.el7_1.x86_64.rpm 将被安装
3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
准备中… ################################# [100%]
正在升级/安装…
1:firefox-38.3.0-2.el7_1 ########################## ( 13%)
#### 2. YUM
YUM 基于RPM的一个包管理命令 能够从指定的服务器(指定本地)上去下载RPM包并执行,可以自动处理一些包之间的依赖关系,并依次安装。
命令如下:yum
```shell
yum: clean all //清除原有yum缓存
repolist //列出仓库信息
install software //安装软件
update //更新
list installed //列出已安装
list available //可安装软件
list all //列出所有软件
reinstall software //重新安装软件
remove software //卸载软件
info dhcp //查看dhcp信息
search dhcp //软件信息搜索,根据关键字搜索
whatprovides file //根据文件找出包含此文件的软件
安装软件组:
yum: groups list //列出软件组
groups info //查看软件组的信息
groups install sfgroup //安装软件组
groups remove sfgroup //卸载软件组
实例:
//查看当前YUM源上有哪些可以安装的程序包
[root@localhost opt]# yum list
[root@localhost opt]# yum list | grep firefox
firefox.x86_64 38.3.0-2.el7_1 @anaconda/7.2
[root@localhost opt]# rpm -e firefox //卸掉本地的火狐
[root@localhost opt]# yum install firefox-38.3.0-2.el7_1.x86_64.rpm //从YUM源上安装火狐浏览器
已加载插件:langpacks, product-id, search-disabled-repos, subscription-
: manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
正在检查 firefox-38.3.0-2.el7_1.x86_64.rpm: firefox-38.3.0-2.el7_1.x86_64
firefox-38.3.0-2.el7_1.x86_64.rpm 将被安装