辅助我们进行命令的编写与程序的中断。
Tab按键
具有命令补全与文件补齐的功能。重点是可以避免我们打错命令或文件名。
Tab接在一串命令的第一个字段后面,则为命令补全;
Tab接在一串命令的第二个字段后面,则为文件补齐。
Ctrl -c 按键
中断目前程序的按键
Ctrl -d 按键
代表:键盘输入结束(End Of File, EOF 或 End Of Input)的意思;
也可以用来去掉exit的输入。例如你想直接离开命令行模式,可以直接按下ctrl + d 就能够直接离开(相当于输入exit)
command [-options] parameter1 parameter2 ...
命令 选项 参数(1) 参数(2)
命令之后的选项除了前面带减号[ - ]之外,某些特殊情况下,选项或参数前面也会带正号 [ + ]的情况。
> 将一段数据经过分析后,取出我们所想要的,或是经由分析关键词,取得我们所想要的那一行。
cut
将一段信息的某一段给它切出来,处理的信息是以行为单位;
cut主要的用途在于将同一行里面的数据进行分解,最常使用在分析一些数据或文字数据的时候。
将PATH变量取出,然后找出第五个路径:echo $PATH | cut -d ‘:’ -f 5
将export输出的信息,取得第12字符以后的所有字符:export | cut -c 12-
grep
grep是分析一行信息,若当中有我们所需要的信息,就将该行拿出来;
sort
可以根据不同的数据形式来排序;
/etc/passwd 内容是以:来分隔的,以第三栏来排序:cat /etc/passwd | sort -t ‘:’ -k 3
wc
可以计算输出信息的整体数据;
查询目前账号文件中有多少个账号:cat /etc/passwd | wc -l
uniq
这个命令用来将重复的行删除掉只显示一个;
tee会同时将数据流分送到文件与屏幕,而输出到屏幕的,其实是stdout;
ls -l /home | tee ~/homefile | more
dpkg是一个Debian的一个命令行工具,它可以用来安装、删除、构建和管理Debian的软件包。
1)安装软件
命令行:dpkg -i <.deb file name>
示例:dpkg -i avg71flm_r28-1_i386.deb
2)安装一个目录下面所有的软件包
命令行:dpkg -R
示例:dpkg -R /usr/local/src
3)释放软件包,但是不进行配置
命令行:dpkg –unpack package_file 如果和-R一起使用,参数可以是一个目录
示例:dpkg –unpack avg71flm_r28-1_i386.deb
4)重新配置和释放软件包
命令行:dpkg –configure package_file
如果和-a一起使用,将配置所有没有配置的软件包
示例:dpkg –configure avg71flm_r28-1_i386.deb
5)删除软件包(保留其配置信息)
命令行:dpkg -r
示例:dpkg -r avg71flm
6)替代软件包的信息
命令行:dpkg –update-avail
7)合并软件包信息
dpkg –merge-avail
8)从软件包里面读取软件的信息
命令行:dpkg -A package_file
9)删除一个包(包括配置信息)
命令行:dpkg -P
10)丢失所有的Uninstall的软件包信息
命令行:dpkg –forget-old-unavail
11)删除软件包的Avaliable信息
命令行:dpkg –clear-avail
12)查找只有部分安装的软件包信息
命令行:dpkg -C
13)比较同一个包的不同版本之间的差别
命令行:dpkg –compare-versions ver1 op ver2
14)显示帮助信息
命令行:dpkg –help
15)显示dpkg的Licence
命令行:dpkg –licence (or) dpkg –license
16)显示dpkg的版本号
命令行:dpkg –version
17)建立一个deb文件
命令行:dpkg -b direc×y [filename]
18)显示一个Deb文件的目录
命令行:dpkg -c filename
19)显示一个Deb的说明
命令行:dpkg -I filename [control-file]
20)搜索Deb包
命令行:dpkg -l package-name-pattern
示例:dpkg -I vim
21)显示所有已经安装的Deb包,同时显示版本号以及简短说明
命令行:dpkg -l
22)报告指定包的状态信息
命令行:dpkg -s package-name
示例:dpkg -s ssh
23)显示一个包安装到系统里面的文件目录信息
命令行:dpkg -L package-Name
示例:dpkg -L apache2
24)搜索指定包里面的文件(模糊查询)
命令行:dpkg -S filename-search-pattern
25)显示包的具体信息
命令行:dpkg -p package-name
示例:dpkg -p cacti
tr
tr可以用来删除一段信息当中的文字,或是进行文字信息的替换;
将last输出的信息中,所有的小写变成大写字符:last | tr ‘[a-z]’ ‘[A-Z]’
col
将tab键转换成对等的空格键:col -x
join
处理两个文件之间的数据(两个文件中,有相同数据的那一行,才将它加在一起)
paste
直接将两行贴在一起,且中间以tab键隔开;
expand
将tab案件转成空格键;
将一个大文件,依据文件大小或行数来划分,可以将大文件划分成为小文件;
要使用xargs的原因是,很多命令其实并不支持管道命令,因此可以通过xargs来提供该命令使用标准输入;
在管道命令当中,常常会使用到前一个命令的stdout作为这次的stdin,某些命令需要用到文件名来进行处理时,该stdin与stdout可以利用减号“-”来替代
修改文件的权限
chmod
-R:进行递归修改,亦即联通子目录下的所有文件、目录都修改。
添加用户
useradd -m 用户名 (当创建用户成功后,会自动的创建和用户同名的家目录)
useradd -d 指定目录 用户名 (给新创建的用户指定家目录,d:directory)
useradd -g 用户组 用户名 (增加用户时直接加上组,g:group)
修改密码
passwd 用户名
删除用户
userdel 用户名 (但保留其用户的家目录)
userdel -r 用户名 (删除用户以及用户的主目录)
查询用户信息指令
id 用户名
切换用户
su - 用户名
switch user
退出当前用户
exit/logout
查看当前用户
whoami/ who am i
新增组
groupadd 组名
删除组
groupdel 组名
修改用户的组
chgrp
-R :进行递归修改
用户和组相关文件
/etc/passwd 文件
用户(user)的配置文件,记录用户的各种信息
每行的含义: 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
1 : 2 : 3 : 4 : 5 : 6 : 7
/etc/shadow 文件
口令的配置文件
每行的含义(9列):登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group 文件
组(group)的配置文件,记录Linux包含的组的信息
每行的含义:组名:口令:组标识号:组内用户列表
查看文件的所有者:ls -al / ll
ls -l --time=ctime/atime: 读取状态时间和读取时间;ls默认显示出来的是该文件的mtime.
修改时间(modification time, mtime)
当该文件的内容数据变更时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限。
状态时间(status time, ctime)
当该文件的状态改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间
读取时间(access time, atime)
当该文件的内容被读取时,就会更新这个读取时间,举例来说,我们使用cat去读取时,就会更新该文件的atime
chmod:修改文件或者目录的权限
第一种方式:+、-、=变更权限(+是增加相应的权限,-是删除对应的权限)
u:所有者 g:所有者 o:其他人 a:所有人(u、g、o的总和)
第二种方式:通过数字变更权限
r=4 w=2 x=1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件/目录名
相当于:chmod 751 文件/目录名
chown:修改文件所有者
改变所有者:chown newowner 文件/目录名
改变所有者和所在组:chown newowner:newgroup 文件/目录名
-R:如果是目录,则使其下所有子文件或目录递归生效
chgrp:修改文件/目录所在组
chgrp newgroup 文件/目录名
. 代表此层目录
… 代表上一层目录
- 代表前一个工作目录
~ 代表目前使用者身份所在的家目录
~account 代表account这个使用者的家目录
pwd(print working directory):显示当前工作目录的绝对路径
ls(list):显示当前目录下的文件内容
tree:以树状显示目录结构
cd(change directory):切换目录
mkdir(make directory):创建文件夹
rmdir(remove directory):删除空文件夹
touch:创建空文件
cp(copy):拷贝文件到指定目录
cp [选项] source dest
-r :递归复制整个文件夹
强制覆盖不提示的方法:\cp
\cp -r /home/bbb /opt
rm(remove):移除文件或目录
mv(move):移动文件与目录或重命名
file: 观察文件类型
which命令时根据【PATH】这个环境变量所规范的路径,去查找执行文件的文件名
locate寻找的数据是由自己建立的数据库 /var/lib/mlocate/里面的数据所查找的。
更新locate数据库的方法:updatedb
updatedb:根据/etc/updatedb.conf的设置去查找系统硬盘内的文件,并更新/var/lib/mlocate内的数据库文件。
cat:查看文件内容
nl:显示的时候,同时输出行号
more:基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
| 操作 | 功能说明 |
|---|---|
| space | 向下翻一页 |
| Enter | 向下翻一行 |
| q | 立刻离开more |
| page up | 向上滚动一屏 |
| page down | 向下滚动一屏 |
| = | 输出当前行的行号 |
| :f | 输出文件名和当前行的行号 |
| 操作 | 功能说明 |
|---|---|
| space | 向下翻动一页 |
| Enter | 向下翻动一行 |
| [page up] | 向上翻动一页 |
| [page down] | 向下翻动一页 |
| Home | 回到行首 |
| End | 回到行尾 |
| /子串 | 向下搜寻[字幕]的功能;n:向下查找;N:向上查找; |
| ?子串 | 向上搜寻[字幕]的功能;n:向上查找;N:向下查找; |
| q | 离开less; |
echo:输出内容到控制台
echo $PATH(输出环境变量)
head:显示文件的开头部分内容,默认情况下head指令显示文件的钱10行内容
tail:输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容
od:以二进制的方式读取文件内容
重定向:>指令和>>指令
Shell会自动为我们打开和关闭0、1、2这三个文件描述符,我们不需要显式地打开或关闭它们。标准输入是命令的输入,默认指向键盘;标准输出是命令的输出,默认指向屏幕;标准错误是命令错误信息的输出,默认指向屏幕。
如果没有显式地进行重定向,命令通过文件描述符0从屏幕读取输入,通过文件描述符1和2将输出和错误信息输出到屏幕。但如果我们想从其他文件(再次强调,I/O设备在Unix/Linux中也是文件)读取输入或产生输出,就需要对0、1、2使用重定向了。
其语法如下:
command < filename 把标准输入重定向到filename文件中
command 0< filename 把标准输入重定向到filename文件中
command > filename 把标准输出重定向到filename文件中(覆盖)
command 1> fielname 把标准输出重定向到filename文件中(覆盖)
command >> filename 把标准输出重定向到filename文件中(追加)
command 1>> filename 把标准输出重定向到filename文件中(追加)
command 2> filename 把标准错误重定向到filename文件中(覆盖)
command 2>> filename 把标准输出重定向到filename文件中(追加)
command > filename 2>&1 把标准输出和标准错误一起重定向到filename文件中(覆盖)
command >> filename 2>&1 把标准输出和标准错误一起重定向到filename文件中(追加)
command < filename >filename2 把标准输入重定向到filename文件中,把标准输出重定向到filename2文件中
command 0< filename 1> filename2 把标准输入重定向到filename文件中,把标准输出重定向到filename2文件中
重定向的使用有如下规律:
1)标准输入0、输出1、错误2需要分别重定向,一个重定向只能改变它们中的一个。
2)标准输入0和标准输出1可以省略。(当其出现重定向符号左侧时)
3)文件描述符在重定向符号左侧时直接写即可,在右侧时前面加&。
4)文件描述符与重定向符号之间不能有空格!
>输出重定向和>>追加
1 :表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 :表示stderr标准错误
& :表示等同于的意思,2>&1,表示2的输出重定向等同于1
1 > /dev/null 2>&1 语句含义:
1 > /dev/null : 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向(等同于)标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
ln:软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径
ln -s [源文件或目录] [软链接名]
给原文件创建一个软链接
案例:在/home目录下创建一个软连接myroot,连接到/root目录
ln -s /root /home/myroot
history:查看已经执行过的历史命令
history n
执行文件路径的变量:$PATH
echo:显示、打印
PATH前面加$表示后面接的是变量
例题:让root在任何目录均可执行/root下面的ls,那么将/root加入PATH当中即可:
PATH="${PATH}:/root"
umask指定目前用户在建立文件或目录时候的权限默认值
umask的数字指的是该默认值需要减掉的权限。第一组是特殊选线用的。因为r、w、x分别是4、2、1,所以,当拿掉能写的权限,就是输入2;而如果要拿掉能读的权限,也就是4;拿掉读与写的权限,就是6;拿掉执行与写入的权限就是3了。
修改umask:/etc/bashrc 或 ~/.bashrc
umask
umask -S
chattr [+-=] [ASacdistu] 文件或目录名称
选项与参数:
+ : 增加某一个特殊参数,其他原本存在参数则不动;
- : 删除某一个特殊参数,其他原本存在参数则不动;
= : 直接设置参数,且仅有后面接的参数。
a : 当设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这属性。
i: 可以让一个文件【不能被删除、改名、设置链接也无法写入或新增数据】
touch attrtest
chattr +i attrtest(连root也没有办法对这个文件进行修改和删除)
chattr -i attrtest
rm attrtest
s与t这两个权限的意义与系统的账号及系统的进程管理较为相关
当s这个标志出现在文件拥有者的x权限上时,被称为SUID的特殊权限,基本上SUID有这样的限制与功能:
- SUID权限仅对二进制程序(binary program) 有效;
- 执行者对于该程序需要具有x的可执行权限;
- 本权限仅在执行该程序的过程中有效(run-time);
- 执行者将具有该程序拥有者(owner)的权限。
Set GID(SGID)
与SUID不同的是,SGID可以针对文件或目录来设置。
SGID对二进制程序有用;
程序执行者对于该程序来说,需具备x的权限;
执行者在执行的过程中将会获得该程序用户组的支持。
用户若对于此目录具有r与x的权限时,该用户能够进入此目录;
用户在此目录下的有效用户组(effective group)将会变成该目录的用户组;
用途:若用户在此目录下具有w的权限(可以新建文件),则用户所建立的新文件,该新文件的用户组与此目录的用户组相同。
Sticky Bit(SBIT)
这个Sticky Bit(SBIT)目前只针对目录有效,对于文件已经没有效果了,SBIT对于目录的作用是:
1. 当用户对于此目录具有x、w权限,即具有写入的权限;
2. 当用户在该目录下建立文件或目录时,仅有自己与root才有权利删除该文件。
换句话说:当甲这个用户对于A目录具有用户组或其他人的身份,并且拥有该目录w的权限,这表示甲用户对该目录内任何人建立的目录或文件均可进行删除、更名、移动等操作。不过,如果将A目录加上SBIT的权限选项时,则甲只能够针对自己建立的文件或目录进行删除、更名、移动等操作,而无法删除他人的文件。
SUID/SGID/SBIT权限设置
假设要将一个文件权限改为【-rwxr-xr-x】时,由于s在用户权限中,所以是SUID,因此,在原先的755之前还要加上4,也就是【chmod 4755 filename】来设置。
ls -l /lib/modules/$(uname -r) /kernel/fs
cat /proc/filesystems
linux操作系统的文件权限(rwx)与文件属性(拥有者、用户组、时间参数等),这两部分的数据分别存放在不同的区块,权限和属性放置到inode中,至于实际数据则放置到数据区块中。
这个区段可以描述每个区块群组的开始与结束的区块,以及说明每个区段(超级区块、对照表、inode对照表、数据区块)分别介于哪一个区块之间,这部分能够用dumpe2fs来观察。
ln [-sf] 源文件 目标文件
-s:如果不加任何参数就进行链接,那就是硬链接,至于-s就是符号链接;
新增一块磁盘时的操作:
仅列出/dev/vda设备内的所有数据的完整文件名:
lsblk -ip /dev/vda
UUID是全局唯一标识符(universally unique identifier),linux会将系统内所有的设备都给予一个独一无二的标识符,这个标识符就可以拿来作为挂载或是使用这个设备或文件系统。
文件系统挂载与卸载 - mount
date:显示当前日期
设置系统当前时间:
date -s "2022-08-18 11:30:00"
cal(calendar ) + 年份:查看日历
bc:计算器
find:将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端
find [搜索范围] [选项]
案例:按文件名,根据名称查找/home目录下的hello.txt文件
find /home -name hello.txt
| :选项 | :功能 |
|---|---|
| -name<查询方式> | 按照指定的文件名查找模式查找文件 |
| -user<用户名> | 查找属于指定用户名所有文件 |
| -size<文件大小> | 按照指定的文件大小查找文件 |
locate:可以快速完成定位文件路径。
locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。
locate指令无需遍历整个文件系统,查询速度较快。
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
which:查看某个指令在哪个目录下
whereis: 只找系统中某些特定目录下面的文件而已
grep指令和管道符号|
grep:过滤查找
管道符号|:表示将前一个命令的处理结果输出传递给后面的命令处理。
df(disk free): 列出文件系统的整体磁盘使用量;
du(disk usage): 查看文件系统的磁盘使用量(常用在查看目录所占磁盘空间);
lsblk(list block device): 列出系统上的所有磁盘列表;
tar [选项] xxx.tar.gz 打包的内容
案例:
压缩多个文件,将/home/pig.txt 和 /home/cat.txt 压缩成 pc.tar.gz
tar -zcvf pa.tar.gz /home/pig.txt /home/cat.txt
将pc.tar.gz 解压到当前目录
tar -zxvf pc.tar.gz
| :选项 | :功能 |
|---|---|
| -c | 产生.tar打包文件 |
| -v | 显示详细信息 |
| -f | 指定压缩后的文件名 |
| -z | 打包同时压缩 |
| -x | 解压.tar文件 |
/bin
系统有很多存放执行文件的目录;
/boot
主要放置启动会使用到的文件,包括Linux内核文件以及启动选项与启动所需配置文件等。
/dev(device)
在Linux系统上,任何设备与接口设备都是以文件的形式存在于这个目录中。只要通过读写这个目录下面的某个文件,就等于读写某个设备。
/etc
系统主要的配置文件几乎都放置在这个目录内。
/lib
系统的函数库
/media
放置可删除的设备,包括软盘、光盘、DVD等设备都暂时挂载于此。
/mnt(mount 攀登)
挂载某些额外的设备
/opt
给第三方辅助软件放置的目录。
/run
放置系统启动后所产生的各项信息
/sbin
放置启动过程所需要的,里面包括启动、修复、还原系统所需要的命令。
/srv
srv可以视为service的缩写,是一些网络服务启动之后,这些服务所需要使用的数据目录。
/tmp
这是让一般用户或是正在执行的程序暂时放置文件的地方。
/usr
UNIX Software Resource的缩写,UNIX操作系统软件资源所放置的目录
/usr/bin/
所有一般用户能够使用的命令都放在这里。使用链接文件的方式将/bin链接至此,即/usr/bin与/bin一模一样。
/usr/lib/
与/lib功能相同,所以/lib就是链接到此目录中的。
/usr/local/
系统管理员在本机安装自己下载的软件。
/usr/sbin/
/sbin链接到此目录中
/usr/share/
主要放置只读的数据文件,当然也包括共享文件。
/usr/games/
与游戏比较相关的数据放置处
/usr/include/
c/c++等程序语言的头文件(head)与包含文件(include)放置处,当我们以Tarball(*.tar.gz)方式安装某些程序时,会使用到里面的许多文件。
/usr/libexec
放置某些不被一般用户常用的执行文件或脚本等。
/usr/lib/
/lib链接到此目录
/usr/src/
一般源代码建议放置到这里,src有source的意思。至于内核源代码则建议放置到/usr/src/Linux/目录下
/var(variable)
主要放置变动性的数据,包括缓存(cache)、日志文件(log file)以及某些软件运行所产生的文件,包括程序文件(lock file、run file),例如MySQL数据库的文件等。
/var/cache/
应用程序本身运行过程中会产生的一些缓存。
/var/lib/
程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。
/var/lock/
某些设备或是文件资源一次只能被一个应用程序所使用,如果同时又两个程序使用该设备时,就可能产生一些错误的状况,因此就得要该设备上锁,以确保该设备只会给单一软件使用。
/var/log/
这是日志文件放置的目录。
/var/mail/
放置个人电子邮箱的目录
/var/run/
某些程序或是服务启动后,会将他们的PID放置在这个目录下。
/var/spool
这个目录通常放置一些队列数据,所谓的队列就是排队等待其他程序使用的数据,这些数据被使用后通常都会被删除。
/home
系统默认的洪湖家目录
/root
系统管理员的家目录
/lost+found
这个目录是使用标准的ext2, ext3, ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置到这个目录下。
/proc
这个目录本身是一个虚拟文件系统,它放置的数据都是在内存当中,例如系统内核、进程信息、外接设备的状态及网络转台等。本身不占据任何硬盘空间。
/sys
也是一个虚拟的文件系统,主要也是记录内核与系统硬件信息相关的内容。不占据硬盘空间。
执行日志文件的轮询(logrotate)
日志文件分析 logwatch 的任务
建立 locate 的数据库
文件名数据库放置位置:/var/lib/mlocate
manpage查询数据库的建立
RPM软件日志文件的建立
删除缓存
与网络服务有关的分析操作:如apache
/etc/at.allow 与 /etc/at.deny
at [-mldv] TIME
1. 再过五分钟后,将/root/.bashrc发给root自己:
at now + 5 minutes
使用at时会进入一个at shell的环境来让用户执行任务命令,输入ctrl + d就会出现的字样,代表结束。
建议使用绝对路径来执行你的命令,避免出问题。
at的执行与终端环境无关,而所有标准输出、标准错误输出都会发送到执行者的mailbox中。
2. 由于机房预计于2022/11/11停电,我想要在2022/11/11 23:00关机:
at 23:00 2022/11/11
at> /bin/sync
at> /bin/sync
at> /sbin/shutdown -h now
at>
3. 五分钟后在终端输出hello:
at now + 5 minutes
>at echo "hello" > /dev/tty1
>at
at是个可以处理仅执行一次就结束的命令,要执行at,必须有atd这个服务。
使用at这个命令来产生所要运行的任务,并将这个任务一文本文件的方式写入/var/spool/at/目录中,该任务便能等待atd这个服务的使用与执行了。
重新启动atd服务:systemctl restart atd
让atd服务开机就自动启动:systemctl enable atd
查看atd目前的状态:systemctl status atd
为了安全,可以利用/etc/at.allow与/etc/at.deny这两个文件来实现对at的使用限制,at的工作情况如下:
实际运行单一计划任务
at [-mldv] TIME
再过五分钟:at now + 5 minutes
脱机继续执行的任务:
由于at计划任务的使用,系统会将该项at任务独立出你的bash环境,直接交给系统的atd程序来接管。因此,当你执行了at的任务之后就可以立刻脱机了,剩下的工作就完全交给Linux管理。
at常用命令:
crontab这个命令所设置的任务将会循环地一直执行下去,可循环的时间为分钟、小时、每周、每月或每年等。
循环执行的计划任务是由cron(crond)这个系统服务来空值的;
crontab是Linux提供用户空值计划任务的命令;
crontab的执行可以通过:命令,或者编辑/etc/crontab;
让crontab可以生效的服务是crond。
为了避免安全性问题,可以限制使用crontab的账号:
/etc/cron.allow
将可以使用crontab的账号写入其中,不在这个文件内的用户则不可使用crontab
/etc/cron.deny
将不可以使用crontab的账号写入其中,未记录到这个文件当中的用户,就可以使用crontab
crontab的语法
crontab [-u username] [-l | -e | -r]
-u : 只有root才能执行这个任务,亦即帮其他使用者建立/删除crontab计划任务;
-e : 编辑crontab的任务内容;
-l : 查看crontab的任务内容;
-r : 删除所有的crontab的任务内容,若仅要删除一项,请用-e去编辑。
重新启动crond服务:systemctl restart crond
# 用charles的身份在每天的12:00发信给自己
0 12 * * * mail -s "at 12:00" charles < /home/charles/.bashrc
#分 时 日 月 周 |<=====================命令串====================>|
| 代表的意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 命令 |
|---|---|---|---|---|---|---|
| 数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 需要执行的命令 |
| 特殊字符 | 代表意义 |
|---|---|
| * | 代表任何时刻都接受的意思 |
| , | 代表分隔时段的意思 |
| - | 代表一段时间范围内 |
| /n | 那个n代表数字,亦即是【每隔n单位间隔】的意思 |
系统的配置文件:/etc/crontab 、/etc/cron.d/*
- 可以编辑/etc/crontab这个文件来执行【系统的例行性任务】;设置分为七栏,【分、时、日、月、周、执行者、命令】为其设置根据;
- crontab -e这个crontab其实是/usr/bin/crontab这个执行文件;分为六栏,【分、时、日、月、周、命令】为其设置根据;
- cron这个服务的最低检测限制是分钟,所以cron会每分钟去读取一次/etc/crontab与/var/spool/cron
crond服务读取配置文件的位置
跟系统的运行有关系的两个配置文件是/etc/crontab文件以及/etc/cron.d/*目录内的文件;
跟用户自己的任务有关系的配置文件,就是放在/var/spool/cron里面的文件;
crontab的基本应用
anacron是一个程序并非一个服务,配置文件放置在/etc/cron.hourly
anacron存在的目的是,用于处理非24小时运行的Linux系统所执行的crontab,以及因为某些原因导致的超过时间而没有被执行的任务。
其实anacron也是每小时被crond执行一次,然后anacron再去检测相关的计划任务有没有被执行,如果有超过期限的任务,就执行该任务,执行完毕或无须执行任何任务时,anacron就停止。
由于anacron默认会以一天、七天、一个月为期去检测系统未执行的crontab任务,因此对于某些特殊的使用环境非常有帮助。
anacron是怎么知道我们的系统啥时候关机的呢?这就要使用anacron读取的时间记录文件(timestamps)了。anacron会去分析现在的时间与时间记录文件所记载的上次执行anacron的时间,两者比较后发现有差异,那就是在某些时刻没有执行crontab,此时anacron就会开始执行未执行的crontab任务了。
anacron [-sfn] [-sfn] [job] …
anacron的配置文件/etc/anacrontab
执行日志文件的轮询(logrotate)
logrotate的任务:将日志文件数据移动,让旧的数据与新的数据分别存放,让系统更有效地记录登陆信息,提高文件的读写性能。
日志文件分析logwatch的任务
如果系统发生了软件问题、硬件错误、信息安全问题等,绝大部分的错误信息都会被记录到日志文件中。
logwatch程序会主动分析登陆信息。
建立locate的数据库
文件名数据库放置在/var/lib/mlocate中;
系统会主动地执行updatedb来更新数据库;
manpage查询数据库的建立
要使用manpage数据库,就要执行mandb才能建立好;
RPM软件日志文件的建立
RPM数据库,将文件名作排序的记录
删除缓存
系统通过计划任务执行名为tmpwatch的命令来删除缓存;
与网络服务有关的分析操作
如果你安装了类似网站服务器的软件,那么你的Linux系统通常就会主动地分析该软件的日志文件。
ifconfig:查看网络配置
ping:测试主机之间网络连通性
lsof(list open files)是一个列出当前系统打开文件的工具
网络环境配置
第一种方法(自动获取)
登录后,通过界面来设置自动获取ip,linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样。
第二种方法(指定ip)
直接修改配置文件来指定IP,并可以连接到外网
编辑:vi /etc/sysconfig/network-scripts/ifcig-ens33
设置主机名
设置hosts映射
hosts是什么?用来记录IP和Hostname(主机名)的映射关系
编辑:/etc/hosts
DNS
Domain Name System的缩写,域名系统
是互联网上作为域名和IP地址相互映射的一个分布式数据库
在linux 系统上面有多种不同的账号,每种账号都有其特殊的权限,只有一个账户具有至高无上的权力,那就是root(系统管理员)。除了root之外,其他人都必须要收一些限制,而每个人进入linux的环境设置都可以随着每个人的喜好来设置(~/.bashrc),每个人登录后获取的shell的PID不同
ALT+F1~F7来切换不同的终端界面,而且每个终端界面的登陆者还可以不同。
当我们登录系统后,会获取一个bash的shell,然后我们用这个bash提供的接口去执行另一个命令,那些另外执行的命令也会被触发称为PID,那个后来执行命令所产生的PID就是子进程,而在我们原本的bash环境下,就被称为父进程。
进程彼此之间是有相关性的。
某个进程的父进程通过Parent PID(PPID)来判断。
linux的程序调用通常称为 fork-and-exec 的流程,进程都会借由父进程以复制(fork)的方式产生一个一模一样的子进程,然后被复制出来的子进程再以exec的方式来执行实际要执行的进程,最终就称为一个子进程。
常驻在内存当中的进程通常都是负责一些系统所提供的功能以服务用户的各项任务,因此这些常驻进程就会被我们称为:服务(daemon)。
系统本身所需要的服务:如crond、atd 以及 rsyslogd 等
负责网络连接的服务:apache、named、postfix、vsftpd 等。网络服务被执行后,会启动一个可以负责网络监听的端口(port)以提供外部客户端(client)的连接请求。
ps -l:只能看自己bash的进程;
ps aux:查看系统所有的进程;
ps -lA:也是能够查看所有系统的进程;
ps axjf:连同部分进程树状态
选项与参数:
-A:所有的进程均显示出来,与-e具有相同的效果;
-a:不显示与终端有关的所有进程;
-u:有效使用者(effective user)相关的进程;
x:通常与a这个参数一起是个,可列出较完整信息
输出格式规划:
l:较长、较详细的将该PID的信息列出;
j:任务的格式(jobs format);
-f:做一个更为完整的输出
造成僵尸进程的原因在于该进程应该已经执行完毕,或是应该要终止了,但是该进程的父进程却无法完整地将该进程结束掉,而造成该进程一直存在内存当中;如果你发现在某个进程的CMD后面接上了
时,就代表该进程是僵尸进程。
相比于ps是选取一个时间点的进程状态,top则可以持续监测进程运行的状态。
top [-d数字] | top [-bnp]
选项与参数:
-d:后面可以接秒数,就是整个进程界面更新的秒数,默认是5秒;
-b:以批量的方式执行top,还有更多的参数可以使用,通常会搭配数据流重定向来将批量的结果输出为文件;
-n:与-b搭配,意义是,需要执行几次top的输出结果;
-p:指定某些个PID来执行查看监测;
在top执行过程当中可以使用的按键命令:
?:显示在top当中可以输入的按键命令;
p:以CPU的使用排序显示;
M:以Memory的使用排序显示;
N:以PID来排序;
T:由该进程使用的cpu时间累积(TIME+)排序;
k:给予某个PID一个信号(signal);
r:给予某个PID重新制定一个nice值;
q:退出top的按键
top上面的界面为整个系统的资源使用状态:
第一行(top...):这一行显示的信息分别为:
1.目前的时间;
2.开机到目前为止所经过的时间;
3.已经登录系统的用户人数;
4.系统在1、5、15分钟的平均任务负载
第二行(Tasks...):显示的是目前进程的总量与个别进程在什么状态(running,sleeping/stopped,zombie)
第三行(%CPU...):显示的是CPU的整体负载,每个项目可使用?(问好)查看。
第四行与第五行:表示目前的物理内存与虚拟内存(Mem/Swap)的使用情况。
第六行:这个是在top进程当中输入命令时,显示状态的地方。
top下半部分的画面,则是每个进程使用的资源情况:
1.PID:每个进程的ID;
2.USER:该进程所属的用户;
3.PR:Priority的间歇,与Priority有关,也是越小则越早被执行;
4.NI:Nice的简写,与Priority有关,也是越小则越早被执行;
5.%CPU:CPU的使用效率;
6.%MEM:内存的使用效率;
7.TIME+:CPU使用时间的累加
top默认使用CPU使用率(%CPU)作为排序的依据。如果想要使用内存使用率排序,则可以按下【M】,若要恢复则按下【P】即可。按下【q】退出top
pstree [-A|U] [-up]
选项与参数:
-A:各进程树之间的连接以ASCII字符来连接;
-U:各进程树之间的链接以Unicode的字符来连接,在某些终端界面下可能会有错误。
-P:并同时列出每个进程的PID;
-u:并同时列出每个进程的所属账号名称
所有的进程都是依附在systemd这个进程下面的。这个进程的PID是一号,因为它是由Linux内核所主动调用的第一个进程,所以PID就是一号了。
执行任务管理的操作中,其实每个任务都是目前bash的子进程,即彼此之间是有相关性的,我们无法用任务管理的方式由tty1的环境去管理tty2的bash
执行bash的任务管理要注意的限制:
直接将命令丢到后台中【执行】的 &
将【目前】的任务丢到后台中【暂停】:[ctrl]-z
查看目前的后台任务状态:jobs
jobs [-lrs]
选项与参数:
-l :除了列出job number与命令串之外,同时列出PID的号码;
-r :仅列出正在后台run的任务;
-s :仅列出正在后台当中暂停(stop)的任务
将后台任务拿到前台处理:fg(foreground)
fg %jobnumber
fg: 默认取出那个+的任务
让任务在后台下的状态变成运行中:bg
bg %jobnumber
管理后台当中的任务:kill
kill -signal %jobnumber
signal :代表给予后面接的那个任务什么样的指示
-l(L的小写):重新读取一次参数的配置文件(类似reload);
-2:代表由键盘输入ctrl-c同样的操作;
-9:立刻强制删除一个任务;
-15:以正常的进程方式终止一项任务,与-9是不一样的
nohup:可以在退机或注销系统后,该能够让任务继续执行
nohup [命令或参数] :在终端前台中任务
nohup [命令或参数] &:在终端后台中任务
Linux给予进程一个所谓的【优先级(priority, PRI)】,这个PRI值越低代表越优先的意思。不过这个PRI值是由内核动态调整的,用户无法直接调整PRI值。如果要调整进程的优先级,就要通过nice(NI)值。
- nice值可调整的范围-20 ~ 19;
- root可随意调整自己或他人进程的nice值,且范围为-20 ~ 19;
- 一般用户仅可调整自己进程的nice值,且范围仅为0-19(避免一般用户抢占系统资源);
- 一般用户仅可将nice值越调越高
如何调整该进程的nice值?
一开始执行进程就立即给予一个特定的nice值:用nice命令;
nice [-n 数字] command
-n:后面接一个数值,数值的范围-20 - 19;
调整某个已经存在的PID的nice值:用renice命令;
renice [number] PID
free:查看内存使用情况
# 显示目前系统的内存容量
free -m
uname:查看系统与内核相关信息
uptime:查看系统启动时间与任务负载
netstat:追踪网络或socket文件
netstat 的结果显示了两个部分,分别是网络的链接,以及linux上面的socket进程相关部分
一、因特网链接情况的部分:
Proto:网络的封包协议,主要分为TCP与UDP封包;
Recv-Q:非由用户进程链接到此socket的复制的总Bytes数;
Send-Q:非由远程主机传送过来的acknowledged总Byte数;
Local Address:本地端的IP:port情况;
Foreign Address:远程主机的IP:port情况;
State:链接状态,主要有建立(ESTABLISED)及监听(LISTEN);
二、socket文件的输出字段:
Proto:一般就是unix;
RefCnt:连接到此socker的进程数量;
Flags:连接的标识;
Type:socket存取的类型。主要有确认连接的STREAM与不需要确认的DGRAM两种;
State:若为CONNECTED则表示多个进程之间已经建立连接;
Path:连接到此socket的相关进程的路径,或是相关数据输出的路径;
dmesg:分析内核产生的信息
vmstat:检测系统资源变化
进程是如何互相管理的?是通过给予该进程一个信号(signal)去告知该进程你想要让它做什么。kill -l
| 代号 | 名称 | 内容 |
|---|---|---|
| 1 | SIGHUP | 启动被终止的进程,可让该PID重新读取自己的配置文件,类似重新启动。 |
| 2 | SIGINT | 相当于用键盘输入ctrl+c来终端一个进程的运行 |
| 9 | SIGKILL | 代表强制终端一个进程的执行,如果该进程执行到一半,那么尚未完成的部分可能会有【半成品】产生,类似vim会有.filename.swp保留下来 |
| 15 | SIGTERM | 以正常的方式结束进程来终止该进程。 |
| 19 | SIGSTOP | 相当于用键盘输入ctrl+z来暂停一个进程的运行。 |
kill -signal PID
kill可以帮我们将这个信号传送给某个任务(%number)或是某个PID(直接输入数字)
执行任务管理的操作中,其实每个任务都是目前bash的子进程,即彼此之间是有相关性的,我们无法用任务管理的方式有tty1的环境去管理tty2的bash。
可以出现提示字符让你操作的环境称为前台,至于其他任务就可以放入后台去暂停或运行;
放入后台的任务想要运行时,它必须不能够与用户进行交互,而且放入后台的任务不可以使用ctrl+c来终止;
进程都是在内存当中,而内存当中的数据又都是写入到/proc/*这个目录下。
基本上,目前主机上面的各个进程的PID都以目录的形式存在于/proc当中。
| 文件名 | 文件内容 |
|---|---|
| /proc/cmdline | 加载内核时所执行的相关命令与参数,查看此文件,可了解命令是如何启动的 |
| /proc/cpuinfo | 本机的CPU的相关信息,包含频率、类型与功能等 |
| /proc/devices | 这个文件记录了系统各个设备的主要设备代号,与mknod有关 |
| /proc/filesystems | 目前系统已经加载的文件系统 |
| /proc/interrupts | 目前系统上面的IRQ分配状态 |
| /proc/ioports | 目前系统上面各个设备所配置的I/O地址 |
| /proc/kcore | 内存的大小 |
| /proc/loadavg | |
| /proc/meminfo | 使用free列出的内存信息,在这里也能够查看到 |
| /proc/modules | 目前我们的linux已经加载的模块列表,也可以想成是驱动程序 |
| /proc/swaps | 到底系统挂载入的内存在哪里?使用的硬盘分区就记录再次 |
| /proc/partitions | 使用fdisk -l会出现目前所有的硬盘分区吧?在这个文件当中也有记录 |
| /proc/uptime | 就是用uptime的时候,会出现的信息 |
| /proc/version | 内核的版本,就是用uname -a 显示的内容 |
| /proc/bus* | 一些总线的设备,还有USB的设备也记录在此 |
服务(service)本质就是进程,但是是运行在后台,通常都会监听某个端口,等待其他程序的请求,又称为守护进程。
systemctl/service 服务名 [start|stop|restart|status]
service指令管理的服务在/etc/init.d查看
服务的运行级别(runlevel):7种(主要3和5)
开机的流程说明
开机 -> BIOS -> /boot -> systemd进程1 -> 运行级别 -> 运行级对应的服务
chkconfig:给服务的各个运行级别设置自启动/关闭
systemctl 管理指令
systemctl [start | stop | restart | status] 服务名
systemctl 指令管理的服务在 /usr/lib/systemd/system 查看
systemctl设置服务的自启动状态
firewall 指令
netstat [选项]
-an:按一定顺序排列输出
-p:显示哪个进程在调用
案例:请查看服务名为sshd的服务的信息
netstat -anp | grep sshd
netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况
netstat -tunlp | grep 端口号
netstat -ntlp //查看当前所有tcp端口
netstat -ntulp | grep 80 //查看所有80端口使用情况
rpm用于互联网下载包的打包及安装工具;
Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
列出所有可更新的软件清单命令:yum check-update
更新所有软件命令:yum update
仅安装指定的软件命令:yum install
仅更新指定的软件命令:yum update
列出所有可安裝的软件清单命令:yum list
删除软件包命令:yum remove
查找软件包命令:yum search
清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
http://mirrors.163.com/.help/CentOS7-Base-163.repo
mv CentOS6-Base-163.repo CentOS-Base.repo
yum clean all
yum makecache
apt 是 Advanced Packaging Tool的简称,是一款安装包管理工具。在Ubuntu下,我们可以使用apt命令进行软件包的安装、删除、清理等。
备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
更新源
sudo vim /etc/apt/sources.list
粘贴内容
清华
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse
阿里源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
让更新源生效
sudo apt-get update
单独一次使用
sudo apt-get update 更新源
sudo apt-get upgrade 更新已安装的包
SSH(secure Shell):建立在应用层和传输层基础上的安全协议。
SSH服务需要安装相应的服务器和客户端。
sudo apt install net-tools:查看Ubuntu是否安装SSHD服务
sudo apt-get install openssh-server:安装SSH服务器和客户端
service sshd restart:启动sshd服务,会监听端口22
在windows使用XShell7和XFTP7登录Ubuntu
从一台linux系统远程登录另一台linux系统
ssh 用户名@IP
例如:ssh hspedu@192.168.0.1
使用ssh访问出现错误时,可查看是否有文件 ~/.ssh/known_ssh,尝试删除该文件解决。
登出:exit 或者 logout
| :日志文件 | :说明 |
|---|---|
| /var/log/boot.log | 系统启动日志 |
| /var/log/cron | 记录与系统定时任务相关的日志 |
| /var/log/cups | 记录打印信息的日志 |
| /var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
| /var/log/btmp | 记录错误登录的日志。这个文件是二进制文件,不能直接使用vi查看,而要使用lastb命令查看 |
| /var/log/lasllog | 记录系统中所有用户最后一次的登录时间的日志。这个文件也是二进制文件,要使用lastlog命令查看 |
| /var/log/maillog | 记录邮件信息的日志 |
| /var/log/message | 记录系统重要信息的日志,这个日志文件中会记录linux系统的绝大多数信息。如果系统出现问题,首先要检查的应该就是这个日志文件 |
| /var/log/secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录,比如系统的登录,ssh的登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中。 |
| /var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。是二进制文件,要使用lastlog查看。 |
| /var/log/ulmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。这个文件不能用vi查看,而要使用w/who/users等命令查看 |
查询linux中的rsyslogd服务是否启动
ps aux | grep "rsyslog" | grep -v "grep"
查询rsyslogd服务的自启动状态
systemctl list-unit-files | grep rsyslog
配置文件:/etc/rsyslog.conf
日志类型:
| : | : |
|---|---|
日志级别:
| : | : |
|---|---|
日志轮替
logrotate 配置文件
[[上下左右]按键移动光标、删除字符、删除整行、复制、粘贴等
i 进入编辑模式;
Esc 退出编辑模式或命令行模式
[: / ?] - 从一般模式进入命令行模式;
查找数据、读取、保存、批量替换字符、退出vi、显示行号等操作
| 环境变量 | 描述 |
|---|---|
| http_proxy | 为http变量设置代理;默认不填开头以http协议传输 |
| https_proxy | 为https变量设置代理 |
| ftp_proxy | 为ftp变量设置代理 |
| all_proxy | 全部变量设置代理,设置了这个时候上面的不用设置 |
| no_proxy | 无需代理的主机或域名;可以使用通配符;多个时使用,号分隔。 |
export proxy="http://192.168.22.2:1080"
export http_proxy=$proxy
export https_proxy=$proxy
export ftp_proxy=$proxy
export no_proxy="localhost, 127.0.0.1, ::1"
当我们树立在终端(tty)上面登录后,linux就会根据 /etc/passwd 文件的设置给我们一个shell(默认是bash),然后我们就可以根据下面的命令执行方式来操作shell
history:历史命令
~./bash_history
命令与文件补全功能:Tab按键
命令别名设置功能:(alias)
alias lm='ls -al'
任务管理、前台、后台控制:(job control、foreground、background)
程序化脚本:(shell scripts)
通配符:(Wildcard)
想要直到/usr/bin下面有多少X为开头的文件:
ls -l /usr/bin/x*
查询命令是否为Bash shell的内置命令:type
需要在变量名称前面加上$ 或是以${变量}:
echo $PATH
echo $MAIL
变量的设置规则
变量与变量内容以一个等号【=】来连接,如myname=VBird
等号两边不能直接接空格
变量名称只能是英文字母与数字,但是开头字符不能是数字
变量内容若有空格可使用双引号【“”】或单引号【‘’】将变量内容结合起来
双引号内的特殊字符如$等,可以保有原本的特性;
var="lang is $LANG" 则echo $var 可得lang is zh_CN.UTF-8
单引号内的特殊字符则仅为一般字符(纯文本);
var="lang is $LANG" 则echo $var 可得lang is $LANG
可用转义符【/】将特殊符号(如 [Enter]、$、\、空格、`等)变成一般字符;
在一串命令的执行中,还需要借由其他额外的命令所提供的信息时,可以使用返单号(``)或【$(命令)】;
若该变量为扩增变量内容时,则可用"$变量名称" 或 ${变量}累加内容:
PATH="$PATH":/home/bin 或 PATH=${PATH}:/home/bin
cd /lib/modules/$(uname -r)/kernel/
若该变量需要在其他子程序执行,则需要以export来使变量变成环境变量:export PATH
取消变量的方法:unset 变量名称
env:观察环境变量与常见环境变量说明;
HOME
代表用户的根目录。使用cd ~返回根目录
SHELL
告知我们目前这个环境使用的SHELL是哪个程序
HISTSIZE
与历史命令有关,即曾经执行过的命令可以被系统记录下来,而记录的条数则是由这个值来设置。
当我们使用mail这个命令在收信时,系统会去读取的邮箱文件(mailbox)
PATH
执行文件查找的路径,目录与目录中间以冒号(:)分隔,由于文件的查找是依序由PATH的变量内的目录来查询,所以,目录的顺序也是重要的。
LANG
语序数据
RANDOM(/dev/random)
随机数的变量。
set:观察所有变量(含环境变量与自定义变量)
export:自定义变量转成环境变量
将自定义变量转成环境变量:
export 变量名称
列出所有的环境变量:export
declare、typeset:声明变量的类型
1. 让变量sum进行100+200+300的求和结果:
declare -i sum=100+200+300
2. 将sum变成环境变量:
declare -x sum
3. 让sum变成只读属性,不可修改:
declare -r sum
4. 让sum变成非环境变量的自定义变量:
declare +x sum (将-变成+可以进行【取消】操作)
locale:影响显示结果的语系变量
read:读取来自键盘输入的变量
数组(array)变量类型
var[index]=content
我们的bash是可以限制用户的某些系统资源的,包括可以开启的文件数量,可以使用的CPU时间,可以使用的内存总量等。
列出你目前身份的所有限制数据数值:
ulimit -a
限制使用者仅能建立10MBytes以下的容量的文件:
ulimit -f 10240
命令别名设置:alias、unalias
1. 列出目前拥有的命令别名:
alias
2. 设置命令别名:
alias rm='rm -i'
3. 删除命令别名:
unalias lm
历史命令:history(~/.bash_history)
查看命令查找顺序:type -a 命令名称
| 标识符 | 含义 |
|---|---|
| \d | 本地端时间的日期 |
| \l | 显示第几个终端界面 |
| \m | 显示硬件的等级 |
| \n | 显示主机的网络名称 |
| \O | 显示domain name |
| \r | 操作系统的版本(相当于uname -r) |
| \t | 显示本地端时间的时间 |
| \S | 操作系统的名称 |
| \v | 操作系统的版本 |
login 与 non-login shell
/etc/profile(login shell 才会读)
/etc/profile.d/*.sh
/etc/locale.conf
/usr/share/bash-completion/completions/*
~/.bash_profile(login shell 才会读)
source:读入环境配置文件的命令
将家目录的~/.bashrc的设置读入目前的bash环境中:
source ~/.bashrc
或 . ~/.bashrc
~/.bashrc(non-login shell 会读)
/etc/man_db.conf
~/.bash_history
~/.bash_logout
| 符号 | 意义 |
|---|---|
| * | 代表【0个到无穷多个】任意字符 |
| ? | 代表【一定有一个】任意字符 |
| [] | 代表【一定有一个在括号内】的字符(非任意字符) |
| [ - ] | 若有减号在中括号内时,代表【在编码顺序内的所有字符】。例如[0-9] |
| [^ ] | 若中括号内的第一个字符为指数符号(^),那表示【反向选择】 |
| # | 注释符号 |
| \ | 转义符 |
| | | 管道(pipe):分隔两个管道命令的符号 |
| ; | 连续命令执行分隔符:连续性命令的界定 |
| ~ | 用户的家目录 |
| $ | 使用变量前导符:亦即是变量之前需要加的变量替换值 |
| & | 任务管理(job control):将命令变成后台任务 |
| ! | 逻辑运算意义上的【非】not 的意思 |
| / | 目录符号:路径分隔的符号 |
| >、>> | 数据流重定向:输出定向,分别是【替换】与【累加】 |
| <、<< | 数据流重定向:输入定向 |
| ‘’ | 单引号,不具有变量替换的功能($变为纯文本) |
| “” | 双引号,具有变量替换的功能($ 可保留相关功能) |
| `` | 两个【``】中间为可以先执行的命令,亦可使用$( ) |
| ( ) | 在中间为子shell的起始与结束 |
| {} | 在中间为命令区块的组合 |
当我们树立在终端(tty)上面登录后,linux就会根据 /etc/passwd 文件的设置给我们一个shell(默认是bash),然后我们就可以根据下面的命令执行方式来操作shell
history:历史命令
~./bash_history
命令与文件补全功能:Tab按键
命令别名设置功能:(alias)
alias lm='ls -al'
任务管理、前台、后台控制:(job control、foreground、background)
程序化脚本:(shell scripts)
通配符:(Wildcard)
想要直到/usr/bin下面有多少X为开头的文件:
ls -l /usr/bin/x*
查询命令是否为Bash shell的内置命令:type
last:列出目前与过去登入系统的用户相关信息
id username:将每个账号内容显示出来
需要在变量名称前面加上$ 或是以${变量}:
echo $PATH
echo $MAIL
变量的设置规则
变量与变量内容以一个等号【=】来连接,如myname=VBird
等号两边不能直接接空格
变量名称只能是英文字母与数字,但是开头字符不能是数字
变量内容若有空格可使用双引号【“”】或单引号【‘’】将变量内容结合起来
双引号内的特殊字符如$等,可以保有原本的特性;
var="lang is $LANG" 则echo $var 可得lang is zh_CN.UTF-8
单引号内的特殊字符则仅为一般字符(纯文本);
var="lang is $LANG" 则echo $var 可得lang is $LANG
可用转义符【/】将特殊符号(如 [Enter]、$、\、空格、`等)变成一般字符;
在一串命令的执行中,还需要借由其他额外的命令所提供的信息时,可以使用返单号(``)或【$(命令)】;
若该变量为扩增变量内容时,则可用"$变量名称" 或 ${变量}累加内容:
PATH="$PATH":/home/bin 或 PATH=${PATH}:/home/bin
cd /lib/modules/$(uname -r)/kernel/
若该变量需要在其他子程序执行,则需要以export来使变量变成环境变量:export PATH
取消变量的方法:unset 变量名称
env:观察环境变量与常见环境变量说明;
HOME
代表用户的根目录。使用cd ~返回根目录
SHELL
告知我们目前这个环境使用的SHELL是哪个程序
HISTSIZE
与历史命令有关,即曾经执行过的命令可以被系统记录下来,而记录的条数则是由这个值来设置。
当我们使用mail这个命令在收信时,系统会去读取的邮箱文件(mailbox)
PATH
执行文件查找的路径,目录与目录中间以冒号(:)分隔,由于文件的查找是依序由PATH的变量内的目录来查询,所以,目录的顺序也是重要的。
LANG
语序数据
RANDOM(/dev/random)
随机数的变量。
set:观察所有变量(含环境变量与自定义变量)
export:自定义变量转成环境变量
将自定义变量转成环境变量:
export 变量名称
列出所有的环境变量:export
declare、typeset:声明变量的类型
1. 让变量sum进行100+200+300的求和结果:
declare -i sum=100+200+300
2. 将sum变成环境变量:
declare -x sum
3. 让sum变成只读属性,不可修改:
declare -r sum
4. 让sum变成非环境变量的自定义变量:
declare +x sum (将-变成+可以进行【取消】操作)
locale:影响显示结果的语系变量
read:读取来自键盘输入的变量
数组(array)变量类型
var[index]=content
我们的bash是可以限制用户的某些系统资源的,包括可以开启的文件数量,可以使用的CPU时间,可以使用的内存总量等。
列出你目前身份的所有限制数据数值:
ulimit -a
限制使用者仅能建立10MBytes以下的容量的文件:
ulimit -f 10240
命令别名设置:alias、unalias
1. 列出目前拥有的命令别名:
alias
2. 设置命令别名:
alias rm='rm -i'
3. 删除命令别名:
unalias lm
历史命令:history(~/.bash_history)
查看命令查找顺序:type -a 命令名称
| 标识符 | 含义 |
|---|---|
| \d | 本地端时间的日期 |
| \l | 显示第几个终端界面 |
| \m | 显示硬件的等级 |
| \n | 显示主机的网络名称 |
| \O | 显示domain name |
| \r | 操作系统的版本(相当于uname -r) |
| \t | 显示本地端时间的时间 |
| \S | 操作系统的名称 |
| \v | 操作系统的版本 |
login 与 non-login shell
/etc/profile(login shell 才会读)
/etc/profile.d/*.sh
/etc/locale.conf
/usr/share/bash-completion/completions/*
~/.bash_profile(login shell 才会读)
source:读入环境配置文件的命令
将家目录的~/.bashrc的设置读入目前的bash环境中:
source ~/.bashrc
或 . ~/.bashrc
~/.bashrc(non-login shell 会读)
/etc/man_db.conf
~/.bash_history
~/.bash_logout
| 符号 | 意义 |
|---|---|
| * | 代表【0个到无穷多个】任意字符 |
| ? | 代表【一定有一个】任意字符 |
| [] | 代表【一定有一个在括号内】的字符(非任意字符) |
| [ - ] | 若有减号在中括号内时,代表【在编码顺序内的所有字符】。例如[0-9] |
| [^ ] | 若中括号内的第一个字符为指数符号(^),那表示【反向选择】 |
| # | 注释符号 |
| \ | 转义符 |
| | | 管道(pipe):分隔两个管道命令的符号 |
| ; | 连续命令执行分隔符:连续性命令的界定 |
| ~ | 用户的家目录 |
| $ | 使用变量前导符:亦即是变量之前需要加的变量替换值 |
| & | 任务管理(job control):将命令变成后台任务 |
| ! | 逻辑运算意义上的【非】not 的意思 |
| / | 目录符号:路径分隔的符号 |
| >、>> | 数据流重定向:输出定向,分别是【替换】与【累加】 |
| <、<< | 数据流重定向:输入定向 |
| ‘’ | 单引号,不具有变量替换的功能($变为纯文本) |
| “” | 双引号,具有变量替换的功能($ 可保留相关功能) |
| `` | 两个【``】中间为可以先执行的命令,亦可使用$( ) |
| ( ) | 在中间为子shell的起始与结束 |
| {} | 在中间为命令区块的组合 |
standard output(标准输出STDOUT) 与 standard error output(标准错误输出STDERR)
standard input 标准输入(stdin):代码为0,使用< 或 <<;
将原本需要由键盘输入的数据,改由文件内容类替换;
cat > catfile < ~.bashrc
<<:结束的输入字符
cat > catfile << "eof"
输入eof这个关键词,立刻就结束而不需要输入ctrl + d.
标准输出(stdout):代码为1,使用> 或 >>;
标准错误输出(stderr):代码为2,使用2> 或 2>>;
/dev/null 垃圾桶黑洞设备与特殊写法
find /home -name .bashrc 2> /dev/null
2>&1:将正确与错误数据统统写入同一个文件中
echo "erro message" 2> /dev/null 1>&2
管道命令|仅能处理经由前面一个命令传来的正确信息,也就是标准输出的信息,对于标准错误并没有直接处理的能力。
将一段数据经过分析后,取出我们想要的,或是由分析关键词,取得我们所想要的那一行;
选取信息通常是针对【一行一行】来分析的。
cut
将一段信息的某一段切出来,处理的信息是以行为单位的;
将PATH变量取出,然后找出第三,五个路径:
echo ${PATH} | cut -d ':' -f 3,5
grep
分析一行信息,若当中有我们所需要的信息,就将该行拿出来。
grep [-acinv] [–color=auto] ‘查找字符’ filename
sort:根据不同的数据形式来排序;
uniq:将重复的数据仅列出一个显示;
wc:查看文件里面与多少字、多少行、多少字符;
wc [-lwm] filename
-l: 仅列出行;
-w: 仅列出多少字(英文字母);
-m: 多少字符;
tee会同时将数据流分送到文件与屏幕,而输出到屏幕的,其实就是stdout
tee [-a] file
tr:可以用来删除一段信息当中的文字,或是进行文字信息的替换
1. 将last输出的信息中,所有的小写变成大写字符:
last | tr '[a-z]' '[A-Z]'
2. 将/etc/passwd输出的信息中,将冒号(:)删除:
cat /etc/passwd | tr -d ':'
col:可以用来简单地处理将tab按键替换称为空格键
利用cat -A显示出所有特殊按键,最后以col将tab转成空白:
cat -A /etc/man_db.conf 此时会看到很多^I的符号,那就是tab
cat -A /etc/man_db.conf | col -x | cat -A | more
join:处理两个文件之间的数据,在两个文件当中,有相同数据的那一行,才将它加在一起
join [-til2] file1 file2
在使用join之前,需要处理的文件应该要事先经过排序sort处理。
paste:直接将两行贴在一起,且中间以tab键隔开
paste [-d] file1 file2
expand:将tab按键转成空格键
将一个大文件,依据文件大小或行数来划分,就可以将大文件划分称为小文件。
将/etc/services分成300k一个文件:
split -b 300k /etc/services services
产生某个命令的参数,xargs可以读入stdin的数据,并且以空格符或换行符作为识别符,将stdin的数据分隔成为参数。
将/etc/passwd内的第一栏取出,仅取三行,使用id这个命令将每个账号内容显示出来:
cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -p -n 1 id
在管道命令当中,常常会使用到前一个命令的stdout作为这次的stdin,某些命令需要用到文件名(例如tar)来进行处理时,该stdin与stdout可以利用减号"-"来替代。
tar -cvf - /home | tar -xvf - -C /tmp/homeback
意思是将/home里面的文件给它打包,但打包的数据不是记录到文件,而是传送到stdout,经过管道后,将tar -cvf - /home 传送给后面的tar -xvf -
用户登录的时候,系统做了哪些处理?
/etc/passwd文件结构
每一行都代表一个账号,有几行就代表有几个账号在你的系统中。
需要特别留意的是,里面很多账号本来就是系统正常运行所必须的,称为系统账号,如bin/daemon/adm/nobody等,这些账号请不要随意删除。
每一行使用:分隔开,共有七个东西分别是:
账号名称
密码:x,因为安全问题已将这个字段的数据改放到/etc/shadow中
UID:用户标识符
0:系统管理员
1~999:系统账号
1~200:有linux发行版自行建立的系统账号;
201~999:若用户有系统账号需求时,可以使用的账号UID;
1000~60000:可登录账号
GID:用户组标识符
用户信息说明栏
家目录
shell
当用户登录系统后就会获取一个shell来与系统的内核沟通以进行用户的操作任务。
有一个shell可以使账号在登录时无法获得shell环境,那就是/sbin/nologin
/etc/shadow文件结构
程序的运行都与权限有关,而权限与UID 和 GID有关。因此个程序当然需要读取/etc/passwd来了解不同账号的权限。
shadow同样以【:】作为分隔符,共有九个字段:
账号名称,与/etc/passwd相同
密码:在此字段前加上!或*修改密码字段,就会让密码暂时失效
最近修改密码的日期
密码不可被修改的天数(与第三字段相比)
密码需要重新修改的天数(与第三字段相比)
密码需要修改期限前的警告天数(与第五字段相比)
密码过期后的账号宽限时间(密码失效日,与第五字段相比)
密码过期了,当你登录系统时,系统会强制你必须要重新设置密码才能登录继续使用。
密码过期几天后,如果用户还是没有登录更改密码,那么这个账号的密码将会失效,密码过期与密码失效并不相同。
张瑶失效日期:这个账号在此字段规定的日期之后,将无法再使用。
保留
/etc/group文件结构
groups:有效与支持用户组的观察,第一个输出的用户组即为有效用户组
newgrp:有效用户组的切换,切换的用户组必须是已经支持的用户组
/etc/gshadow:建立用户组管理员
useradd:新建账号
useradd -D
| 参数 | 说明 |
|---|---|
| GROUP=100 | 默认的用户组 |
| HOME=/home | 默认的家目录所在目录 |
| INACTIVE=-1 | 密码失效日,在shadow内的第7栏 |
| EXPIRE= | 账号失效日,在shadow内的第8栏 |
| SHELL=/bin/bash | 默认的shell |
| SKEL=/etc/skel | 使用者家目录的内容数据参考目录 |
| CREATE MAIL SPOOL=yes | 是否主动帮使用者建立邮箱(mailbox) |
passwd
使用useradd建立账号后,在默认的情况下,该账号时暂时被锁定的。
chage
usermod:微调useradd增加的用户参数
userdel
id:查询某人或自己的相关UID/GID等信息
finger:查看很多用户相关的信息
chfn
chsh(change shell)
设置修改自己的shell:
chsh -s /bin/bash
基本上,用户组的内容都与两个文件有关:/etc/group、/etc/gshadow
查询用户:w、who、last、lastlog
用户对谈:write、mesg、wall
用户邮箱:mail
mailbox在/var/spool/mail/username
mail -s "邮件标题" username@localhost
结束时,最后一行输入小数点.即可
数据流重定向:mail -s "nice to meet you" vbird < filename
服务的启动、关闭、与查看等方式
所有的服务启动脚本放置于/etc/init.d/目录
服务启动的分类
服务的依赖性问题
运行级别的分类
init是启动后内核主动调用的,然后init可以根据用户自定义的运行级别来唤醒不同的服务,以进入不同的操作界面。
基本上linux提供7个运行级别,分别是0、1、2、3、4、 5、6,比较重要的是1)单人维护模式、3)纯命令行模式、5)图形界面。
各个运行级别的启动脚本是用过/etc/rc[0-6].d/Sxxdaemon 链接到/etc/init.d/daemon,链接文件名(SXXdaemon)的功能为:S为启动该服务,XX是数字,为启动的顺序。
制定运行级别默认要启动的服务
运行级别的切换操作:init 5
systemd的配置文件放置目录
到底操作系统启动会不会执行某些服务其实看/etc/systemd/system/下面的设置,所以该目录下面是一大堆链接文件。而实际执行的systemd启动脚本配置文件,其实都是放置在/usr/lib/systemd/system/(ubuntu:/lib/systemd/system)
systemd的unit类型分类说明:
/usr/lib/systemd/system/(ubuntu:/lib/systemd/system)以下的数据根据扩展名来区分不同的类型
| 扩展名 | 主要服务功能 |
|---|---|
| .service | 一般服务类型(service unit);主要是系统服务,包括服务器本身所需要的本地服务以及网络服务等。 |
| .socket | 内部程序数据交换的socket服务(socket unit):主要是IPC的传输信息socket文件功能。 |
| .target | 执行环境类型(target unit):其实是一群unit的集合,执行multi-user.target就是执行一堆其他.service或.socket之类的服务。 |
| .mount .automout | 文件系统挂载相关的服务(automount unit/mount unit):例如来自网络的自动挂载、NFS文件系统挂载等于文件系统相关性较高的进程管理。 |
| .path | 检测特定文件或目录类型(path unit):某些服务需要检测某些特定的目录来提供队列服务。 |
| .timer | 循环执行的服务(timer unit) |
systemctl [command] [unit]
command:
systemctl [command] [--type=TYPE] [--all]
command:
–type=TYPE:unit类型,主要有service、socket、target等
systemctl list-dependencies [unit] [--reverse]
会产生一个网络监听端口(port)的进程被称为网络服务。
记录系统活动信息的几个文件,例如:何时、何地(来源IP)、何人(什么服务名称)、做了什么操作(信息登录)。
换句话说就是记录系统在什么时候由哪个进程做了什么样的操作时,发生了何种的事件。
rsyslogd针对各种服务与信息记录在某些文件的配置文件就是/etc/rsyslog.conf,这个文件规定了1)什么服务、2)的什么等级信息、3)需要被记录在哪里(设备或文件)这三个东西;
语法格式:
服务名称[.=!]信息等级 信息登录的文件名或设备或主机
journalctl [-nrpf] [--since TIME] [--until TIME] _optional
1. 显示目前系统中所有的journal日志数据:
journalctl
2. (1)仅显示出2015/08/18整天以及(2)仅今天及(3)仅昨天的日志数据内容:
(1)journalctl --since "2015-08-18 00:00:00" --until "2015-08-19 00:00:00"
(2) journalctl --since today
(3) journalctl --since yesterday --until today
logger [-p 服务名称.等级] "信息"
在内核加载完毕、进行完硬件检测与驱动程序加载后,此时你的主机硬件应该已经准备就绪了(ready)。此时内核会主动地调用第一个程序,那就是systemd。
systemd最重要的功能就是准备软件执行的环境,包括系统的主机名、网络设置、语言设置、文件系统格式及其他服务的启动等。
而所有的操作都会通过systemd的默认启动服务集合,亦即是/etc/systemd/system/default.target来规划。
hostnamectl [set-hostname 你的主机名]
hostnamectl set-hostname myhostname
cat /etc/hostname
timedatectl [command]
选项与参数:
list-timezones:列出系统上所有支持的时区名称
set-timezone:设置时区位置
set-time:设置时间
set-ntp:设置网络校时系统
时间的调整
timedatectl set-time "2022-11-08 12:02"
ubuntu的语系设置:/etc/locale.gen
localectl set-locale LANG=en_US.utf8
systemctl isolate multi-user.target
systemctl isolate graphical.target
1:详细的系统信息,含主板的型号与硬件的基础信息等
4:CPU的相关信息,包括倍频、外频、内核数、内核线程等
9:系统弄的插槽格式,包括PCI、PCI-E等的插槽规格说明
17:每一个内存插槽的规格,若有内存,则列出该内存的容量与型号
dmidecode -t 1:显示整个系统的硬件信息
内核所检测到的各项硬件设备,后来就会被记录在/proc与/sys当中。
file:查看文件类型
file /bin/bash
如果是二进制而且是可以执行的时候,它就会显示执行文件类别(ELF 64-bit LSE executable),同时会说明是否使用动态函数库(shared libs),而如果是一般的脚本,那它就会显示出text executables之类的字样。
内核相关信息大多放置在/usr/include、/usr/lib、/usr/lib64里面
rp-pppoe-3.11-5.el7.x86_64.rpm
rp-pppoe:软件名称
-3.11-:软件的版本信息
5:发布的次数
.el7.x86_64:适合的硬件平台
.rpm:扩展名
| 目录 | 功能 |
|---|---|
| /etc | 一些配置文件放置的目录 |
| /usr/bin | 一些可执行文件 |
| /usr/lib | 一些程序使用的动态函数库 |
| /usr/share/doc | 一些基本的软件使用手册与说明文件 |
| /usr/share/man | 一些man page文件 |
rpm -ivh package_name
-i:install安装的意思
-v:查看更详细的安装信息
-h:显示安装进度
| 可执行的选项 | 代表意义 |
|---|---|
| –nodeps | 当发生软件属性依赖问题而无法安装,但你执意安装时; |
| –replacefiles | 如果在安装的过程中出现了【某个文件已经安装在你的系统上面】的信息, 又或许出现版本不合的信息(confilcting files)时,可以使用这个参数来 直接覆盖文件。 |
| –replacepkgs | 重新安装某个已经安装过的软件,如果你要安装一堆RPM文件时, 可以使用rpm -ivh *.rpm,但若某些软件已经安装过了,此时系统会出现 【某软件已安装】的信息,导致无法继续安装,此时可使用这个选项来重复安装。 |
| –test | 想要测试以下该软件是否可以被安装到用户的linux环境当中,可找出是否有属性 依赖的问题。范例:rpm -ivh pagname.rpm --test |
| –force | 这个参数其实就是–replacefiles与–replacepkgs的综合体 |
| –justdb | 由于RPM数据库损坏或是某些缘故产生错误时,可使用这个选项来更新软件在 数据库内的相关信息。 |
| –nosignature | 想要跳过数字签名的检查时,可以使用这个选项。 |
| –prefix新路径 | 要将软件安装到其他非正规目录时。比如,你想要将某软件安装到/usr/local 而非正规的/bin、/etc等目录,就可以使用【–prefix /usr/local】来处理。 |
| –noscripts | 不想容该软件在安装过程中自行执行某些系统命令。 |
RPM升级与更新(upgrade/freshen)
| -Uvh | 后面接的软件即使没有安装过,则系统将予以直接安装;若后面的软件有安装过旧版,则系统自动更新至新版 |
|---|---|
| -Fvh | 如果后面接的软件并未安装到你的linux系统上,则该软件不会被安装;亦即只有已安装至你linux系统内的软件会被升级 |
RPM查询(query)
查新主要分为两部分:
一个是查找已安装到系统上面的软件信息,这部分的信息都是由/var/lib/rpm所提供;
另一个则是查找某个rpm文件内容,等于是由RPM文件内找出一些要写入数据库内的信息,这部分就得要使用-qp(p是package的意思)
1. 我想要直到我的系统中,以c开头的软件有几个?
rpm -qa | grep ^c|wc -l
RPM验证
使用/var/lib/rpm下面的数据库内容来比对目前linux系统的环境下的所有安装文件。目的是,当你有数据不小心丢失或是因为你误删了某个软件的文件,或是不小心不知道修改到某一个软件的文件内容,就用这个简单的方法来验证以下原本的文件,好让你了解这一阵子到底是修改到哪些文件内容。
数字签名
RPM反安装(卸载)与重建数据库(erase/rebuilddb)
重建数据库:
rpm --rebuilddb
YUM是通过分析RPM的标头数据后,根据各软件的相关性制作出属性依赖时的解决方案,然后可以自动处理软件的依赖属性问题,以解决软件安装或删除与升级的问题。
查新功能:yum [list、info、search、provides、whatprovides]
yum [opton] [查询工作选项] [相关参数]
[option]:
-y:当yum要等待使用者输入时,这个选项可以自动提供yes的回应;
--installroot=/some/path:将该软件安装在/some/path而不适用默认路径;
[查询工作选项] [相关参数]:
search:查找某个软件名称或是描述的重要关键字;
list:列出目前yum所管理的所有的软件与版本,优点类似rpm -qa;
info:同上,不过优点类似rpm -qai的执行结果;
provides:从文件去查找软件,类似rpm -qf的功能;
1. 列出YUM服务器上面提供的所有软件名称
yum list
2. 列出提供passwd这个命令的软件有哪些
yum provides passwd
3. 列出目前服务器上可供本机进行升级的软件有哪些
yum list updates
安装、升级功能:yum [install、update] 软件
yum [option] [安装与升级的工作选项] [相关参数]
[option]:
install:后面接要安装的软件;
update:后面接要升级的软件,若要整个系统都要升级,就直接update即可;
删除功能:yum [remove] 软件
YUM的配置文件:/etc/yum.repos.d
YUM的软件群组功能
yum [群组功能] [软件群组]
选项与参数:
grouplist:列出所有可使用的【软件群组】;
groupinfo:后面接group name,则可了解该group内含的所有软件名;
groupinstall:可以安装一整组的软件群组;
groupremove:删除某个软件群组;
全系统自动升级
echo '10 1 * * * root /usr/bin/yum -y --enablerepo=epel update' > /etc/cron.d/yumupdate
yum安装步骤
先检查一下有哪些软件没有安装或已安装
rpm -q httpd php mysql
安装需要的软件
yum install xxx xxx xxx
启动与开机启动
systemctl daemon-reload
systemctl start httpd
systemctl enable httpd
systemctl status httpd
防火墙
firewall-cmd --add-service="http"
firewall-cmd --permanent --add-service="http"
firewall-cmd --list-all
测试:用软件去查看你的服务正常与否
linux内核官网
https://www.kernel.org
centos官方网站
http://mirror.centos.org/
http://mirror.centos.org/centos/7/isos
ubuntu官网
https://ubuntu.com/
中科大镜像
http://centos.ustc.edu.cn/
http://centos.ustc.edu.cn/centos/7/isos
http://centos.ustc.edu.cn/centos/7/os/x86_64
清华大学镜像站
https://mirrors.tuna.tsinghua.edu.cn/
https://mirrors.tuna.tsinghua.edu.cn/centos/7/isos
https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64