Linux 终端命令 从入门到入土😀
操作系统使用的是centos 8 stream
目录
目录
基操
man
ls
工作目录
alias 别名 查看文本
目录操作
创建文件
复制
移动
删除
差异
两种链接
压缩
查找
文件时间
修改权限
vim编辑器
通配符
搜索文本
正则表达式^
输入输出重定向>
管道命令|
用户
用户组
用户账户的创建和管理
组群管理
特殊权限
sudo服务
物理设备
磁盘使用情况统计
查看分区或者目录所占用的磁盘空间大小
磁盘分区
格式化分区(建立文件系统)
挂载卸载分区
磁盘容量配额
Linux系统监视与进程管理
显示进程的状态
树状进程的父子关系
动态进程信息
kill进程
设置进程的优先级
软件包的安装与管理
DNS服务器
基础操作
清屏操作:clear
快捷键:Ctrl+L(清屏)
Home或Ctrl+a(移动至行首)
End或Ctrl+e(移动至行尾)
光标向上键:切换之前的命令
切换用户:su root
查看系统时间:date
查看今天是第几天:date +%j
查看今天是第几周:date +%w
查看日历:cal
查看某天的日历:cal 10 01 2022
查看主机名:hostname
快捷键:ctrl+w清除光标前一个单词word
ctrl+h清除光标前一个字符
Ctrl+K清除光标到行尾字符
Ctrl+F光标后移一个字符
Ctrl+B光标前移一个字符
命令区分大小写
命令或参数仅需输入前几位就可以用 Tab 键补全;
通过上下方向键来调取过往执行过的 Linux 命令;
在一个命令行上输入和执行多条命令,可以使用分号来隔开命令。如 cd /;ls
使用反斜杠”"将一个较长的命令行分成多行表达。
要使程序后台执行,只需要在命令后面加上&
符号
man
帮助手册查寻:
命令 –help:
ls --help
touch –help
man
创建文件:touch a.txt
查看不断刷新的日志文件用tail
命令时,需要用Ctrl+C退出查看操作
ls
[root@localhost ~]# ls ./
#查看当前目录所有的文件和目录,也可以省略./
[root@localhost ~]# ls -l
#查看当前目录所有的文件和目录的详细信息
[root@localhost ~]# ls -a
#查看当前目录所有的文件和目录,包括隐藏文件
[root@localhost ~]# ls -ld /etc
#查看/etc 目录本身的权限与属性信息
ls -l a.txt
查看当前目录下的文件a.txt的文件详细信息
ls -ld /etc
查看/etc目录(下的文件)本身(d)的详细信
ls -l
详解:
1
2
3
4
5
6
7
8
第1行:总计(total):当前目录下所有文件所占用的空间总和。可以使用ls –lh查看,也可使用 ls –alh 查看。
第1字段: 文件属性字段
第2字段:文件硬链接数
第3字段:文件拥有者
第4字段:文件拥有者所在组
第5字段:文件大小(以字节为单位)
第6字段:文件最后更改时间
第7字段:文件名(若为链接文件则追加显示其链接的原文件的路径)
- 文件类型的区分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-:普通文件 b:块设备文件,如硬盘、光盘等
d:目录文件 c:字符设备文件,如键盘、鼠标等
l:链接文件 p:管道文件,与shell编程有关的文件
对于目录文件:(权限)
r可读:能够读取目录内文件列表
w可写:能在该目录内新增、删除、重命名文件
x可执行:能进入该目录
drwxr-xr-x
文件类型 所有者 所属组 其他人
数值表示
4 2 1
R W X
cd
..
上一级
.
本极
cd .
上一级
cd -
上一工作目录
alias别名
alias ll
查看别名
ll
其实就是ls -l
命令的别名
alias li='ls -li'
命令定义li
为ls -li
命令的别名
在定义别名时,等号两边不能有空格。仅在命令中包含空格或特殊字符时才需要引号。
如果键入不带任何参数的alias
命令,将显示所有已定义的别名。
删除别名:unalias li
查看文本
cat
cat
查看文本文件
cat -n
显示行号
more
more
分页查看,单方向翻页
注:空格键向下翻页,回车键向下翻行, 要退出more程序,应按q键
less
less
双向翻页
PageUp向上翻页,PageDown或空格键向下翻页。上下键向上向下翻行。退出,应按q键
head
head
命令
功能: head
命令用于查看纯文本文档的前面部分内容。
head -n 20 anaconda-ks.cfg
tail
tail
命令用于查看纯文本文档的后面部分内容
tail
-n 20 anaconda-ks.cf
tail
命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新
日志文件时,这特别有用,此时的命令格式为tail -f 文件名
:
[root@localhost ~]# tail -f /var/log/messa
wc
wc
命令用于统计指定文本的行数、字数、字节数。
-l
只显示行数
-w
只显示单词数
-c
只显示字节数
wc -l /etc/passw
目录操作
mkdir
命令用于创建空白的目录。
-p
递归创建出具有嵌套叠层关系的文件目录:mkdir -p a/b/c/d/
rmdir
命令用于删除空白的目录。
-p
递归删除出具有嵌套叠层关系的文件目录
touch
touch
命令用于创建空文件或设置文件的时间。
-a
仅修改”读取时间”(atime)
-m
仅修改”修改时间”(mtime)
-d
同时修改 atime 与 mtime
同时创建多个空文件
[root@localhost b]# touch file1 file2 file3
cp
cp
命令用于复制文件或目录。
cp [选项] 源文件 目标文件
-p
保留原始文件的属性
-d
若对象为”链接文件”,则保留该”链接文件”的属性
-r
递归持续复制(用于目录)
-i
若目标文件存在则询问是否覆盖
-f
, --force
强行复制文件或目录,不论目标文件或目录是否已存在;
-a
相当于-pdr(p、 d、 r)
为上述参数
如果目标文件不存在,则会新建目标文件,并将源内容填充至目标文件中(俗称:改名)
mv
mv
命令用于剪切文件或将文件重命名
mv [选项] 源文件 [目标路径|目标文件]
dd
dd
命令用于按照指定大小和个数的数据块来复制文件或转换文件。
特殊文件: /dev/zero
(这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为 dd
命令的输入文件,来生成一个指定大小的文件
if
输入的文件名称
of
输出的文件名称
bs
设置每个”块”的大小
count
设置要复制”块”的个数
例如:我们用 dd
命令从/dev/zero
设备文件中取出一个大小为360MB 的数据块,然后保存成名
为 360_file 的文件
[root@localhost ~]# dd if=/dev/zero of=360_file count=1 bs=360M
rm
rm
命令用于删除文件 -f
强制删除
想要删除一个目录,需要在 rm
命令后面一个-r
参数才可以,否则删除不掉
diff
diff
命令用于比较多个文本文件的差异。
在使用 diff
命令时,不仅可以使用--brief
参数来确认两个文件是否不同,还可以使
用-c
参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器
两种链接
- 硬链接 独一份 指针 inode号 删除链接数减一
- 软连接 快捷方式
ln
ln
命令用于创建链接文件。-s
创建”符号链接”(如果不带-s参数,则默认创建硬链接)-f
强制创建文件或目录的链接-i
覆盖前先询问
***>
重写
>>
追加写
echo "New line" >> hard
tar
tar
命令用于对文件进行打包压缩或解压
tar [选项...] [FILE]...
-c
创建压缩文档 --create
-v
显示压缩或解压过程中详细的文件处理过程
-f
要操作的文件名,必须放到参数的最后一位
-x
解压
-t
仅查看
-z
gzip算法速率高 -J
-xz
-j
bzip速率低
-r
追加文件在末尾
-C
指定解压目录
例:
tar -cvf etc.tar /etc
将/etc目录打包放在当前目录
tar -tvf etc.tar
查看打包文件etc.tar中的文件内容参数
tar -xvf etc.tar
将打包后的文件解包到当前目录
tar -xvf etc.tar -C /root
将打包后的文件指定解包到/root目录下
tar -czvf etc.tar.gz /etc
将/etc目录通过gzip格式进行打包压缩
tar -xzvf etc.tar.gz
将压缩文件解压到当前目录
查找
which
which
命令用来查找系统PATH目录下的可执行文件命令所在的位置。
which [参数] 命令名称
whereis
whereis
命令
寻找二进制文件、man手册页和源代码文件等相关文件的路径
whereis [-bms]
命令名称
locate
locate
命令用于按照名称快速搜索文件所对应的位置。
locate [参数]... [PATTERN]
示例1: 搜索etc目录下所有以m开头的文件
[root@localhost ~]# locate /etc/m
示例2:新增的文件在locate前先使用updatedb命令更新数据库,否则查找不到
[root@localhost ~]# touch new.txt
[root@localhost ~]# locate new.txt
[root@localhost ~]# updatedb
[root@localhost ~]# locate new.txt
locate(locate)
命令用来按照文件名称快速查找文件或目录。 locate
命令要比find -name
快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db
(可以使用locate locate
查找)。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,因此,我们在用whereis
和locate
查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate
之前,先使用 updatedb
命令,手动更新数据库。
find
find
命令用于按照指定条件来查找文件。
格式: find [查找路径] 寻找条件 [操作]
参数:
user group other
-perm 444
查找文件权限-perm -444
-
表示并且;查找文件权限中u位有r权限,并且g位有r权限,并且o位有r权限的文件-perm /444
/
表示或者;查找文件权限中u位有r权限,或者g位有r权限,或者o位有r权限的文件
-not
非,取反
-user
文件所有人
-group
文件所有组
-a
并且关系
-o
或者关系
find /test -user student
#查找/test目录下文件的所有者为student的文件
find /test -group student
#按照文件的所有组查找
find /test -user root -group student
#默认表示并且
find /test -user root -a -group student
#-a表示并且
find /test -user root -o -group student
#-o表示或者
find /test -not -user student
# -not表示非,反向选择
查找属主帐户已经被删除的文件,可以使用-nouser
选项
例1:在/home
目录下查找所有的这类文件
find /home -nouser
查找没有有效所属用户组的所有文件,可以使用nogroup
选项
例2:从根目录查找没有有效所属组的文件
find / -nogroup
关于文件时间
atime
最后一次访问时间, 如cat
, more
等
ctime
最后一次状态修改时间, 如 chmod
、chown
等状态
mtime
最后一次内容修改时间
-mtime 10
#查找文件更新距离现在10天的文件
-mtime +10
#查找文件更新距离现在超过10天的文件
-mtime -10
#查找文件更新距离现在10天以内的文件
-ctime +/-10
#查找文件更新距离现在超过10天/10天以内的文件
查找比某个文件新或旧的文件
-newer newest_file_name ! oldest_file_name
默认:当前目录
例1:查找更改时间比文件 log2012.log 新但比文件 log2017.log 旧的文件
find . -newer log2012.log ! log2017.log
例2:查找更改时间在比 log2012.log 文件新的文件
find . -newer log2012.log
对查找到的文件执行某些操作
-exec 命令 {} \;
对查找到的文件执行某命令-exec
表示开始执行动作;
{}
表示用find
命令查找出的所有文件\;
表示命令的结尾。
例1:将系统中属于mail组的文件备份到/mnt下
find / -group mail -exec cp {} /mnt \;
例2:查找当前目录下当天修改过的文件,列出其详细信息
find ./ -mtime -1 -type f -exec ls -l {} \;
chmod
chmod
命令主要用于修改文件或者目录的权限
只有文件所有者和超级用户可以修改文件或目录的权限
chmod [选项] 模式[模式] 文件
-R
, --recursive
以递归方式更改所有的文件及子目录;
系统用4种字母来表示不同的用户。
u:user,表示所有者。
g:group,表示属组。
o:others,表示其它用户。
a:all,表示以上三种用户
+:添加某种权限
-:减去某种权限
=:赋予给定权限并取消原来的权限
r:read,可读。
w:write,写入。
x:execute,执行。
例如,chmod u+rwx,g+rx,o+r file.txt
会给文件 file.txt 设置以下权限:
- 所有者(user)有读、写和执行权限(rwx)
所属组(group)有读和执行权限(rx)
其他用户(others)有读权限(r)
例如,chmod 755 file.txt
会给文件 file.txt 设置以下权限:
- 所有者(user)有读、写和执行权限(7 或 rwx)
所属组(group)和其他用户(others)有读和执行权限(5 或 r-x)
chattr
功能: chattr
命令用于设置文件的隐藏权限。
格式: chattr
[参数]
文件
。
例:给test.txt添加只读属性
chattr +i test.txt
给test目录中的子目录及文件均添加只读属性
chattr -R +i ../test-dir/
lsattr
功能: lsattr
命令用于显示文件的隐藏权限。
格式: lsattr
[参数]
文件
。
chown
功能: chown
命令主要用于文件或者文件夹宿主及属组的修改。
格式: chown
[选项]
用户[:或.组]
文件或目录
。
例1:将test属主改为linuxprobe
chown linuxprobe test
例2:将test的属主改为linuxprobe、属组改为linuxprobe
chown linuxprobe.linuxprobe test
或者
chown linuxprobe:linuxprobe test
chgrp
修改文件的所属组
-R递归
如chgrp root test
vim 编辑器
esc
命令模式:光标移动,文本复制、粘贴、删除、查找a、i、o
输入模式:文本录入:
末行模式:保存、退出文档,对文件内容进行替换
esc
命令模式常用命令:
dd
删除(剪切)光标所在整行
5dd
删除(剪切)从光标处开始的 5 行
yy
复制光标所在整行
5yy
复制从光标处开始的 5 行
n
显示搜索命令定位到的下一个字符串
N
显示搜索命令定位到的上一个字符串
u
撤销上一步的操作
p
将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
:
末行模式常用命令:
:w
保存
:q
退出
:q!
强制退出(放弃修改)
:wq
保存退出
:set nu
显示行号
:set nonu
不显示行号
:整数
跳转到该行
:s/one/two
将当前光标所在行的第一个 one 替换成 two
:s/one/two/g
将当前光标所在行的所有 one 替换成 two
:%s/one/two/g
将全文中的所有 one 替换成 two
?字符串
在文本中从下至上搜索该字符串
/字符串
在文本中从上至下搜索该字符串
通配符
回顾:
1.查找/etc目录下以.log结尾的文件
find /etc -name *.log
2.显示/root目录下以.txt结尾的文件的详细信息
ll *.txt
grep
文本搜索工具,不支持*和?等通配符,使用正则表达式搜索文本
命令格式:grep
[选项]
查找条件
目标文件
选项:
--color=auto
对匹配到的文本着色显示
-v
显示不被pattern(查找条件)匹配到的行
-i
忽略字符大小写
-n
显示匹配的行号
-c
统计匹配的行数
-o
仅显示匹配到的字符串
-e
实现多个选项间的逻辑or关系
-E
支持使用*扩展正则表达式 *
在多个文件中查找含有…的行:在目标文件
之间加空格
查找含有多个查找条件
的行,使用-e
参数(在每个查找条件
之前)
正则表达式
[]
定义集合:
在一对方括号之间的字符为集合,表示匹配该集合内的任意单字符
如:单字符正则表达式[abcd]
与a或b、c、d匹配
圆点、星号、反斜线在方括号内时,代表它们自己
如:[\*.]
可匹配3个单字符
用减号-定义一个区间:
如[A-Z]、[0-9]、[A-Za-z0-9]
[][]
集合中含左右中括号两个字符,减号在最后,则失去表示区间的意义:
如:[az-]
只与3个字符匹配
用^
表示补集:
^
在开头,表示与除集合内字符外的任意字符匹配
如:[^a-z]
匹配任意非小写字符
[^][]
匹配任意非中括号字符
^
不在开头,则失去表示补集的意义
如:[a-z^]
能匹配27个单字符
例1:[A-Z][0-9]*
此例中*作用于单字符正则表达式[0-9]
,代表[A-Z]、[A-Z][0-9]、[A-Z][0-9][0-9]...等
与A、A1、C45等匹配,与b234、B23t不匹配
例2:[Cc]hapter *[1-4]
在*前有一个空格,允许数字1-4之前有0个或多个空格,可匹配Chapter2、chapter 3等
例3:a\[i] *= *b\[j] *\* *c\[k]
匹配a[i]=b[j]*c[k],容许等号和星号两侧有空格(\为转译)
扩展正则表达式(ERE,extended regular expression)
grep
需使用-E
选项
输入输出重定向
shell命令标准输入:键盘
标准输出:终端屏幕
一般情况下,每个命令运行时都会打开三个文件(流):
标准输入文件:/dev/stdin
,由0表示,默认接受来自键盘的输入
标准输出文件:/dev/stdout
,由1表示,默认输出到终端窗口
标准错误文件:/dev/stderr
,由2表示,默认输出到终端窗口
可通过ls /dev/std*
查看
输入重定向
使用 “<”符来修改标准输入设备
例1:
wc –l
统计行数(ctrl+d结束输入)
wc -l </路径
例2:使用特定的分界符作为命令输入的结束标志
wc -l << END
以END为输入结束标志
标准输出重定向、标准错误重定向
使用 “>”符或者”»“来修改输出设备
例1:ls -l /etc > f1
将ls命令生成的/etc目录下的文件清单存到当前目录中的f1文件中,而不在屏幕输出
例2:ls -l /usr >> f1
将ls命令生成的/usr目录下的文件清单以追加的方式存到当前目录中的f1文件中
例3:cat newfile oldfile > onefile
使用cat命令和重定向连接两个或多个文件
例4:cat image.png > picture.png
使用cat命令和重定向复制文件
例5:ls /nope 2> output.log
将错误信息重定向到output.log文件中
例6:cat test.c hello.c >somefile 2>&1
或 cat test.c hello.c &>somefile
将标准输出和错误输出均重定向到somefile
例7: ls /nope >a 2>b
将标准输出重定向到a文件,错误输出重定向到b文件
重定向至/dev/null
/dev/null
:特殊文件,不保存数据,写入其中的内容都会被丢弃。将命令的输出重定向到它,会起到”禁止输出”的效果
command > /dev/null
屏蔽stdout
command 2> /dev/null
屏蔽stderr
command > /dev/null 2>&1
屏蔽stdout和stderr:
管道命令
管道符|
用于进程间通信。将前面一个进程的输出直接作为下一个进程的输入
格式:命令1 | 命令2 | …… | 命令n
1
2
3
例1:使用grep命令通过匹配文件/etc/passwd中的关键词/sbin/nologin找出了所有被限制登录系统的用户,计算一个有多少个用户。
找出被限制登录用户的命令是grep "/sbin/nologin" /etc/passwd;
统计文本行数的命令则是wc -l。
使用管道符连接两条命令:
1
2
3
4
grep "/sbin/nologin" /etc/passwd | wc -l
例2:ls -l /etc | less
例3:ps -ef | grep firefox 过滤firefox相关进程信息
例4:echo "123456" | passwd --stdin 用户名 修改密码
用户
分为:超级用户(rootUID为0)、系统用户UID为1~999 、普通用户UID1000+
统计无法登陆的用户个数(同上) grep "/sbin/login" /etc/passwd | wc -l
用户账号文件
/etc/passwd
:所有人可读 每个用户的详细信息为一行,其中包含7个字段,每个字段之间用冒号 : 分隔
保存了登录 Linux 系统所必需的每个用户的用户名、密码、用户 ID、群组 ID、用户 ID 信息、用户的家目录和 Shell 信息
/etc/shadow
只有root用户对shadow文件可读,且root用户对该文件也不可以直接编辑 冒号:为分隔符将每行分为9个字段:
1
2
3
4
5
6
7
8
9
第1字段:用户名,与/etc/passwd中一致
第2字段:代表加密密码,伪用户的密码都是!!或*,代表不能登录到系统中
第3字段:最后一次修改口令时间,从1970年1月1日到最近一次修改口令的间隔天数
第4字段:两次修改口令间隔最少的天数
第5字段:两次修改口令间隔最多的天数,密码有效期
第6字段:密码需要变更前的警告天数
第7字段:密码过期后的宽限时间,即口令失效多少天之后禁用这个账户
第8字段:*账号失效时间*,使用1970年1月1日以来的总天数作为账户的失效时间
第9字段:保留域
第8字段:账号失效时间,使用1970年1月1日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!该字段通常被用在具有收费服务的系统中
date -d "18993 day"
转化为日期
用户组
基本组:每个用户至少加入一个组,创建该用户时自动创建一个与之同名的基本组
附加组:每个用户可以加入多个组,这些组称为该用户的附加组
GID的划分同UID
用户组账号文件
/etc/group
:所有人可读
1
2
3
4
第1字段:用户组名称,建议按功能或组织划分和命名
第2字段:组密码位,用户组口令占位符
第3字段:GID,用户组标识
第4字段:组内用户列表,以逗号分隔列出该组用户
/etc/gshadow
: 只有超级用户root可读
1
2
3
4
第1字段:用户组名称,与/etc/passwd文件中的组名相对应
第2字段:组密码,不设置组密码,则该字段为空,有时为"!",指该群组没有组密码,也不设群组管理员
第3字段:组管理员,管理群组用户
第4字段:组中的附加用户,以逗号分隔
用户账户的创建和管理
查看用户id
语法:id 用户名
第1个字段:用户的UID
第2个字段:基本组的GID和名称
第3个字段:用户所属基本组和附加组的GID和名称
切换用户su
su -
连用户和Shell环境一起切换
添加新用户useradd
参数 | 作用 |
---|---|
-d | 指定用户的家目录(默认为/home/username) |
-e | 账户的到期时间,格式为YYYY-MM-DD. |
-u | 指定该用户的默认UID,要求该UID未被其它用户使用 |
-g | 指定用户基本组(必须已存在) |
-G | 指定一个或多个用户附加组 |
-N | 不创建与用户同名的基本用户组 |
-s | 指定该用户的默认Shell解释器 |
例:创建一个用户testuser,指定其UID为8888,附加组为root,家目录为/home/test
useradd -u 8888 -G root -d /home/test testuser
删除用户userdel
|参数|作用|
|-f|强制删除用户,即使当前用户目前已登录到系统中|
|-r|同时删除用户及用户家目录|
修改用户属性usermod
usermod [选项] 用户名
参数 | 作用 | |
---|---|---|
-l | 修改用户名login | |
-c | 填写用户账户的备注信息comments | |
-d -m | 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去 | |
-e | 账户的到期时间,格式为YYYY-MM-DD | |
-g | 变更所属用户组 | |
-G | 变更扩展用户组 | |
-L | 锁定用户密码,使密码无效(禁止用户登录)lock | |
-U | 解除密码锁定unlock | 锁定:其密码(shadow)前加上了一个感叹号”!” |
-s | 变更默认终端shell | |
-u | 修改用户的UID |
例
1.创建用户super,设置其家目录为/super,指定其UID为1501
useradd -u 1500 -d /super super
2.查看super的id信息及/etc/passwd中super信息
id super; tail -1 /etc/passwd或grep super /etc/psswd
3.修改用户super的用户名为master,家目录为/home/master,添加备注信息”原super”,附加组为root
usermod -l master -c "原super"-md /home/master -G root super
4.查看修改后的super,即master的id信息及/etc/passwd中master信息
id master; tail -1 /etc/passwd
设置用户口令passwd
passwd [选项] 用户名
参数 | 作用 |
---|---|
-l | 锁定用户,禁止其登录 |
-u | 解除锁定,允许用户登录 |
–stdin | 允许通过标准输入修改用户密码,如echo “NewPassWord” | passwd –stdin Username |
-d | 使该用户可用空密码登录系统 |
-e | 强制用户在下次登录时修改密码 |
-S | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |
更改用户密码有效期chage
参数 | 作用 |
---|---|
-l | 列出用户密码时效信息 |
-m | 密码可更改的最小天数,为0表示可以随时更改 |
-M | 密码有效期最大天数 |
-E | 账号到期时间 |
-d | 上一次更改日期,0表示强制用户在下次登录时修改密码 |
-W | 密码到期前提示 |
``
例2:设置两次改变密码之间相距的最小天数为1天
chage -m 1 kiosk
例3:设置两次更改密码之间相距的最大天数为30天
chage -M 30 kiosk
例4:强制用户下次登录时修改口令
chage -d 0 kiosk
chage -d 2023-02-18 tom
强制用户2023-02-18必须修改口令
例5:设置账户过期时间
chage -E '2026-1-1' kiosk
chage -E -1 kiosk
如果想设置为永久有效,则 -E 后跟 -1。
例6:设置密码过期前多少天开始提醒
chage -W 7 kiosk
例7:设置用户随时都可修改密码 且密码最高有效期为 90 天。在密码失效前,提前 15 天发出警告提醒。
chage -m 0 -M 90 -W 15 tom
查看信息cat
、more
、less
、head
、tail
、grep
等文本查看命令
/etc/login.defs配置文件
设置用户账号限制的文件,可配置密码的最大过期天数等信息
该文件中的配置对root无效
/etc/shadow中相关配置的优先级高于/etc/login.defs文件
关键配置项:
MAIL_DIR:用户邮件的存储位置。
PASS_MAX_DAYS:密码的最大有效期。
PASS_MIN_DAYS:密码的最小有效期。
PASS_MIN_LEN:密码的最小长度。
PASS_WARN_AGE:密码过期前的警告天数。
UID_MIN 和 UID_MAX:可分配的最小和最大用户ID。
CREATE_HOME:是否在创建用户时创建家目录。
UMASK:新建文件和目录的默认权限掩码。
例:使用root用户vim /etc/login.defs
找到 PASS_MAX_DAYS 这一行,并将其修改为:
PASS_MAX_DAYS 1000
保存并退出编辑器,更改将在新创建的用户账户中生效。
组群管理
创建用户组groupadd
、addgroup
例1:添加用户组financial:groupadd financial
例2:添加用户组tech,指定gid为1200:groupadd -g 1200 tech
查看以上组群是否添加成功:tail -2 /etc/group
修改用户组groupmod
选项 | 作用 |
---|---|
-g gid | 修改gid |
-n group-name | 把组群的名称改为group-name |
例1:修改financial组名为fina:groupmod -n fina financial
例2:修改tech组的GID为1300:groupmod -g 1300 tech
添加、删除组成员gpasswd
gpasswd [选项] 用户名 组名
选项 | 作用 |
---|---|
-a | 把用户加入组 |
-d | 把用户从组中删除 |
-A | 给组指派管理员 |
例1:给fina添加组成员:gpasswd -a lmmlinux jack fina
查看lmmlinux是否加入fina组:grep fina /etc/group
例2:从fina删除组成员:gpasswd -d lmmlinux fina
例3:指定lmmlinux为fina组管理员:gpasswd -A lmmlinux fina
删除组管理员,使用root权限vi /etc/gshadow
,如无权限,chmod 777 /etc/shadow
,删掉管理员后再chmod 000 /etc/shadow
修改过来
添加用户到某一个组 可以使用 usermod -G group_name user_name
命令可以添加一个用户到指定的组,但是以前添加的组就会清空掉
要添加一个用户到一个组,同时保留以前添加的组时,使用 gpasswd -a user_name group_name
命令来添加操作用户
删除用户组groupdel
groupdel 组名
如要删除的组为某些用户的基本组,则必须先删除这些用户后,才能删除组
特殊权限
SUID(Set UID)
定义:当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd这个文件的权限状态:”-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID
对象:二进制程序文件
作用:可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
特点:
SUID权限仅对二进制程序(binary program)有效;
执行者对于该程序需要具有x的可执行权限;
本权限仅在执行该程序的过程中有效(run-time);
执行过程中,执行者将具有该程序拥有者(owner)的权限。
chmod u+s filename
设置SUID位
chmod 4755 filename
设置SUID位
chmod u=rwxs filename
指定文件所有者权限
chmod u-s filename
去掉SUID设置
chmod 755 filename
去掉SUID设置
例1:查看passwd的权限属性:ll /usr/bin/passwd
借助SUID使普通用户执行passwd命令时,获得root的权限,进而修改密码(即修改/etc/shadow文件)
例2:给cat命令添加SUID:
chmod u+s /usr/bin/cat
SGID
定义:当s这个标志出现在文件所属组的x权限上时,被称为Set GID,简称为SGID,可以对二进制文件和目录进行设置
对象:二进制程序文件或目录
作用:
让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置)
在某目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)
设置SGID权限:
chmod g+s filename
chmod 2755 filename
chmod g=rwxs filename
chmod g-s filename
chmod 755 filename
SBIT(Sticky Bit)——粘滞位、防删除位
定义:当目录被设置SBIT特殊权限位后,文件的其他人权限部分的x执行权限就会被替换成t
对象:目录
作用:当用户在该目录下建立文件或目录时,仅有自己与root才有权限删除
注意:普通用户要对该目录拥有w和x权限,即普通用户可以再此目录拥有写入权限,没有w权限设置粘滞位就失去了意义
设置SBIT权限:
chmod o+t 目录名称
chmod 1777 目录名称
chmod o-t 目录名称
去掉SBIT设置
sudu
sudo服务,允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户去执行一些或者全部的root命令的一个工具
功能:把特定命令的执行权限赋予指定用户
使用权限:在/etc/sudoers
文件中设置可以使用sudo命令得到用户,使用visudo
命令编辑该文件
格式:sudo [选项] command
参数 | 作用 |
---|---|
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令list |
-u用户名或UID值 | 以指定的用户身份执行命令 |
-k | 清空密码的有效时间,下次执行sudo时需要再次进行密码验证 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
使用visudo配置sudo命令的配置文件:
使用root管理员权限运行visudo
,找到第100行左右,按照下列格式指定用户权限信息
用户名(%组名) 主机地址=(以谁的身份) 可执行命令列表
如,给jack添加权限:允许jack以root的身份上在所有主机上运行除shutdown之外的命令,在101行添加如下信息:
jack ALL=(root) ALL,!/usr/sbin/shutdown
解释👆:
第1个字段jack指定的是被授权的用户
第2个字段ALL指定的是用户所在的主机,可以是ip也可以是主机名,表示sudo设置只在该主机上生效,ALL表示在所有主机生效,不管文件拷贝到哪里都可以用。
第3个字段(root)括号里指定的也是用户:指定以什么用户身份执行sudo,本例中意为用sudo后可以享有所有root账号下的权限。ALL代表所有用户,如要排除个别用户,可在括号内设置,如ALL=(ALL,!yunwei,!youhua)
第4个字段ALL指定的是执行的指令:本例中表示使用sudo后可以执行所有的指令,除shutdown之外。NOPASSWD:ALL表示使用sudo不需要输入密码
也可以授权给用户组:%admin ALL=(ALL) ALL表示admin组所有成员可以在任何主机上以任何用户身份执行命令
物理设备
硬件设备文件命名规则
硬件设备 | 文件名称 |
---|---|
IDE设备 | /dev/hd[a-d] |
SCSI/SATA/U盘 | /dev/sd[a-p] |
软盘 | /dev/fd[0-1] |
打印机 | /dev/lp[0-15] |
光盘 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0或/dev/ht0 |
/dev/sda5
/dev:表示硬盘设备文件所在的目录
sd:表示存储设备
a~p:硬盘顺序号,一台主机上可以有多块硬盘,因此系统采用a~p来代表不同的硬盘,系统内核识别到的第一块硬盘默认从a开始
5(数字):硬盘分区编号
分区类型:
主分区:最多4个,最少1个,编号1-4
扩展分区:
不能直接存放数据,必须在扩展分区上建立逻辑分区才能存放数据;
占用主分区编号,主分区+扩展分区之和最多4个,且扩展分区最多一个
逻辑分区:存在于扩展分区之上;编号从5开始
分区原理:
磁盘由大量的扇区组成的,每个扇区的容量为512字节;
第一个扇区记录着主引导记录(446字节)与分区表信息(64字节),最后2字节为结束符;
主引导记录:初始化程序加载器,用来存储操作系统的内核
分区表信息:每个分区信息16个字节,最多记录64/16=4个分区,因此主分区+扩展分区个数最多为4
如所需分区个数超过4,将分区4作为扩展分区,扩展分区表中记载逻辑分区的信息
df—磁盘使用情况统计
df [选项] [file]
选项 | 作用 |
---|---|
-h | –human-readable使用人类可读的格式 |
-T | –print-type显示文件系统的类型 |
查看本机所有磁盘的使用情况:df -hT
du—查看分区或者目录所占用的磁盘空间大小
选项 | 作用 |
---|---|
-h | –human-readable使用人类可读的格式 |
-s | 显示目录总大小 |
fdisk—磁盘分区
语法:fdisk [磁盘名称]
功能:管理磁盘分区,它提供了集添加、删除、转换分区等功能于一身的”一站式分区服务”。这条命令的参数(见表)是交互式的。
参数 | 作用 |
---|---|
m | 查看全部可用的参数 |
n | 添加新的分区 |
d | 删除某个分区信息 |
l | 列出所有可用的分区类型 |
t | 改变某个分区的类型 |
p | 查看分区信息 |
w | 保存并退出 |
q | 不保存直接退出 |
mkfs—格式化分区(建立文件系统)
如果硬件存储设备没有进行格式化,则Linux系统无法得知怎么在其上写入数据。因此,在对存储设备进行分区后还需要进行格式化操作。在Linux系统中用于格式化操作的命令是mkfs。这条命令很有意思,因为在Shell终端中输入mkfs
后再敲击用于补齐命令的Tab键,会有如下所示的效果:
1
2
3
[root@localhost ~]# mkfs
mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
例如要格式分区为XFS的文件系统,则命令应为mkfs.xfs /dev/sdb1
mount—挂载分区
首先是创建一个用于挂载设备的挂载点目录;
然后使用mount
命令将存储设备与挂载点进行关联;
最后使用df -hT
命令来查看挂载状态和硬盘使用量信息。
mount
手动挂载分区
Linux系统重启时会被自动卸载,需重新手动再次挂载
mount [选项] [文件系统] [挂载目录]
参数 | 作用 | |
---|---|---|
-a | *挂载所有在/etc/fstab中定义的文件系统 | * |
-t | 指定文件系统的类型 |
要把设备/dev/sdb1挂载到/newFS目录,只需要在mount命令中填写设备与挂载目录参数就行,系统会自动去判断要挂载文件的类型,因此只需要执行下述命令即可:
mkdir /newFS
mount /dev/sdb1 /newFS/
/etc/fstab
自动挂载
/etc/fstab称为文件系统数据表,Linux在每次开机时都会按照该文件中的配置自动挂载文件系统
格式:”设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”
字段 | 意义 |
---|---|
设备文件 | 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier) |
挂载目录 | 指定要挂载到的目录,需在挂载前创建好 |
格式类型 | 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等 |
权限选项 | 若设置为defaults,则默认权限为:rw,relatime,seclabel,noquota等 |
是否备份 | 若为1则开机后使用dump进行磁盘备份,为0则不备份 |
是否自检 | 若为1则开机后自动进行磁盘自检及检查顺序,0不自检,1优先检查,2其次检查 |
umount—卸载分区
umount 挂载点/设备文件
umount /dev/sdb1
磁盘容量配额
限制对象
用户、用户组、单一目录
限制类型:
inode:可以创建文件或者目录的数量
block:可以存储的容量大小
soft:软限制,可以被超过,超过的部分会被保存到宽限时间到期。一般是硬限制的80%。
hard:硬限制,绝对不能被超过地限制。达到该值时,系统会禁止继续增加新的文件
宽限时间:默认为7天。超过软限制但未达硬限制,宽限时间内必须将超过的数据降低到软限制以下。宽限时间到期,系统将自动清除超过的数据
修改/etc/fstab,对所选文件系统激活配额选项
重新挂载文件系统,使修改生效
用xfs_quota对具体用户或目录设置配额
挂载类型:
usrquota/uquota/quota:针对用户账号的设定
grpquota/gquota:针对群组的设定
pquota/prjquota:针对单一目录的设定,不能与gquota同时存在
1
2
3
4
5
6
7
举例:
[root@localhost ~]# vim /etc/fstab
…
/dev/sdb2 /opt xfs defaults,uquota 0 0
[root@localhost ~]# reboot (或者umount /opt && mount -a)
[root@localhost ~]# mount | grep opt #查看/opt分区的挂载信息
/dev/sdb2 on /opt type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)
xfs_quota命令
功能:专门针对XFS文件系统来管理quota磁盘容量配额服务而设计的命令
格式:xfs_quota -x -c "comment" [文件系统]
参数 | 作用 |
---|---|
-x | 专家模式,只有加了-x后面才能加-c |
-c | 以参数的形式设置要执行的命令 |
-c指定常用命令:
print:列出目前主机内的文件系统参数等数据
state:查看目前支持quota的文件系统的信息
report:查看目前的quota项目
u:对用户查看
g:对组查看
a:查看所有可用分区的配额使用报告
b:查看磁盘容量
i:查看文件数 h:人类更容易理解的方式
r:实时数据块容量
限额用户和用户组:
xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=N name"fileSystemPath
xfs_quota -x -c "timer [-ug] [-bir] Ndays"fileSystemPath
limit指定限定的项目,可以针对user和group限制
bsoft|bhard、isoft|ihard:block(磁盘容量)和inode(文件数量)的hard和soft限制值
例:设定test用户的限额为200/300M,群组共500/600M的容量,宽限时间为7天
xfs_quota -x -c "limit -u bsoft=200M bhard=300M test" /opt
xfs_quota -x -c "limit -g bsoft=500M bhard=600M test"/opt
xfs_quota -x -c "timer -u -b 7days"/opt
xfs_quota -x -c "timer -g -b 7days"/opt
限额目录:
使用限额目录功能前需要编辑/etc/fstab,取消grpquota加入prjquota
其次,编辑/etc/projects和/etc/projid,为目录设定项目名称和项目id
例如,为/newFileSystem/myquota指定项目id为1,项目名称为myquotaprj
echo "1:/newFileSystem/myquota" >> /etc/projects
echo "myquotaprj:1" >> /etc/projid
初始化项目名称
xfs_quota -x -c "project -s myquotaprj"
设定限额
xfs_quota -x -c "limit -p b[soft|hard]=N i[soft|hard]=N 项目名称"fileSystemPath
edquota命令
功能:edquota命令用于编辑用户的quota配额限制
语法:edquota [参数] [用户]
在为用户设置了quota磁盘容量配额限制后,可以使用edquota命令按需修改限额的数值。其中:
-u参数表示要针对哪个用户进行设置
-g参数表示要针对哪个用户组进行设置
edquota命令会调用Vi或Vim编辑器来让root管理员修改要限制的具体细节。
举例:把用户tom的硬盘使用量的硬限额从5MB提升到8MB:
edquota -u tom
Linux系统监视与进程管理
前台启动:用户输入一个Shell命令后按Enter键就启动了一个前台作业。这个作业可能同时启动多个前台进程。
后台启动:如果在输入的Shell命令末尾加上&
符号,再按Enter键,可启动一个后台作业。
jobs
:查看当前有多少在后台运行的命令
作业的前后台切换
bg
命令
格式:bg [作业号]
功能:将前台作业切换到后台运行,若没有指定作业号,则把当前作业切换到后台。
fg
命令
格式:fg [作业号]
功能:将后台作业切换到前台运行。若没有指定作业号,则把后台作业序列中的第一个作业切换到前台运行。
ctrl+z
功能:可以将一个正在前台执行的命令放到后台,并且暂停运行。区别于&,启动命令时加&是将命令放到后台运行。
调度启动
调度启动是系统按用户要求的时间或方式执行特定的进程。Linux允许用户根据需要在指定的时间自动运行指定的进程,也允许用户将非常消耗资源和时间的进程安排到系统比较空闲的时间来执行。
优点:进程调度有利于提高资源的利用率,均衡系统负载,并提高系统管理的自动化程度。
对于偶尔运行的进程,采用at
或batch
调度。
对于特定时间重复运行的进程,采用cron
调度。
at
调度
格式:at [选项] [时间]
功能:设置指定时间执行指定的命令(一次性任务定时)
参数 | 作用 |
---|---|
-f 文件名 | 从指定文件而非标准输入设备获取将要执行的命令 |
-l | at -l显示等待执行的调度作业或者atq |
-d | at -d删除指定的调度作业或者atrm |
对应服务:atd,开启atd服务才能使用at调度,所以需查看系统是否开启atd服务
配置文件:
/var/spool/at/
:at定时任务产生的文件放置在该目录下,执行完后对应文件即删除
使用者权限配置文件:
/etc/at.allow和/etc/at.deny:限制哪些用户可以使用at命令
如果/etc/at.allow文件存在,那么只有列在此文件中的用户才可以使用at命令;
如果/etc/at.deny文件存在,那么只有列在此文件中的用户才不可以使用at命令;
如果两个文件都不存在,那么只有超级用户才可以使用at命令;
如果两个文件都存在且都为空,那么所有人可以使用at命令。
进程开始执行的时间可采用以下方法表示:
绝对计时法
HH:MM(小时:分钟):可采用24小时计时制。如果采用12小时计时制,则时间后面需加上AM(上午)或PM(下午)。
MMDDYY或MM/DD/YY或DD.MM.YY或YYYY-MM-DD:指定具体日期,必须写在”HH:MM”后。
相对计时法
now或某时间点+时间间隔:时间单位为minutes(分钟)、hours(时)、days(天)、weeks(星期)。
直接计时法
today(今天)、tomorrow(明天)、midnight(深夜)、noon(中午)、teatime(下午4点)。
batch
调度
格式:batch [选项]
功能:与at命令用法相同,如果不指定运行时间,进程将在系统较空闲时运行(batch会检查系统负载值,负载较轻(一般为0.8以下为较轻)才会执行任务,使用w或top查询系统负载load average)
适用场景:batch调度适合于时间上要求不高,但运行时占用系统资源较多的工作
选项:batch命令的选项与at命令相同
cron
调度
格式:crontab [选项]
功能:设置周期性定时任务。使用crontab命令生成cron进程所需要的crontab文件。
参数 | 作用 |
---|---|
-e | 创建并编辑crontab配置文件 |
-l | 显示等待执行的调度作业,即显示crontab配置文件的内容 |
-r | 删除crontab配置文件 |
分类:
系统调度任务:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
配置文件:/etc/crontab
用户调度任务:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
配置文件:
/etc/cron.deny:该文件中所列用户不允许使用crontab命令
/etc/cron.allow:该文件中所列用户允许使用crontab命令
/var/spool/cron/:所有用户crontab文件存放的目录,以用户名命名
crontab配置文件详解
所有字段不能为空,字段之间用空格分开,如果不指定字段内容,则使用”*“符号
可使用”-“符号表示一段时间。如在日期字段中输入”1-5”,表示每个月前5天每天都要执行该命令。
可使用”,”符号来表示指定的时间。如在日期字段中输入”5,15,25”,则表示每个月的5日、15日和25日都要执行该命令。
可使用”/”符号来表示间隔的时间。如在分钟字段中输入”*/2”,则表示每隔2分钟。
字段 | 分钟 | 时 | 日期 | 月份 | 星期 |
---|---|---|---|---|---|
取值范围 | 0~59 | 0~23 | 01~31 | 01~12 | 0~6,0为星期天 |
实例1:每1分钟执行一次command
* * * * * command
实例2:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
实例3:crontab每天早上6点和7点执行脚本
1 6,7 * * * python3 /root/python/get_weather.py
每天凌晨两点备份/var/www/html的数据到/backup目录下(使用tar命令)
每周一凌晨三点清理临时文件(在/tmp目录下查找mtime>7天的文件并删除)
1
2
3
[root@localhost cron]# crontab -e
0 2 * * * tar -czvf /backup/var.www.html.tar /var/www/html
0 3 * * 1 find /tmp -type f -mtime +7 -exec rm -f {} \\;
ps
显示进程的状态。无选项时显示当前用户在当前终端启动的进程。
例:
1
2
3
4
5
6
7
ps -u root //显示指定用户信息
ps -ef //显示所有进程信息,连同命令行
ps -ef | grep ssh //ps与grep常用组合用法,查找特定进程
ps -l //将目前属于用户自己这次登入的PID与相关信息列示出来
ps aux //列出目前所有的正在内存当中的程序
ps aux |egrep "(cron|syslog)" //找出与 cron与syslog这两个服务有关的PID
ps -o pid,ppid,pgrp,session,tpgid,comm //输出指定的字段
ps aux
命令的输出格式如下,各字段含义如下:
【USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND】
pstree命令
格式:pstree [选项]
功能:以树状方式表现进程的父子关系。用ASCII字符显示树状结构,清楚地表达进程间的相互关系。如果不指定进程识别码或用户名称,则会把系统启动时的第一个进程Ginit)视为根,并显示之后的所有进程。若指定用户名称,会以隶属该用户的第一个进程当作银然后显示该用户的所有进程。
top命令
功能:查看进程信息的动态变化,默认每3秒刷新一次进程信息
kill命令
格式:kill [信号代码] PID
功能:kill命令通过内核向进程发送信号以执行某些特殊的操作,如挂起进程、正常退出进程或强制终止进程等。通常,终止一个前台进程可以使用Ctrl+C组合键,但是,对于一个后台进程就必须用kill命令来终止,就需要先使用ps获取进程pid,然后使用kill命令来杀掉该进程。kill命令是通过向进程发送指定的信号来结束相应进程的。默认信号为SIGTERM(15),可终止指定的进程。如果仍然无法终止该进程,可以使用SIGKILL(9)信号强制终止进程。1 (HUP):重新加载进程。9 (KILL):杀死一个进程。15 (TERM):正常停止一个进程。
1.杀死进程
kill 12345
2.强制杀死进程
kill -KILL 123456
3.彻底杀死进程
kill -9 123456
4.发送SIGHUP信号
kill -HUP pid
进程的优先级
在Linux中,所有的进程根据其所处状态,按时间顺序排列成不同的队列。系统按一定的策略调度就绪队列中的进程。若用户因为某种原因希望尽快完成某个进程的运行,则可以通过修改进程的优先级来改变其在队列中的排列顺序,从而得以尽快运行。
启动进程的用户或超级用户可以修改进程的优先级,但普通用户只能调低优先级,超级用户既可调低也可调高优先级。在Linux中,进程优先级的取值为-20~ 19 之间的整数,取值越低,优先级越高,默认为0。
nice命令
功能:设置进程的优先级
每个进程都有优先级,优先级越高表示进程越有可能获得CPU使用权
优先级用nice值表示,取值范围是-20~19,默认值为0,数字越大表示优先级越低
renice命令
调整运行中的进程的优先级
普通用户只能调整自己创建的进程,而且只能把nice调整为更大的值
root用户可以调整所有人的进程优先级,而且可以调整为更小的值
nohup命令
功能:不挂断的运行命令,即使终端关闭。
区别于&:&符号表示将该命令或脚本放入后台运行。但终端关闭后运行会中断。
例:要在注销后在后台运行命令 nohup find / -name *.txt
默认情况下,nohup命令会输出一个nohup.out的文件到当前目录下,也可结合重定向符号将命令的结果写入其他文件。
软件包的安装与管理
源码包
开放源代码,可自由定制
从官网下载压缩包,解压编译安装等
安装较慢
2.源代码包
在Linux中,使用的软件都是开源的,用户可以得到软件的源代码,经过编译后再进行安装。源代码包里的文件往往会含有很多源代码文件,比如.h、.c、.cc、.cpp等。
`
安装过程如下:
1
2
3
4
5
6
7
tar zvxf xxx.tar.gz //解压
cd xxx
./configure //配置
./configure --hlep //查询configure选项
make //编译
make install //安装
make uninstall //卸载
二进制包
不可见源代码,类似windows的exe可执行文件 Redhet、centos中即rpm包 软件厂商已编译,安装更快
RPM软件包命名方式
httpd.-2.2.15-15.el6.centos.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
el6.centos 适合的Linux平台
i686 适合的硬件平台
rmp rpm包扩展名
URL方式的命名方式
FTP方式的命名格式
ftp://[用户名[:密码]@]主机[:端口]/包文件
[ ]括住的内容可选。主机可以是主机名,也可是IP地址。包文件可含目录信息。如未指定用户名,则RPM采用匿名方式传输数据(用户名为anonymous)。如未指定密码,则RPM会根据实际情况提示用户输人密码。如未指定端口,则RPM使用默认端口(一般为21)
【例1】:ftp://ftp. xxx. com/ yyy. rpm(使用匿名传输,主机ftp. xxx. com,包文件yyy. rpm)
【例2】:ftp://11. 22. 33.44: 1100/ pub/yyy. rpm(匿名FTP传输,主机IP为11. 22. 33.44,使用1100端口,包文件在/pub目录下)
用户要安装这类RPM软件包,必须使用如下命令:
rpm -ivh ftp://ftp. xxx.com/yyy.rpm
rpm- ivh ftp://11.22.33.44:1100/pub/yyy. rpm
HTTP方式的命名格式
http://主机[:端口]/包文件
[ ]括住的内容可选。主机可以是主机名,也可是IP地址。包文件可含目录信息。如未指定端口,则RPM默认使用80端口。
【例1】: http://www. xxx. com/yyy. rpm(用HTTP获取www. xxx. com主机上的yyy. rpm文件);
【例2】: http://www. xxx. com: 8080/ pub/yyy. rpm(用HTTP获取www. xxx. com主机上/pub目录下的yyy.rpm文件,使用端口8080)。
用户要安装这类RPM软件包,必须使用命令:
rpm - ivh http:/ /www. XXX . com/yyy. rpm
rpm -ivh http://www. XXX. com: 8080/pub/yyy. Rpm
RPM介绍
Redhat Package Manager
功能:安装、查询、升级、卸载、校验
缺点:无法解决软件包的依赖关系
rpm安装完成后,相关文件会复制到不同目录,一般默认分步如下:
/etc 存放配置文件
/bin/sbin 一些可执行文件
/lib/lib64 一些库文件
/usr/include 一些头文件
/usr/share/doc 使用手册帮助文件
/usr/share/man man手册
使用RPM安装软件
语法:rpm -ivh [包名1] [包名2]...
参数:包名1、包名2是将要安装的RPM包的文件名(即:软件包名),注意此处为全名。
选项:
-i:install 安装
-v:verbose 显示详细信息
-h:hash 显示进度
–nodeps 不检测依赖性
使用RPM删除软件
语法:
rpm -e|--erase [删除选项1 删除选项2......] [软件名1] [软件名2......]
注意:
存在依赖关系时,使用-e选项时是不能删除的,如要删除,应使用--nodeps
选项
使用RPM升级软件
Rpm -U | --upgrade [包文件1] [包文件 2] ...
不存在就安装,存在就升级
使用RPM查询软件
1
2
3
4
5
6
7
8
9
10
rpm -q | --query [查询选项] [软件名|软件包名|文件名]
rpm -qa //列出当前系统所有已安装的包,a为all
rpm -qa | grep sql //查找所有安装过的包含字符串SQL的软件包
rpm -q sql ite //查询某RPM包是否已安装。注意:参数是"软件名"
rpm -qc vsftpd //查询配置文件,c为configure
rpm -qi sqlite //查询某已安装的RPM包的摘要信息
rpm -ql sqlite //列出某已安装的RPM包安装所产生的文件清单
rpm -qf /usr/libexec/webmin/xmlrpc.cgi //查询某文件属于哪一个RPM包。注意:参数是"文件名"
rpm -qip webmin-1. 680-1. noarch. rpm //列出指定RPM包的摘要信息。注意:参数是"软件包名",该软件包可能未装
rpm -qIp webmin-1.680- 1.noarch. rpm //列出安装某RPM包将生成的文件清单
yum——基于RPM的软件包管理器
Yellow Dog Updater Modified,的宗旨是收集rpm软件包的相关信息,检查依赖关系,自动化地升级、安装、删除rpm软件包
yum的关键之处是要有可靠的repository( 仓库),repository管理一部分甚至一个Linux发行版的应用程序的依赖关系,根据计算出来的依赖关系进行相关软件包的升级、安装、删除等操作,解决了Linux用户一直头痛的依赖关系问题。
repository可以是http 或ftp 站点,也可以是本地软件池,但必须包含rpm的header,header包括了rpm包的各种信息,包括描述、功能、提供的文件、依赖性等。正是收集了这些header并加以分析,才能自动化地完成升级、安装软件包等任务。
yum客户端的配置文件
放在本地的/etc/yum.repos.d/*.repo
中。
修改yum源(repository)
vi /etc/yum.repos.d/CentOS-Base.repo
yum 的配置文件分为两部分:main 和repository
main 部分定义了全局配置选项,整个yum 配置文件应该只有一个main。常位于/etc/yum.conf 中。
repository 部分定义了每个源/服务器的具体配置,可以有一到多个。常位于/etc/yum.repo.d 目录下的各文件中。
yum.conf 文件一般位于/etc目录下,一般其中只包含main部分的配置选项。
repository格式详解
updates:yum软件仓库名称,用于区别各个不同的repository,必须是一个独一无二的名称。
Name:yum软件仓库的描述,自己写,易于识别仓库用处。
mirrorlist:列出这个容器可以使用的镜像站点,如果不想使用,可以注释
enabled=0:禁止yum使用这个repository;enabled=1:使用这个repository。如果没有使用 enabled选项,那么相当于enabled=1。
gpgcheck=0:安装前不对RPM包检测;gpgcheck=1:安装前对RPM包进行检测。
Gpgkey:数字证书公钥文件保存位置,不用修改。
baseurl:yum源服务器的地址,默认是CentOS官方的yum源服务器。是如果觉得慢,可以改成其他yum源。它的格式是:
baseurl=url://server1/path/to/repository/
注意:其中URL支持的协议http:///、ftp://和file://三种,baseurl后可以跟多个URL,但是baseurl只能有一个
mirrorlist指向的是一堆baseurl
baseurl:指向一个固定的地址
修改网络源:
由于CentOS 8主要使用AppStream, BaseOS, Extras三个仓库,所以在这里主要配置上面三个仓库对应的配置文件,这里的三个仓库可以理解为同一个软件源中保存了不同种类软件的不同部分。如需要修改使用阿里云yum源
多个yum源:轮询或者设置优先级
gpgcheck=0:安装前不对RPM包检测;gpgcheck=1:安装前对RPM包进行检测。
用yum安装、删除软件
例1:安装vsftpd:yum install vsftpd
例2:卸载vsftpd:yum remove vsftpd
例3:安装vsftpd,全部问题自动回答为是:yum install -y vsftpd
例4:升级vsftpd:yum update vsftpd
用yum搜索、查询软件
例1:搜索包含ftpd的软件名称:yum search ftpd
例2:列出软件功能:yum info vsftpd
例3:列出服务器上所有的软件名称:yum list
例4:找出所有以vsf开头的软件名称:yum list vsf*
例5:找出服务器上可供本机进行升级的软件:yum list updates
例6:查看yum源列表(所有的、启用的、禁用的):yum repolist [all | enabled | disabled ]
yum clean all清除旧缓存, yum makecache生成新缓存
DNS服务器
查看/etc/resov.conf配置文件,该文件中有DNS服务器配置信息。
也可以使用nslookup(nameserver lookup)命令
配置DNS服务器
安装bind域名服务软件
BIND(Berkley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务软件。BIND的软件名为bind,对应的服务进程名为named。
安装过程
查看系统是否安装bind软件包:rpm –qa | grep bind
yum install bind* –y
安装 bind,并通过 rpm -qa | grep bind
查看是否安装成功。
开启named服务
关闭防火墙设置,以及selinux:
临时关闭
systemctl stop firewalld
永久关闭
systemctl disabled firewalld
临时关闭selinux
setenforce 0
永久关闭
sed -i '/^SELINUX=/ s/disabled/enforcing/' /etc/selinux/config
bind域名服务程序的软件名为bind,对应的服务进程名为named。
systemctl start named
//开启服务 或者systemctl restart named
//重启服务
systemcttl enable named
//设为开机启动
systemctl status named
//查看服务状态
修改/etc/resolv.conf文件,即修改本机的dns解析文件,增加我们自己的dns服务器地址:vim /etc/resolv.conf
`
Generated by NetworkManager
nameserver 114.114.114.114
nameserver 127.0.0.1
`
设置好之后,保存退出。使用nslookup查看是否配置成功。可以看到使用的是本机IP作为DNS服务器。
配置DNS服务器
要想使局域网内其他的主机也能使用该DNS服务器作为本地DNS服务器,需要对该DNS服务程序进行配置.
/etc/named.conf:只有59行,在去除注释信息和空行之后,实际有效的参数仅有30行左右,这些参数用来定义bind服务程序的运行。
修改dns服务器里的named.conf配置,
1
2
3
4
5
6
7
8
9
10
11
12
13
options{
listen-on port 53 {any 或者 IP地址;};
#监听53端口,
directory
#区域数据文件默认存储位置
dump-file
#域名缓存数据库文件的位置
statistics-file
#状态统计文件的位置
memstatistics-file
#内存统计文件的位置
allow-query {IP网段;IP网段;};
#允许使用本DNS解析服务的网段[可用any]
1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# vim /etc/named.conf
10 options {
11 listen-on port 53 { **any;** }; //ipv4 监听53号端口,any表示服务器上的所有IP地址均可提供DNS域名解析服务。
12 listen-on-v6 port 53 { ::1; }; //ipv6 如果不使用可删除
13 directory "/var/named"; //区文件的默认位置
14 dump-file "/var/named/data/cache_dump.db"; //域缓存数据库文件的位置
15 statistics-file "/var/named/data/named_stats.txt";//状态统计文件的位置
16 memstatistics-file "/var/named/data/named_mem_stats.txt";//内存统计文件的位置
17 secroots-file "/var/named/data/named.secroots";
18 recursing-file "/var/named/data/named.recursing";
19 allow-query { **any;** }; //允许使用本DNS解析服务的网段,比如改为允许192.168.130.0/24网段使用,any允许所有