2021-07-07

Linux基础

1.linux基本原则

  • 由目的单一的小程序组成,组合小程序完成复杂任务;

  • 一切皆文件;

  • 配置文件保存为纯文本格式。

    2.bash特性:

    快捷键 ,补全 ,别名 ,历史

光标跳转
ctrl+a 跳到命令行首
ctrl+e 跳到命令行尾
ctrl+u 删除光标至命令行首的内容
ctrl+k 删除光标至命令行尾的内容
ctrl+<-- 光标定位到离自己最近的一个单词前面
ctrl+l 清屏

``      //反引号,键盘左上角Esc下面的键,用于命令替换
""      //双引号,弱引用,可以实现变量替换
''      //单引号,强引用,不完成变量替换
命令历史
[root@yigejuhao ~]# history  (查看命令历史)
    1  hostname
    2  hostnamectl
    3  hostnamectl set-hostname yun
    4  history -w
    5  history
    6  df
    
[root@yigejuhao ~]# history -c (清空命令历史)

[root@yigejuhao ~]# !!       (执行上一条命令)
ls 

[root@yigejuhao ~]# !1        (执行第一条命令)
history 
    1  history 



-d OFFSET [n]   删除指定位置的命令历史
-w              保存命令历史至历史文件~/.bash_history中
命令历史的使用技巧
!n               执行命令历史中的第n条命令
!-n              执行命令历史中倒数第n条命令
!!               执行上一条命令
!string          执行命令历史中最近一个以指定字符串开头的命令
!$               引用前一个命令的最后一个参数
esc,.            按下esc松开后按.,引用前一个命令的最后一个参数
Tab键
命令补全:两次tab键,可以给出列表,否则直接补全
路径补全:搜索给出的起始路径下的每个文件名,并试图补全

基础命令

ls     查看目录
cd     返回上一级
pwd    打印当前工作目录路径
midir  创建目录   -p  创建目录时若父目录不存在则自动创建  -v 显示目录创建过程
rmdir  删除目录
tree   查看目录
touch  更新文件时间   (无中生有,万象更新)
stat  显示文件或文件系统的状态
rm -f   强制删除
rm -r   是否删除 
cp      复制文件
-a      归档复制,常用于备份
-r      是否拷贝
-p      拷贝时保留原权限
mv      移动文件
install 复制文件并且设置属性
cat    查看文本
tac    反着看文本
more    查看文件内容, 从前往后看
less    查看文件内容, 从前往后看,也可以从后往前看
head    从开头开始看文件内容
tail    查看文件尾部内容
wc      统计结果显示输出
du      查看文件或目录占用的磁盘空间大小 
df      查看文件系统磁盘空间使用情况
which   查看文件位置
echo     回声 
cal     查看日历
date    查看或修改时间
man     命令手册
grep    查找文本
w       显示当前在线用户,其在运行命令
hostname  查看或修改主机名
[root@yigejuhao ~]# ls     
1  anaconda-ks.cfg

[root@yigejuhao ~]# ls -l   (使用长格式列出信息)
总用量 8
-rw-r-----. 1 root root   27 7月   5 16:50 1
-rw-------. 1 root root 1162 3月  26 08:45 anaconda-ks.cfg

[root@yigejuhao ~]# ls /   (查看根目录)
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

cd 目录切换命令

[root@yigejuhao ~]# cd /var/www/html/ (切换到html目录)

[root@yigejuhao html]# cd  (返回当前用户目录)

pwd 查看当前工作目录路径

[root@yigejuhao ~]# pwd  
/root

mkdir 创建目录

[root@yigejuhao ~]# mkdir 1

[root@yigejuhao ~]# ls
1    anaconda-ks.cfg

touch 无中生有,万象更新

[root@yigejuhao ~]# touch 1

[root@yigejuhao ~]# ll
总用量 8
-rw-r-----. 1 root root   27 7月   6 14:34 1
-rw-------. 1 root root 1162 3月  26 08:45 anaconda-ks.cfg

stat 显示文件状态

[root@yigejuhao ~]# stat 1
  文件:1
  大小:27        	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:33990226    硬链接:1
权限:(0640/-rw-r-----)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2021-07-06 14:34:56.522774872 +0800
最近更改:2021-07-06 14:34:56.522774872 +0800
最近改动:2021-07-06 14:34:56.522774872 +0800
创建时间:-

rmdir删除目录

[root@yigejuhao ~]# rm -f 1   (强制删除,不询问)

[root@yigejuhao ~]# ls
anaconda-ks.cfg  

[root@yigejuhao ~]# mkdir 123
[root@yigejuhao ~]# ls
123  anaconda-ks.cfg

[root@yigejuhao ~]# rm -rf 123    (强制删除目录及其目录里的文件)
[root@yigejuhao ~]# ls
anaconda-ks.cfg

cp 复制文件

[root@yigejuhao ~]# cp xixi1 123
[root@yigejuhao ~]# ls 123
1  xixi1

mv移动文件

[root@yigejuhao ~]# mkdir hehe
[root@yigejuhao ~]# ls
123   hehe      
[root@yigejuhao ~]# mv hehe 123
[root@yigejuhao ~]# ls 123
1  hehe  xixi1

cat 查看文本

[root@yigejuhao ~]# cat anaconda-ks.cfg 
#version=RHEL8

tac 反着看文本

[root@yigejuhao ~]# tac anaconda-ks.cfg 
%end

more 查看文件内容 ,从前往后看

[root@yigejuhao ~]# more anaconda-ks.cfg 
#version=RHEL8

less 查看文件内容 ,从前往后看,也可以从后往前看

[root@yigejuhao ~]# less anaconda-ks.cfg 
#version=RHEL8

按q退出

head 从头开始查看文件内容

[root@yigejuhao ~]# cat -n anaconda-ks.cfg |head -5  (查看anaconda-ks.cfg前五行)
[root@yigejuhao ~]# cat -n anaconda-ks.cfg |head     (查看前十行)

tail 查看文件尾部内容

[root@yigejuhao ~]# cat -n anaconda-ks.cfg |tail -5  (查看anaconda-ks.cfg倒数五行)
[root@yigejuhao ~]# cat -n anaconda-ks.cfg |head -5 |tail -1   (查看第五行)

wc 统计结果显示输出

[root@yigejuhao ~]# cat anaconda-ks.cfg |wc -l    (查看anaconda-ks.cfg文件有多少行)
44
[root@yigejuhao ~]# cat anaconda-ks.cfg |wc -c      (查看有多少个字节数)
1162
[root@yigejuhao ~]# cat anaconda-ks.cfg |wc -w     (查看输出有多少个单词)
115

du 查看文件或目录占用的磁盘空间大小

[root@yigejuhao ~]# du -s anaconda-ks.cfg 
4	anaconda-ks.cfg
[root@yigejuhao ~]# du -sh anaconda-ks.cfg 
4.0K	anaconda-ks.cfg
[root@yigejuhao ~]# du -sh *
4.0K	123
4.0K	anaconda-ks.cfg
4.0K	wget-log
0	wordpress
13M	wordpress-5.5.3.tar.gz
15M	wordpress-5.6.2.tar.gz
4.0K	xixi1

df 查看文件系统磁盘空间使用情况

[root@yigejuhao ~]# df
文件系统                         1K-块    已用     可用 已用% 挂载点
devtmpfs                        387484       0   387484    0% /dev
tmpfs                           405244       0   405244    0% /dev/shm
tmpfs                           405244    5716   399528    2% /run
tmpfs                           405244       0   405244    0% /sys/fs/cgroup
/dev/mapper/cl_localhost-root 17811456 3025952 14785504   17% /
/dev/sda1                       999320  130664   799844   15% /boot
tmpfs                            81048       0    81048    0% /run/user/0

[root@yigejuhao ~]# df -h
文件系统                       容量  已用  可用 已用% 挂载点
devtmpfs                       379M     0  379M    0% /dev
tmpfs                          396M     0  396M    0% /dev/shm
tmpfs                          396M  5.6M  391M    2% /run
tmpfs                          396M     0  396M    0% /sys/fs/cgroup
/dev/mapper/cl_localhost-root   17G  2.9G   15G   17% /
/dev/sda1                      976M  128M  782M   15% /boot
tmpfs                           80M     0   80M    0% /run/user/0

hostname 查看或临时修改主机名

[root@yun ~]# hostname    (显示主机名)
yun
[root@yun ~]# hostname yigejuhao  (临时改主机名)
[root@yigejuhao ~]# cat /etc/hostname  (查看主机名)
yigejuhao

hostnamectl 查看或永久修改主机名

[root@yigejuhao ~]# hostnamectl    (查看主机名)
     Static hostname: yun
     Transient hostname: yigejuhao
     Icon name: computer-vm  
     Chassis: vm
     Machine ID: 81cc6a512117493696dfac51d878a7d4
     Boot ID: 41b144b853164d52b415010729b4a875
     Virtualization: vmware
     Operating System: CentOS Linux 8 (Core)
     CPE OS Name: cpe:/o:centos:centos:8
     Kernel: Linux 4.18.0-193.el8.x86_64
     Architecture: x86-64
[root@yigejuhao ~]#hostnamectl set-hostname yigejuhao  (永久更改主机名)
[root@yigejuhao ~]# cat /etc/hostnamectl set-hostname 

clear 清屏

[root@yigejuhao ~]# clear

who 查看当前在线用户 whoami 显示当前登录用户

[root@yigejuhao ~]# who
root     pts/0        2021-07-06 13:47 (192.168.191.1)

[root@yigejuhao ~]# whoami
root

w 显示当前在线用户,其在运行命令

[root@yigejuhao ~]# w
 14:52:08 up  1:05,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.191.1    13:47    0.00s  0.03s  0.00s w

which 查找环境变量中的文件

[root@yigejuhao ~]# which cd
/usr/bin/cd

[root@yigejuhao ~]# which ls
alias ls='ls --color=auto'
	/usr/bin/ls

cal 查看日历

[root@yigejuhao ~]# cal
      七月 2021     
日 一 二 三 四 五 六
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31


[root@yigejuhao ~]# cal 2022   (查看2022年的日历)            

lld 查看指定程序有哪些依赖库文件

[root@yigejuhao ~]# ldd /usr/bin/ls
	linux-vdso.so.1 (0x00007ffc495f9000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fdcc1f35000)
	libcap.so.2 => /lib64/libcap.so.2 (0x00007fdcc1d2f000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fdcc196c000)
	libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007fdcc16e8000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fdcc14e4000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fdcc2382000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fdcc12c4000)

date 显示或设置日期与时间

[root@yigejuhao ~]# date 
2021年 04月 08日 星期四 14:59:15 CST
[root@yigejuhao ~]# date '+%Y'   (查看年)
2021
[root@yigejuhao ~]# date '+%M'   (查看分钟数)
58
[root@yigejuhao ~]# date '+%m'   (查看月份)
07
[root@yigejuhao ~]# date '+%d'   (查看月份中的几号) 
06
[root@yigejuhao ~]# date '+%H'   (查看小时,按24小时制显示)
14
[root@yigejuhao ~]# date '+%S'   (查看秒数)
11
[root@yigejuhao ~]# date '+%Y%m%d'(查看年月日)
20210706


[root@yigejuhao ~]# date -s '2001-09-07 00:00:00'  (设置时间日期)
2001年 09月 07日 星期五 00:00:00 CST

如何获取帮助

help COMMAND   (内部命令)


COMMAND --help (外部命令)
[root@yigejuhao ~]# ls --help  (查看帮助)
用法:ls [选项]... [文件]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

必选参数对长短选项同时适用。
  -a, --all			不隐藏任何以. 开始的项目
  -A, --almost-all		列出除. 及.. 以外的任何项目
      --author			与-l 同时使用时列出每个文件的作者
  -b, --escape			以八进制溢出序列表示不可打印的字符
      --block-size=SIZE      with -l, scale sizes by SIZE when printing them;
                               e.g., '--block-size=M'; see SIZE format below
  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                               modification of file status information);

man  COMMAND   (命令手册)

[root@yigejuhao ~]# man ls   (查看ls手册)

通配符

[root@yigejuhao ~]# ls
anaconda-ks.cfg  apr-1.7.0.tar.bz2  apr-util-1.6.1.tar.bz2     httpd-2.4.43          kk.zip           apr-1.7.0        apr-util-1.6.1     123
[root@yigejuhao ~]# ls a*  (查看以a开头的)
anaconda-ks.cfg  apr-1.7.0.tar.bz2  apr-util-1.6.1.tar.bz2

[root@yigejuhao ~]# ls *1   (查看尾部为1的)
libselinux.so.1  xixi1

文件压缩和解压

  gzip , bzip , xz  压缩后原文件会被删除(现象)
  zip  压缩后原文件不会被删除
  tar   归档工具
          zcf  xx.tar.gz.
          jcf  xx.tar.gzip2
          Jcf  xx.tar.xz
[root@yigejuhao ~]# file hehe.tar.bz2
hehe.tar.bz2: bzip2 compressed data, block size = 900k
[root@yigejuhao ~]# yum -y install bzip2
[root@yigejuhao ~]# tar xf apr-1.7.0.tar.bz2 
[root@yigejuhao ~]# tar xf apr-util-1.6.1.tar.bz2 
[root@yigejuhao ~]# ls
anaconda-ks.cfg  apr-1.7.0.tar.bz2  apr-util-1.6.1.tar.bz2     httpd-2.4.43          kk.zip           apr-1.7.0        apr-util-1.6.1     123

排序与去重

[root@yigejuhao ~]# ls -lt  (按时间降序)
总用量 9304
drwxr-xr-x.  3 root root      17 4月   9 10:28 hehe
drwxr-sr-x. 12 root   40    4096 4月   1 15:56 httpd-2.4.43
drwxr-xr-x. 21 tom  tom     4096 4月   1 15:53 apr-util-1.6.1
drwxr-xr-x. 28 tom  tom     4096 4月   1 15:47 apr-1.7.0
-rw-r--r--.  1 root root 7155865 3月  31 19:21 httpd-2.4.43.tar.bz2
-rw-r--r--.  1 root root  428595 3月  31 19:20 apr-util-1.6.1.tar.bz2
-rw-r--r--.  1 root root  872238 3月  31 19:20 apr-1.7.0.tar.bz2
-rw-r--r--.  1 root root    6357 3月  17 10:10 kk.zip

[root@yigejuhao ~]# ls -lrt  (按时间升序)
总用量 9304
-rw-r--r--.  1 root root    6357 3月  17 10:10 kk.zip
-rw-r--r--.  1 root root  872238 3月  31 19:20 apr-1.7.0.tar.bz2
-rw-r--r--.  1 root root  428595 3月  31 19:20 apr-util-1.6.1.tar.bz2
-rw-r--r--.  1 root root 7155865 3月  31 19:21 httpd-2.4.43.tar.bz2
drwxr-xr-x. 28 tom  tom     4096 4月   1 15:47 apr-1.7.0
drwxr-xr-x. 21 tom  tom     4096 4月   1 15:53 apr-util-1.6.1
drwxr-sr-x. 12 root   40    4096 4月   1 15:56 httpd-2.4.43
drwxr-xr-x.  3 root root      17 4月   9 10:28 hehe

[root@yigejuhao ~]# cat > 4 <<EDF
> 1 5 9 
> 2 4 9
> 9 8 9
> 9 6 4
> 3 9 3
> 6 5 7
> 2 4 9
> EDF

[root@yigejuhao ~]# sort -n 4 (按第一列开始看)
1 5 9 
2 4 9
2 4 9
3 9 3
6 5 7
9 6 4
9 8 9

[root@yigejuhao ~]# sort -nk 2 4 (按第二列开始看)
2 4 9
2 4 9
1 5 9 
6 5 7
9 6 4
9 8 9
3 9 3

cut 剪切

[root@yigejuhao ~]#  head /etc/passwd | cut -d: -f1,5,4
root:0:root
bin:1:bin
daemon:2:daemon
adm:4:adm
lp:7:lp
sync:0:sync
shutdown:0:shutdown
halt:0:halt
mail:12:mail
operator:0:operator

awk 列的文本报告工具

[root@yigejuhao ~]# df -h | awk '{print $1}' (查看第一列)
文件系统
devtmpfs
tmpfs
tmpfs
tmpfs
/dev/mapper/cl_yigejuhao-root
/dev/sda1
tmpfs

[root@yigejuhao ~]# df -h | awk 'NR==2{print $4}' (查看第四列,第二行)
379M

sed 行的过滤和转换文本

[root@yigejuhao ~]# cat > 4 <<EDF
> 1 5 9 
> 2 4 9
> 9 8 9
> 9 6 4
> 3 9 3
> 6 5 7
> 2 4 9
> EDF

[root@yigejuhao ~]# sed -n '2p' 4
2 4 9
[root@yigejuhao ~]# sed -n '3p' 4
9 8 9

[root@yigejuhao ~]#  sed 's/2/9/' 4
1 5 9 
9 4 9
9 8 9
9 6 4
3 9 3
6 5 7
9 4 9

[root@yigejuhao ~]# cat 4
1 5 9 
2 4 9
9 8 9
9 6 4
3 9 3
6 5 7
2 4 9

grep 文本查找

grep   根据模式搜索文本,并将符合模式的文本行显示出来。 2.使用基本正则表达式定义的模式来过滤文本的命令。

[root@yigejuhao ~]# echo '1 6 8' >>4
[root@yigejuhao ~]# cat 4
1 5 9 
2 4 9
9 8 9
9 6 4
3 9 3
6 5 7
2 4 9
1 6 8
[root@yigejuhao ~]# grep '2' 4
2 4 9
2 4 9
[root@yigejuhao ~]# grep '4' 4
2 4 9
9 6 4
2 4 9

[root@yigejuhao ~]# grep -i 'hehe' 1  (查找hehe,忽略大小写)
hehe
hehe 1
hehe 2
Hehe 1
Hehe 2
Hehe 

[root@yigejuhao ~]# grep -o 'hehe' 1   (只显示一行中匹配(hehe)的部分)
hehe
hehe
hehe

[root@yigejuhao ~]# grep -v 'hehe' 1     (显示没有被匹配到的行)
Hehe 1
Hehe 2
Hehe 

[root@yigejuhao ~]# grep -E 'hehe' 1      (扩展正则表达式egrep)
hehe
hehe 1
hehe 2

[root@yigejuhao ~]# grep -A 2 'hehe' 1    (查找内容以及后两行)
hehe
hehe 1
hehe 2
Hehe 1
Hehe 2

[root@yigejuhao ~]# grep -B 1 'hehe' 1     (查看内容以及前一行)
hehe
hehe 1
hehe 2

[root@yigejuhao ~]# grep -c  'hehe' 1       (显示匹配的个数,不显示内容)
3

find 实时查找

  实时查找,精确性强,遍历指定目录中所有文件完成查找 \
  查找速度慢,支持众多查找标准
  查找路径        //默认为当前目录
  查找标准        //默认为指定路径下的所有文件
  -name 'filename'    //对文件名作精确匹配.支持glob通配符机制
  -iname 'filename'   //文件名匹配时不区分大小写
  -regex pattern      //基于正则表达式进行文件名匹配.以pattern \
                      //匹配整个文件路径字符串,而不仅仅是文件名称
  -user username          //根本属主来查找
  -group groupname        //根据属组来查找
  -uid        //根据UID进行查找,当用户被删除以后文件的属主会变为此用户的UID
  -gid        //根据GID进行查找,当用户被删除以后文件的属组会变为此用户的GID
  -nouser     //查找没有属主的文件.用户被删除的情况下产生的文件,只有uid没有属主
  -nogroup    //查找没有属组的文件.组被删除的情况下产生的文件,只有gid没有属组
  -type       //根据文件类型来查找(f,d,c,b,l,p,s)
  -size       //根据文件大小进行查找。如1k、1M,+10k、+10M,-1k、-1M, \
                        //+表示大于,-表示小于
 [+|-]
  #K、#M、#G
  #Unit表示(从#-1到#之间的范围大小)
 -#Unit表示(从0到#-1的范围大小)
 +#Unit表示(大于#的所有)
 -mtime      //修改时间
 -ctime      //改变时间
 -atime      //访问时间
                +5      //5天前
                -5      //5天以内
            -mmin       //多少分钟修改过
            -cmin       //多少分钟改变过
            -amin       //多少分钟访问过
                +5      //5分钟前
                -5      //5分钟以内   
 -perm mode      //根据权限精确查找
 -perm -mode     //文件权限能完全包含此mode时才符合条件
 -perm /mode     //9位权限中有任何一位权限匹配都视为符合查找条件
 
 
[root@yigejuhao ~]# find -mtime -3    (根据文件修改来查找,查找3天以内修改过的文件)
./hehe
./hehe/1
./hehe/2
./1
./3
./4
./5
./456

[root@yigejuhao ~]# find -amin -100       (查找100分钟以内访问过的文件)
.
./.bash_history
./1

[root@yigejuhao ~]# find -mmin -1000       (查找1000分钟以内修改过的文件)
./4

[root@yigejuhao ~]# find -type f -delete    (删除f的所有文件)
[root@yigejuhao ~]# ls

组合使用
[root@yigejuhao ~]# find / -type d -size -5 -iname home
/home
[root@yigejuhao ~]# find -type d -fls home
[root@yigejuhao ~]# cat home
 33575041      4 dr-xr-x---   7  root     root         4096 4月 12 14:53 .
 51779764      4 drwxr-xr-x  28  tom      tom          4096 4月  1 15:47 ./apr-1.7.0
   473484      0 drwxr-xr-x   3  tom      tom            83 4月  1 15:47 ./apr-1.7.0/passwd
 16786740      0 drwxr-xr-x   2  root     root           27 4月  1 15:47 ./apr-1.7.0/passwd/.libs
 17144329      0 drwxr-xr-x   4  tom      tom            29 4月  2  2019 ./apr-1.7.0/poll

文件层级系统

FHS(文件层级系统)              /(根目录)                 /boot (系统启动相关的文件)             
/dev(设备文件)                 /etc(配置文件)             /home(普通用户的家目录)           /root(管理员的家目录)          run(运行)                /lib(库文件)
/media(用来挂在移动设备)        /mnt(用来挂载额外的临时文件系统) 
/opt(可选目录)                /proc(伪文件系统,内核映射文件)  /sys(跟硬件设备相关的属性映射文件)
/tmp (临时文件)              /var(可变化的文件)            /bin(可执行文件,用户命令)
/sbin(管理命令)               /usr(全局共享只读文件)  

   /usr/bin
    /usr/sbin
    /usr/lib
/usr/local      //第三方软件安装路径
    /usr/local/bin
    /usr/local/sbin
    /usr/local/lib
    /usr/local/etc
    /usr/local/man

/etc,/bin,/sbin,/lib内是系统启动就需要用到的程序,这些目录不能挂载额外的分区,\
必须在根文件系统的分区上

/usr/bin,/usr/sbin,/usr/lib提供操作系统核心功能,/usr可以单独分区

/usr/local/bin,/usr/local/sbin,/usr/local/lib,/usr/local/etc, \
/usr/local/man等等在/usr/local目录下的内容都是第三方软件,建议单独分区

重定向与管道

//系统设定:
    默认输入设备      //标准输入,STDIN,0  (键盘)
    默认输出设备      //标准输出,STDOUT,1 (显示器)
    标准错误输出      //STDERR,2 (显示器)
    
//I/O重定向:
    >:覆盖输出
    >>:追加输出

2>      //重定向错误输出
2>>     //追加重定向错误输出
&>      //覆盖重定向标准输出或错误输出至同一个文件
&>>     //追加重定向标准输出或错误输出至同一个文件
<       //输入重定向
<<      //Here Document


管道      //前一个命令的输出,作为后一个命令的输入。最后一个命令会在当前shell进程 \
        //的子shell进程中执行
        
[root@yigejuhao ~]# echo "hello" | tee /tmp/hello.out
hello
[root@yigejuhao ~]# cat /tmp/hello.out 
hello

文本编辑vi/vim

vi/vim编辑器有三种编辑模式: 命令模式 ,输入模式 , 末行模式
编辑模式作用
命令模式 :	用户执行命令,比如复制行、粘贴行等等
输入模式 :	用于输入文本、修改文本等等
末行模式 :	用于查找文本、保存修改等等

vi/vim三种编辑模式之间转换的方式
命令模式-->输入模式

i:insert,在当前光标所在字符的前面,转为输入模式
I:大写的i,在当前光标所在行的行首转换为输入模式
a:append,在当前光标所在字符的后面转换为输入模式
A:在当前光标所在行的行尾转换为输入模式
o:open,在当前光标所在行的下方新建一行并转为输入模式
O:大写的o,不是数字0,在当前光标所在行的上方新建一行并转换为输入模式
输入模式-->命令模式
ESC
命令模式-->末行模式
:
末行模式-->命令模式
ESC ESC
2.3 文本编辑方式
打开文件方式:文件打开后默认处于命令模式下


[root@yigejuhao ~]# yum -y install vim  (用yum安装vim)
[root@yigejuhao ~]# vim anaconda-ks.cfg     (打开目录)
[root@yigejuhao ~]# vim +10 anaconda-ks.cfg  (进入目录第十行)
[root@yigejuhao ~]# +/^System 123            (转到system行)
关闭文件方式:
命令:   q退出     q!不保存并强制退出     wq保存并退出     wq!强制保存并退出   x强行保存并退出


逐字符移动
h 向左移动一个字符       l 向右移动一个字符      j 向下移动一个字符       k 向上移动一个字符
#h 向左移动#个字符      #l 向右移动#个字符     #j 向下移动#个字符       #k 向上移动#个字符
 
gg 跳转到第一行          G 跳转到最后一行      #gg 跳转到第#行         #G 跳转到第#行

ctrl+f 向下翻一屏               ctrl+b 向上翻一屏

dd  删除当前光标所在行整行
#dd 删除包括当前光标所在行在内的#行
D   删除当前光标所在行的内容,保留空行
yy 复制        p 粘贴         r 替换           u 撤销        s 查找并替换
                                                          s命令只能在末行模式下使用

范围表示
. 光标所在当前行     $ 最后一行      +# 光标所在行往后#行    $-# 倒数第#行   % 全文
 
set nu:显示行号
set nonu:取消显示行号

vimdiff (比较两个文件不同之处) diff(差异)

用户和组的管理

用户分类

Linux用户分为管理员和普通用户两种:

用户类别 用户ID
管理员 0
普通用户 1-65535

其中普通用户又分为系统用户和登录用户两种:

用户类别 用户ID
系统用户 1-999(为守护类进程获取系统资源而完成权限指派的用户)
登录用户 1000-60000(为了完成交互式登录使用的用户)

用户创建useradd

[root@yigejuhao ~]# useradd xiaoyanyuan (创建用户)
[root@yigejuhao ~]# useradd -u 2000 yun (创建用户指定uid)
[root@yigejuhao ~]# cat /etc/passwd |grep 'yun' 
yun:x:2000:2000::/home/yun:/bin/bash 

[root@yigejuhao ~]# useradd -g 2000 lisi (创建用户,指定组) 
[root@yigejuhao ~]# cat /etc/passwd |grep 'lisi' 
lisi:x:2001:2000::/home/lisi:/bin/bash 

[root@yigejuhao ~]# useradd -G yun wang (创建用户并指定附加组) 
[root@yigejuhao ~]# id wang 
uid=2002(wang) gid=2002(wang) 组=2002(wang),2000(yun) 

[root@yigejuhao ~]# useradd -c xiaodi gege (创建用户并添加注释信息)
[root@yigejuhao ~]# cat /etc/passwd |grep 'gege' gege:x:2003:2003:xiaodi:/home/gege:/bin/bash 

[root@yigejuhao ~]# cat /etc/passwd |grep zhang (创建用户,并且指定home目录) zhang:x:2004:2004::/home/zhang:/bin/bash 

useradd -s[shell] 这里的shell最好使用/etc/shells里面有的shell,etc/shells指定了当前系统 可用的安全shell 

[root@yigejuhao ~]# cat /etc/shells 
/bin/sh /bin/bash 
/usr/bin/sh 
/usr/bin/bash 

[root@yigejuhao ~]# useradd -s /bin/sh xixi 
[root@yigejuhao ~]# cat /etc/passwd |grep xixi 
xixi:x:2005:2005::/home/xixi:/bin/sh 

[root@yigejuhao ~]# useradd -M hanhan (只创建用户,不给创建家目录)
[root@yigejuhao ~]# cat /etc/passwd |grep hanhan hanhan:x:2006:2006::/home/hanhan:/bin/bash 

[root@yigejuhao ~]# ls /home 
111hhh gege lisi tom wang xiaoyanyuan xixi yun zhang 

[root@yigejuhao ~]# useradd -r juhao (创建系统用户)
[root@yigejuhao ~]# cat /etc/passwd |grep juhao yigejuhao:x:1002:1002::/home/yigejuhao:/bin/bash 
juhao:x:994:990::/home/juhao:/bin/bash 

[root@yigejuhao ~]# useradd -D (直接打印)
GROUP=100 
HOME=/home 
INACTIVE=-1 
EXPIRE= 
SHELL=/bin/bash 
SKEL=/etc/skel 
CREATE_MAIL_SPOOL=yes

查看用户id

[root@yigejuhao ~]# id -u yun         (查看UID) 
2000 
[root@yigejuhao ~]# id -g xiaoyanyuan (查看GID) 
1003 
[root@yigejuhao ~]# id -G wang         (查看groups) 
2002 2000

删除用户

[root@yigejuhao ~]# userdel -r yun (删除用户) 
userdel:组“yun”没有移除,因为它包含其它成员。 
[root@yigejuhao ~]# userdel -r yun 
userdel:用户“yun”不存在 
[root@yigejuhao ~]# groupdel yun   (删除组) 
groupdel:不能移除用户“lisi”的主组
[root@yigejuhao ~]# userdel -r lisi 
[root@yigejuhao ~]# groupdel yun

修改用户帐号属性usermod

[root@yigejuhao ~]# usermod -u 2000 yun (修改用户uid) 
[root@yigejuhao ~]# cat /etc/passwd |grep yun 
yun:x:2000:2007::/home/yun:/bin/bash 

[root@yigejuhao ~]# usermod -g 1002 yun ( 修改用户gid) 
[root@yigejuhao ~]# cat /etc/passwd |grep yun
yun:x:2000:1002::/home/yun:/bin/bash 

[root@yigejuhao ~]# usermod -a -G yigejuhao yun (附加组) 
[root@yigejuhao ~]# id yun 
uid=2000(yun) gid=1002(yigejuhao) 组=1002(yigejuhao) 

[root@yigejuhao ~]# usermod -md /home/xiaoyanyuan xiaoyanyuan (改变家目录) 
[root@yigejuhao ~]# cat /etc/passwd |grep xiaoyanyuan xiaoyanyuan:x:2007:2008::/home/xiaoyanyuan:/bin/bash 
[root@yigejuhao ~]# ls /home/ 
111hhh gege tom wang xiaoyanyuan xixi yun zhang 

[root@yigejuhao ~]# usermod -e 2021-04-14 xiaoyanyuan (指定账户过期时间) 
[root@yigejuhao ~]# cat /etc/shadow |grep xiaoyanyuan xiaoyanyuan:!!:18730:0:99999:7::18731: 

[root@yigejuhao ~]# usermod -f 5 xixi (设定非活动期限) 
[root@yigejuhao ~]# cat /etc/shadow |grep xixi 
xixi:!!:18730:0:99999:7:5:: 
[root@yigejuhao ~]# passwd xiaoyanyuan 
(设置密码) 更改用户 xiaoyanyuan 的密码 。
新的 密码: 
无效的密码: 密码未通过字典检查 - 太简单或太有规律 
重新输入新的 密码: 
passwd:所有的身份验证令牌已经成功更新。

[root@yigejuhao ~]# usermod -L xiaoyanyuan (锁定账号)

[root@yigejuhao ~]# cat /etc/shadow |grep xiaoyanyuan xiaoyanyuan:!$6$KJeQo6c1qsqv0nPn$Irz8Z8autH6LkgA/o2iKTAQLAUiDMczfbq8uRiGminyYwm2 q2oA9b/hET3NIqnhfzE3WX.i5E8.2/iHQWnnLj0:18730:0:99999:7::18731: 

[root@yigejuhao ~]# usermod -U xiaoyanyuan (解锁账号) 
[root@yigejuhao ~]# cat /etc/shadow |grep xiaoyanyuan xiaoyanyuan:$6$KJeQo6c1qsqv0nPn$Irz8Z8autH6LkgA/o2iKTAQLAUiDMczfbq8uRiGminyYwm2q 2oA9b/hET3NIqnhfzE3WX.i5E8.2/iHQWnnLj0:18730:0:99999:7::18731: 

[root@yigejuhao ~]# usermod -s /bin/sh zhang (修改用户默认的shell) 
[root@yigejuhao ~]# cat /etc/passwd |grep zhang 
zhang:x:2004:2004::/home/zhang:/bin/sh

权限管理

文件的权限主要针对三类对象进行定义:

  • owner:属主,u
  • group:属组,g
  • other:其它,o

每个文件针对每个访问者都定义了三种权限:

权限 对应的操作对象 权限说明
r 文件 可读,可以使用类似cat等命令查看文件内容
w 文件 可写,可以编辑或删除此文件
x 文件 可执行,eXacutable,可以在命令提示符下 当作命令提交给内核运行
r 目录 可以对此目录执行ls以列出内部的所有文件
w 目录 可以在此目录中创建文件,也可删除此目录中的文件
x 目录 可以使用cd切换进此目录,也可以 使用ls -l查看内部文件的详细信息

权限的二进制与十进制转换:

权限 二进制 十进制
000 0
–x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7

2.权限管理命令

修改权限命令chmod

//修改三类用户的权限:
//语法:chmod MODE file,...
    -R      //递归修改权限

//修改某类用户或某些类用户权限:
//u,g,o,a(用户类别)

//chmod 用户类别=MODE file,.....
//chmod 用户类别=MODE,用户类别=MODE file,.....
    

//修改某类的用户某位或某些位权限:
//u,g,o,a(用户类别)

//chmod 用户类别+|-MODE file,.....
//chmod 用户类别+|-MODE,用户类别+|-MODE file,.....
//chmod +|-MODE file,.....
[root@yigejuhao ~]# ll
total 12
drwxr-xr-x. 2 root root    6 11月  2 13:03 xxxx
-rw-------. 1 root root 1174 10月 26 19:09 anaconda-ks.cfg
-rw-r--r--. 1 root root 5499 10月 27 13:19 man.test.config
drwxr-xr-x. 2 root root    6 11月  2 13:03  xxxx

[root@yigejuhao ~]# chmod g+w xxxx
[root@yigejuhao ~]# ll
total 12
drwxrwxr-x. 2 root root    6 11月  2 13:03 xxxx
-rw-------. 1 root root 1174 10月 26 19:09 anaconda-ks.cfg
-rw-r--r--. 1 root root 5499 10月 27 13:19 man.test.config
drwxr-xr-x. 2 root root    6 11月  2 13:03 xxxx

[root@yigejuhao ~]# chmod u=rwx,g=rw,o=r xxxx
[root@yigejuhao ~]# ll
total 12
drwxrw-r--. 2 root root    6 11月 2 13:03 xxxx
-rw-------. 1 root root 1174 10月 26 19:09 anaconda-ks.cfg
-rw-r--r--. 1 root root 5499 10月 27 13:19 man.test.config
drwxr-xr-x. 2 root root    6 11月  2 13:03 xxxx

[root@yigejuhao ~]# chmod a+x xxxx
[root@yigejuhao ~]# ll
total 12
drwxrwxrwx. 2 root root    6 11月  2 13:03 xxxx
-rw-------. 1 root root 1174 10月 26 19:09 anaconda-ks.cfg
-rw-r--r--. 1 root root 5499 10月 27 13:19 man.test.config
drwxr-xr-x. 2 root root    6 11月  2 13:03 xxxx

修改文件属主和属组的命令chown

chown命令只有管理员可以使用。
//chown USERNAME file,...
    -R      //修改目录及其内部文件的属主

//chown USERNAME:GROUPNAME file,...
//chown USERNAME.GROUPNAME file,...
[root@yigejuhao ~]# chown .root xxxx

遮罩码

文件创建以后默认权限是644

目录创建以后默认权限是755

文件最终的权限为:

  • 666-umask

目录最终的权限为:

  • 777-umask
[root@yigejuhao ~]# umask
0022

特殊权限

SUID(4)     //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主
    chmod u+s file
    chmod u-s file
    //如果file本身原来就有执行权限,则SUID显示为s,否则显示为S
    
SGID(2)     //运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组
    //默认情况下,用户创建文件时,其属组为此用户所属的基本组;
    //一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组 \
    //为此设定了SGID的目录的属组
    chmod g+s DIR
    chmod g-s DIR
    //如果file本身原来就有执行权限,则SGID显示为s,否则显示为S
    
Sticky(1)       //在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
    chmod o+t DIR
    chmod o-t DIR
    //如果DIR本身原来就有执行权限,则Sticky显示为t,否则显示为T
    
4755    //有SUID,文件权限为755
2755    //有SGID,文件权限为755
1755    //有Sticky,文件权限为755
//这里前面的4、2、1分别表示SUID、SGID、Sticky
[root@yigejuhao ~]# ll
total 12
drwxrwxrwx. 2 root root   18 11月  2 13:36 hehe
-rw-------. 1 root root 1174 10月 26 19:09 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 11月  2 13:36 hehe
-rw-r--r--. 1 root root 5499 10月 27 13:19 man.test.config
drwxr-xr-x. 2 root root    6 11月  2 13:36 xxxx

[root@yigejuhao ~]# chmod g+s hehe
[root@yigejuhao ~]# ll
total 12
drwxrwsrwx. 2 root root   18 11月  2 13:36 hehe
-rw-------. 1 root root 1174 10月 26 19:09 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 11月  2 13:55 hehe
-rw-r--r--. 1 root root 5499 10月 27 13:19 man.test.config
drwxr-xr-x. 2 root root    6 11月  2 13:30 xxxx

文件系统访问控制列表facl

facl(Filesystem Access Control List),利用文件扩展保存额外的访问控制权限。

//语法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
    -m      //设定
        u:UID:perm
        g:GID:perm
    //setfacl -m u:test:rw file
    //setfacl -m g:test:rw file
    //如果要为某个目录设定默认的访问控制列表,只需要设定时在u或g前面加上d即可。 如:\
    //setfacl -m d:u:test:rw file,此时在此目录中创建的文件均继承此访问控制列表所设置的权限
    -x      //取消
        u:UID
        g:GID
    //setfacl -x u:test file
    //setfacl -x g:test file
    -b      //Remove all
        
//语法:getfacl [-aceEsRLPtpndvh] file ...
//getfacl file

[root@yigejuhao ~]# setfacl -m group:dev:r-- ./test.txt
[root@yigejuhao ~]# getfacl --omit-header ./test.txt
user::rw-
user:john:rw-
group::rw-
group:dev:r--
mask::rw-
other::r--

sudo

sudo可以实现某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令

sudo的配置文件:/etc/sudoers

使用visudo命令进行sudo的配置,每一行就是一个sudo条目,条目格式如下:

  • who which_hosts=(runas) command
    • who:User_Alias,表示运行命令者的身份
    • which_hosts:Host_Alias,通过哪些主机
    • runas:Runas_Alias,以哪个用户的身份
    • command:Cmnd_Alias,运行哪些命令
[root@yigejuhao ~]# visudo  
visudo: /etc/sudoers.tmp 未更改

[root@yigejuhao ~]# sudo -V  (显示版本号)
Sudo 版本 1.8.29

[root@yigejuhao ~]# sudo -h  (sudo -h = sudo --help 查看帮助)
sudo - 以其他用户身份执行一条命令

usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s]
            [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...

选项:
  -A, --askpass                 使用助手程序进行密码提示
  -b, --background              在后台运行命令
  -B, --bell                    ring bell when prompting
  -C, --close-from=num          关闭所有 >= num 的文件描述符
  -E, --preserve-env            在执行命令时保留用户环境
      --preserve-env=list       保留特定的环境变量
  -e, --edit                    编辑文件而非执行命令
  -g, --group=group             以指定的用户组或 ID 执行命令
  -H, --set-home                将 HOME 变量设为目标用户的主目录。
  -h, --help                    显示帮助消息并退出
  -h, --host=host               在主机上运行命令(如果插件支持)
  -i, --login                   以目标用户身份运行一个登录 shell;可同时指定一条命令
  -K, --remove-timestamp        完全移除时间戳文件
  -k, --reset-timestamp         无效的时间戳文件
  -l, --list                    列出用户权限或检查某个特定命令;对于长格式,使用两次
  -n, --non-interactive         非交互模式,不提示
  -P, --preserve-groups         保留组向量,而非设置为目标的组向量
  -p, --prompt=prompt           使用指定的密码提示
  -r, --role=role               以指定的角色创建 SELinux 安全环境
  -S, --stdin                   从标准输入读取密码
  -s, --shell                   以目标用户运行 shell;可同时指定一条命令
  -t, --type=type               以指定的类型创建 SELinux 安全环境
  -T, --command-timeout=timeout 在达到指定时间限制后终止命令
  -U, --other-user=user         在列表模式中显示用户的权限
  -u, --user=user               以指定用户或 ID 运行命令(或编辑文件)
  -V, --version                 显示版本信息并退出
  -v, --validate                更新用户的时间戳而不执行命令
  --                            停止处理命令行参数


管理命令

[root@yigejuhao ~]# lastb   (登录记录)
root     ssh:notty    192.168.184.1    Fri Apr 30 13:27 - 13:27  (00:00)
root     ssh:notty    192.168.184.1    Fri Apr 30 12:28 - 12:28  (00:00)

进程管理

进程是已启动的可执行程序的运行中实例。

/proc目录下以数字为名的目录,每一个目录代表一个进程,保存着进程的属性信息。每一个进程的PID是唯一的,就算进程退出了,其它进程也不会占用其PID。

进程的组成部分

已分配内存的地址空间

安全属性,包括所有权凭据和特权

程序代码的一个或多个执行线程

进程状态

进程的环境

本地和全局变量

当前调度上下文

分配的系统资源,如文件描述符和网络端口

进程状态

Excuting                    //运行态
Ready                       //就绪态,也可以称作睡眠态
Uninterruptible sleep   //不可中断的睡眠。不可随时唤醒,只有当IO资源加载成功后才能唤醒
Interruptible sleep     //可中断的睡眠。可随时唤醒
Zombie                      //僵尸进程。正常运行结束了,但是不释放占据的内存
Stopped                     //停止态,暂停于内存中,但不会被调度,除非手动启动之
标志 内核定义的状态名称和描述
R TASK_RUNNING:进程正在CPU上执行,或者正在等待运行。处于运行中(或可运行)状态时,进程可能正在执行用户例程或内核例程(系统调用),或者已排队并就绪
S TASK_INTERRUPTIBLE:进程处于睡眠状态且正在等待某一条件:硬件请求、系统资源访问或信号。当事件或信号满足该条件时,该进程将返回到运行中
D TASK_UNINTERRUPTIBLE:此进程也在睡眠,但与S状态不同,不会响应传递的信号。仅在特定的条件下使用,其中进程中断可能会导致意外的设备状态
K TASK_KILLABLE:进程处于睡眠状态,与不可中断的D状态相同,但有所修改,允许等待中的任务通过响应信号而被中断(彻底退出)。实用程序通常将可中断的进程显示为D状态
T TASK_STOPPED:进程已被停止(暂停),通常是通过用户或其他进程发出的信号。进程可以通过另一信号返回到运行中状态,继续执行(恢复)
T TASK_TRACED:正在被调试的进程也会临时停止,并且共享同一个T状态标志
Z EXIT_ZOMBIE:子进程在退出时向父进程发出信号。除进程身份(PID)之外的所有资源都已释放
X EXIT_DEAD:当父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放。此状态从不会在进程列出实用程序中看到
< 高优先级进程
< 高优先级进程
+ 前台进程组中的进程
l 多线程进程
s 会话进程首进程

进程优先级

  • 进程优先级范围:0-139,数字越小,优先级越高
    • 0-99:实时优先级,内核调整
    • 100-139:静态优先级,用户可控制
  • 进程优先级高的特点:
    • 获得更多的CPU运行时间
    • 更优先获得CPU运行的机会

要修改进程的优先级可以通过调整进程的nice值来实现,nice值越小,优先级越高:
nice值的范围是(-20,19),-20对应100,19对应139

相对优先级

由于不是每种进程都与其他进程同样重要,可告知调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略称为SCHED_OTHER(也称为SCHED_NORMAL),但还有一些其他策略可用于不同的目的。

由于并非所有进程都以同样的方式创建,可为采用SCHED_NORMAL策略运行的进程指定相对优先级。此优先级称为进程的nice值。一个进程可以有40种不同级别的nice值。

这些nice级别的范围是从-20到19。默认情况下,进程将继承其父进程的nice级别,通常为0

进程优先级调整

进程优先级调整:调整nice值

//调整已经启动的进程的nice值:
    renice NI PID(例:renice 3 3704)
//在启动时指定nice值:(-20,19)
    nice -n NI COMMAND

3. 进程管理命令

ps命令用于列出当前的进程。可以显示详细的进程信息

[root@yigejuhao ~]# ps -e  (显示所有进程)
    PID TTY          TIME CMD
      1 ?        00:00:01 systemd
      2 ?        00:00:00 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp
  
  
  
[root@yigejuhao ~]# ps aux  (区分终端,显示所有用户的所有进程)
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  1.6 179120 13668 ?        Ss   13:46   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize
root           2  0.0  0.0      0     0 ?        S    13:46   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   13:46   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   13:46   0:00 [rcu_par_gp]
root           6  0.0  0.0      0     0 ?        I<   13:46   0:00 [kworker/0:0H-kblockd]
root           7  0.0  0.0      0     0 ?        R    13:46   0:00 [kworker/u256:0-events_unbound]
root           8  0.0  0.0      0     0 ?        I<   13:46   0:00 [mm_percpu_wq]
root           9  0.0  0.0      0     0 ?        S    13:46   0:00 [ksoftirqd/0]



[root@yigejuhao ~]# ps -ef  (显示所有进程的UID,PPID,C与STIME栏位)
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 13:46 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 16
root           2       0  0 13:46 ?        00:00:00 [kthreadd]
root           3       2  0 13:46 ?        00:00:00 [rcu_gp]
root           4       2  0 13:46 ?        00:00:00 [rcu_par_gp]
root           6       2  0 13:46 ?        00:00:00 [kworker/0:0H-kblockd]
root           7       2  0 13:46 ?        00:00:00 [kworker/u256:0-events_unbound]


[root@yigejuhao ~]# ps -u root (显示root用户的所有进程)
 PID TTY          TIME CMD
      1 ?        00:00:01 systemd
      2 ?        00:00:00 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp
      6 ?        00:00:00 kworker/0:0H-kblockd
      7 ?        00:00:00 kworker/u256:0-events_unbound
      8 ?        00:00:00 mm_percpu_wq

[root@yigejuhao ~]# ps -o pid,comm,pcpu (查看进程的PID、名称以及CPU 占用率)
PID COMMAND         %CPU
   1484 bash             0.0
   1825 ps               0.0

[root@yigejuhao ~]# ps -ef|grep rpc.rstatd (查找rpc.rstatd进程)
root        1827    1484  0 16:10 pts/0    00:00:00 grep --color=auto rpc.rstatd

[root@yigejuhao ~]# ps -efL (查看线程数)
UID          PID    PPID     LWP  C NLWP STIME TTY          TIME CMD
root           1       0       1  0    1 13:46 ?        00:00:01 /usr/lib/systemd/systemd 
--switched-root --system --deserialize 1
root           2       0       2  0    1 13:46 ?        00:00:00 [kthreadd]
root           3       2       3  0    1 13:46 ?        00:00:00 [rcu_gp]
root           4       2       4  0    1 13:46 ?        00:00:00 [rcu_par_gp]
root           6       2       6  0    1 13:46 ?        00:00:00 [kworker/0:0H-kblock

[root@yigejuhao ~]# ps -e -o "%C : %p :%z : %a"|sort -k5 -nr (查看进程并按内存使用大小排列)
 0.0 :     871 : 97880 : /usr/lib/systemd/systemd-logind
 0.0 :    1473 : 93836 : /usr/lib/systemd/systemd --user

[root@yigejuhao ~]# ps -C root (通过名字或命令搜索进程)
 PID TTY          TIME CMD

[root@yigejuhao ~]# ps -e -o pid,comm,etime  (显示进程运行的时间)
 PID COMMAND             ELAPSED
      1 systemd            02:26:55
      2 kthreadd           02:26:55
      3 rcu_gp             02:26:55
      4 rcu_par_gp         02:26:55
      6 kworker/0:0H-kb    02:26:55
      7 kworker/u256:0-    02:26:55

[root@yigejuhao ~]# ps -o pid,comm,ni (只显示进程号,命令,nice值)
 PID COMMAND             NI
   1484 bash              0
   1834 ps                0



//aux结果解析:
    VSZ     //Virtual memory SiZe,虚拟内存集
    RSS     //ReSident Size,常驻内存集
    STAT    //进程状态
    TIME    //运行时的累积时长
    
//ps命令结果解析:
    NI      //nice值
    PRI     //优先级
    PSR     //进程运行在哪个CPU核心上
    RTPTRIO //实时优先级
    C       //运行的CPU编号
    STIME   //进程的启动时间
    VSZ     //Virtual memory SiZe,虚拟内存集
    RSS     //ReSident Size,常驻内存集
    STAT    //进程状态
    TIME    //运行时的累积时长

pstree用于显示当前系统上的进程树

[root@yigejuhao ~]# yum -y install psmisc
[root@yigejuhao ~]# pstree   (查看进程)
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─agetty
        ├─auditd───{auditd}
        ├─chronyd
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─polkitd───5*[{polkitd}]
        ├─rngd───{rngd}
        ├─sshd─┬─sshd───sshd───bash───pstree
        │      └─sshd───sshd───sftp-server
        ├─sssd─┬─sssd_be
        │      └─sssd_nss
        ├─systemd───(sd-pam)
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        └─tuned───3*[{tuned}]


pgrep(以grep风格指定只显示哪些进程,在当前系统中找符合某些特性的进程。只显示进程号)
[root@yigejuhao ~]# pgrep sshd
899
1468
1483
1490
1509

[root@yigejuhao ~]# pgrep -l -u root (显示root相关程序)
1 systemd
2 kthreadd
3 rcu_gp
4 rcu_par_gp
6 kworker/0:0H-kblockd
7 kworker/u256:0-events_unbound
8 mm_percpu_wq
9 ksoftirqd/0
10 rcu_sched

[root@yigejuhao ~]# pgrep -l -t tty1  (显示指定终端相关程序)
902 agetty

[root@yigejuhao ~]# ps -ef|grep sshd
root        1468     899  0 13:47 ?        00:00:00 sshd: root [priv]
root        1483    1468  0 13:47 ?        00:00:00 sshd: root@pts/0
root        1490     899  0 13:47 ?        00:00:00 sshd: root [priv]
root        1509    1490  0 13:47 ?        00:00:00 sshd: root@notty
root        1842    1484  0 16:17 pts/0    00:00:00 grep --color=auto sshd

pidof(根据进程名查找其PID号)
[root@yigejuhao ~]# pidof sshd
1509 1490 1483 1468 899

[root@yigejuhao ~]# pidof less
1894

vmstat虚拟内存状态查看命令

[root@yigejuhao ~]# vmstat 2   (每两秒刷新一次)
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 329508   3268 256572    0    0    23     4   46   97  0  0 99  0  0
 0  0      0 329448   3268 256560    0    0     0     0   61  122  0  0 100  0  0
 0  0      0 329448   3268 256560    0    0     0     0   60  119  0  0 100  0  0
 
[root@yigejuhao ~]# vmstat 2 5 (每2秒刷新一次,刷新5次后退出)


[root@yigejuhao ~]# vmstat (报告虚拟内存的统计信息)

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 350072   3268 288036    0    0   184    31   75  189  1  1 97  1  0
 
 
procs:
r(running)表示等待运行的队列长度,也即等待运行的进程的个数
b(block)表示阻塞队列长度,也即处于不可中断睡眠态的进程个数
memory:
swpd:交换内存的使用总量 free:空闲物理内存总量 buffer:用于自身的内存总量 cache:用于自身的内存总量
swap:
 si(swap in)表示从物理内存有多少页面换进swap,也即数据进入swap的数据速率(kb/s)
 so(swap out)表示从swap有多少页面换进物理内存,也即数据离开swap的数据速率(kb/s)
io:
 bi(block in)表示磁盘块有多少个被调入内存中,也即从块设备读入数据到系统的速率(kb/s)
 bo(block out)表示有多少个磁盘块从内存中被同步到硬盘上去了,也即保存数据至块设备的速率(kb/s)
system:
 in( interrupts)表示中断的个数,也即中断速率(kb/s)
 cs(context switch)表示上下文切换的次数,也即进程切换速率(kb/s)
CPU:
 us:表示用户空间   sy:表示内核空间   id:表示空闲百分比   wa:表示等待IO完成所占据的时间百分比
 st:表示steal,被虚拟化技术偷走的时间(比如运行虚拟机)

控制作业

[root@yigejuhao ~]# sleep 10;ls  (5秒后执行ls命令)
[root@yigejuhao ~]# sleep 5&&ll  (5秒后执行ll命令)

[root@yigejuhao ~]# sleep 600&   (在命令后面跟上&,可以生成一个后台作业)
[1] 1441

[root@yigejuhao ~]# jobs  (查看当前所有后台作业)
[1]+ 运行中

[root@yigejuhao ~]# sleep 1000 &  (生成一个后台作业)
[2] 1442

[root@yigejuhao ~]# jobs 
[1]- 运行中      sleep 600 & 
[2]+ 运行中      sleep 1000 &

[root@yigejuhao ~]# fg %1  (将后台作业调到前台运行,%加数字 指定当前后台作业调至前台运行)
sleep 600

^Z
[1]+ 已停止        sleep 600


ctrl+c终止   ctrl+z停止

[root@yigejuhao ~]# jobs
[1]+ 已停止 sleep 600
[2]- 运行中 sleep 1000 &

[root@yigejuhao ~]# bg %1 (将后台已停止的作业重新运行)
[1]+ sleep 600 &

[root@yigejuhao ~]# jobs  (查看当前所有后台作业)
[1]- 运行中 sleep 600 &
[2]+ 运行中 sleep 1000 &

[root@yigejuhao ~]# kill %1 (杀死指定作业)
[root@yigejuhao ~]# jobs 
[1]- Terminated sleep 600
[2]+ 运行中 sleep 1000 &

+     //命令将默认操作的作业ca
-     //命令将第二个默认操作的作业

进程间通信

进程间通信(IPC:Inter Process Communication)

进程间通信方式:

同一主机:共享内存,信号:Signal

不同主机:rpc:remote procecure call,基于socket实现进程间通信

使用信号控制进程

信号是传递至进程的软件中断。信号向执行中的程序报告事件。生成信号的事件可以是错误或外部事件(如I/O请求或计时器过期),或者来自于明确请求(如使用信号发送命令)

下表列出了系统管理员用于日常进程管理的基本信号。请通过短名称(HUP)或正确名称(SIGHUP)指代信号。

  • 指定一个信号的方法:
    • 信号号码(数字标识):kill -1
    • 信号完整名称:kill -SIGKILL
    • 信号简写名称:kill -TERM或kill -KILL或kill -INT或kill -HUP

基本进程管理信号

信号编号 ID 短名称 定义 用途
1 HUP 挂起 让一个进程不用重启就可以重读配置文件,并让新的配置信息生效
2 INT 键盘中断 中断一个前台进程。ctrl+c就是用的SIGINT信号
9 KILL 中断,无法拦截 导致立即终止程序。无法被拦截、忽略或处理
15 默认值 TERM 终止 导致程序终止。和SIGKILL不同,可以被拦截、忽略或处理。要求程序终止的友好方式,允许自我清理

用户可以中断自己的进程,但只有root才能终止由其他人拥有的进程。

kill命令根据ID向进程发送信号。虽其名称为kill,但该命令可用于发送任何信号,而不仅仅是终止程序的信号

[root@yigejuhao ~]# kill -l     (显示所有可用的信号)
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	


[root@yigejuhao ~]# ps -ef|grep sleep 
root 1442 1415 0 08:16 pts/0 00:00:00 sleep 1000 
root 1444 1415 0 08:19 pts/0 00:00:00 grep --color=auto sleep


[root@yigejuhao ~]# killall sleep (将匹配的进程名的进程全部杀死)
[root@yigejuhao ~]# ps -ef|grep sleep 
root 1453 1415 0 08:20 pts/0 00:00:00 grep --color=auto sleep 
[2]+ Terminated             sleep 1000

[root@yigejuhao ~]# grep 'model name' /proc/cpuinfo 
model name : Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz

[root@yigejuhao ~]# uptime
08:21:40 up 8 min, 2 users, load average: 0.01, 0.16, 0.15 


 
[root@yigejuhao ~]# top
top - 16:38:44 up  2:52,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 129 total,   1 running, 128 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :    791.5 total,    320.7 free,    216.7 used,    254.1 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.    444.1 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                   
      1 root      20   0  179120  13668   9312 S   0.0   1.7   0:01.90 systemd                                                   
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd                                                  
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                    
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                                                
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd                                      
      7 root      20   0       0      0      0 I   0.0   0.0   0:00.03 kworker/u256:0-events_unbound   
//常用选项: 
-d //设置延迟时长,top -d 1表示每隔1秒刷新一次,默认每隔5秒刷新 
-b //批模式翻屏显示,默认只实时显示一屏,若要显示后面的进程信息则可使用-b选项,与-n 
#合用,可指定显示翻#屏 
load average:1分钟,5分钟,15分钟 
  load average //CPU队列中等待运行的任务的个数 
  cpu(s):多颗CPU平均负载,按1键显示每颗CPU平均负载。
  us //表示用户空间; 
  sy //表示内核空间; 
  ni //表示调整nice值,CPU占用的比率; 
  id //表示空闲百分比;
  wa //表示等待IO完成所占据的时间百分比;
  hi //表示hard interrupt,硬件中断占据的时间百分比; 
  si //表示软中断占据的时间百分比; 
  st //表示steal,被虚拟化技术偷走的时间(比如运行虚拟机)
  PR //优先级 
  NI //nice值 
  VIRT //虚拟内存集
  RES //常驻内存集 
  SHR //共享内存大小 
  S //进程状态 
  
  //top命令交互式子命令:
  M //根据驻留内存大小进行排序,默认根据CPU百分比排序
  P //根据CPU使用百分比进行排序 
  T //根据累计时间(占据CPU时长)进行排序 
  l //是否显示平均负载和启动时间 
  t //是否显示进程和CPU状态相关信息
  m //是否显示内存相关信息 
  c //是否显示完整的命令行信息 
  q //退出top命令
  k //终止某个进程 
  1 //显示所有CPU的信息 
  s //修改刷新时间间隔

RPM包安装

 -i: 安装
    -v: 显示详细信息
    -h: 显示安装进度条
    --test: 测试安装,但不真正执行安装过程
    --nodeps: 忽略依赖关系
    --replacepkgs: 重新安装,替换原有安装
    --oldpackage: 降级
    --force: 强行安装,可以实现重装或降级
    --nodigest: 不检查包的完整性
    --nosignature: 不检查包的来源合法性
    --noscripts: 不执行程序包脚本片断
        %pre:安装前脚本    --nopre
        %post:安装后脚本    --nopost
        %preun:卸载前脚本    --nopreun
        %postun:卸载后脚本    --nopostun
    
//安装软件包, 需要指定软件包绝对路径
[root@yigejuhao ~]# rpm -ivh /mnt/BaseOS/Packages/tree-1.7.0-15.el8.x86_64.rpm
Verifying...                      ################################# [100%] 
准备中...                      ################################# [100%]
正在升级/安装...
           1:tree-1.7.0-15.el8 ################################# [100%]
           
//在软件包所在目录下可以不指定绝对路径
[root@yigejuhao ~]# cd /mnt/BaseOS/Packages/ 
[root@yigejuhao Packages]# rpm -ivh zsh-5.5.1-6.el8_1.2.x86_64.rpm
Verifying...                      ################################# [100%]
准备中...                     ################################# [100%]
正在升级/安装...
           1:zsh-5.5.1-6.el8_1.2 ################################# [100%]
           
//测试一个软件包是否能在该系统上安装
[root@yigejuhao Packages]# rpm -ivh --test /mnt/BaseOS/Packages/tree-1.7.0- 15.el8.x86_64.rpm 
Verifying...                      ################################# [100%]
准备中...                     ################################# [100%]
     软件包 tree-1.7.0-15.el8.x86_64 已经安装

RPM包查询

rpm -q PACKAGE_NAME //查询指定的包是否已安装 
rpm -qa //查询已经安装的所有包 
rpm -qi PACKAGE_NAME //查询指定包的说明信息 
rpm -ql PACKAGE_NAME //查询指定软件包安装后生成的文件列表
rpm -qf /path/to/somefile //查询指定的文件是由哪个rpm包安装生成的 
rpm -qc PACKAGE_NAME //查询指定包安装的配置文件 
rpm -qd PACKAGE_NAME //查询指定包安装的帮助文件 
rpm -q --scripts PACKAGE_NAME //查询指定包中包含的脚本
rpm -q --whatprovides CAPABILITY //查询指定的CAPABILITY(能力)由哪个包所提供 
  如:rpm -q --whatprovides /bin/cat
rpm -q --whatrequires CAPABILITY //查询指定的CAPABILITY被哪个包所依赖 
rpm -q --changelog COMMAND //查询COMMAND的制作日志 
rpm -q --scripts PACKAGE_NAME //查询指定软件包包含的所有脚本文件
rpm -qR PACKAGE_NAME //查询指定的软件包所依赖的CAPABILITY
rpm -q --provides PACKAGE_NAME //列出指定软件包所提供的CAPABILITY 
rpm -qpi /PATH/TO/PACKAGE_FILE //查询指定未安装包的说明信息 
rpm -qpl /PATH/TO/PACKAGE_FILE //查询未安装的软件包会产生哪些文件


//查询vsftpd这个rpm包是否安装 
[root@yigejuhao Packages]# rpm -q vsftpd 
vsftpd-3.0.3-31.el8.x86_64

//查询rpm包相关的配置文件 
[root@yigejuhao Packages]# rpm -qc vsftpd 
/etc/logrotate.d/vsftpd 
/etc/pam.d/vsftpd 
/etc/vsftpd/ftpusers 
/etc/vsftpd/user_list 
/etc/vsftpd/vsftpd.conf

//查询配置文件或命令来自于哪个rpm包
[root@yigejuhao Packages]# rpm -qf /usr/sbin/vsftpd 
vsftpd-3.0.3-31.el8.x86_64

RPM包升级

rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE //如果装有老版本的,则升级;否则,则安装
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE //如果装有老版本的,则升级;否则,退出 --oldpackage:降级 

[root@yigejuhao ~]# rpm -Uvh /mnt/BaseOS/Packages/tree-1.7.0-15.el8.x86_64.rpm 
Verifying...                          ################################# [100%] 
准备中...                         ################################# [100%] 
     软件包 tree-1.7.0-15.el8.x86_64 已经安装 

RPM包卸载

//先查询, 然后卸载

[root@yigejuhao ~]# rpm -qa |grep vsftpd 
vsftpd-3.0.3-31.el8.x86_64 
[root@yigejuhao ~]# rpm -e vsftpd 

yum工具的使用

挂载光盘

[root@yigejuhao ~]# mount /dev/cdrom /mnt
mount: /mnt: WARNING: device write-protected, mounted read-only.

[root@yigejuhao ~]# ls /mnt/
BaseOS EFI images isolinux media.repo Minimal TRANS.TBL

yum的配置文件

配置文件有哪些:

/etc/yum.conf 作用:为所有仓库提供公共配置

/etc/yum.repos.d/*.repo 作用:为仓库的指向提供配置

yum的repo配置文件中可用的变量:

$releaseversion:当前OS的发行版的主版本号

$arch:平台类型

$basearch:基础平台

为yum定义repo文件:

[Repo_Name]:仓库名称
name:描述信息
baseurl:仓库的具体路径,接受以下三种类型
    ftp://
    http://
    file:///
enabled:可选值{1|0},1为启用此仓库,0为禁用此仓库
gpgcheck:可选值{1|0},1为检查软件包来源合法性,0为不检查来源
    如果gpgcheck设为1,则必须用gpgkey定义密钥文件的具体路径
    gpgkey=/PATH/TO/KEY
vim /etc/yum.conf
cachedir=/var/cache/yum/$basearch/$releasever   //缓存目录
keepcache=0     //缓存软件包, 1启动 0 关闭
debuglevel=2    //调试级别
logfile=/var/log/yum.log    //日志记录位置
exactarch=1     //检查平台是否兼容
obsoletes=1     //检查包是否废弃
gpgcheck=1      //检查来源是否合法,需要有制作者的公钥信息
plugins=1       //是否启用插件
tolerant={1|0}  //容错功能,1为开启,0为关闭,当设为0时,如果用yum安装多个软件包且其中某个软件包已经安装过就会报错;当设为1时,当要安装的软件已经安装时自动忽略
installonly_limit=5
bugtracker_url
# metadata_expire=90m //每小时手动检查元数据
# in /etc/yum.repos.d   //包含repos.d目录 

yum本地仓库

复制光盘内容到yum服务器

[root@yigejuhao ~]# mkdir /opt/myrepo 
[root@yigejuhao ~]# cp -r /mnt/* /opt/myrepo/
[root@yigejuhao ~]# ls /opt/myrepo/
BaseOS  EFI  images  isolinux  media.repo  Minimal  TRANS.TBL

配置repo文件

[root@yigejuhao ~]# vim /etc/yum.repos.d/myrepo.repo 
[AppStream]
name=appstream
baseurl=file:///opt/myrepo/AppStream
gpgcheck=0
enabled=1
[BaseOS]
name=baseos
baseurl=file:///opt/myrepo/BaseOS
gpgcheck=0
enabled=1


[root@yigejuhao ~]# ls /mnt/BaseOS/
Packages  repodata
[root@yigejuhao ~]# ls /mnt/AppStream/

[root@yigejuhao ~]# yum -y install vsftpd

[root@yigejuhao ~]# yum info vsftpd   (查看安装包的详细信息)

[root@yigejuhao ~]# yum provides *bin/ls


[root@yigejuhao ~]# rpm -qc vsftpd 
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
[root@yigejuhao ~]# yum provides /etc/vsftpd/vsftpd.conf
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
上次元数据过期检查:0:11:07 前,执行于 2021年04月30日 星期五 13时51分59秒。
vsftpd-3.0.3-32.el8.x86_64 : Very Secure Ftp Daemon
仓库        :@System
匹配来源:
文件名    :/etc/vsftpd/vsftpd.conf

vsftpd-3.0.3-32.el8.x86_64 : Very Secure Ftp Daemon
仓库        :AppStream
匹配来源:
文件名    :/etc/vsftpd/vsftpd.conf


[root@yigejuhao ~]# rm -f /etc/vsftpd/vsftpd.conf        
[root@yigejuhao ~]# ls /etc/vsftpd/vsftpd.conf
ls: 无法访问'/etc/vsftpd/vsftpd.conf': No such file or directory

[root@yigejuhao ~]# yum -y install vsftpd
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
上次元数据过期检查:0:12:46 前,执行于 2021年04月30日 星期五 13时51分59秒。
软件包 vsftpd-3.0.3-32.el8.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!
  
[root@yigejuhao ~]# yum -y reinstall vsftpd    (重新安装)

清空yum本地缓存

[root@yigejuhao ~]# yum clean all
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
20 文件已删除

检验yum本地仓库

[root@yigejuhao ~]# yum list all
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
CentOS-8 - AppStream           96% [============================- ] 817 kB/s | 6.0 MB     00:00 ETCentOS-8 - AppStream   1.2 MB/s | 6.0 MB     00:05  

yum网络仓库

[root@yigejuhao ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo \http://mirrors.aliyun.com/repo/Centos-8.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2595  100  2595    0     0  13307      0 --:--:-- --:--:-- --:--:-- 13239

yum命令语法

[root@yigejuhao ~]#  yum list installed  (列出所有已安装包)
wget.x86_64                                1.19.5-10.el8                                  @AppStream
which.x86_64                               2.21-12.el8                                    @anaconda 
xfsprogs.x86_64                            5.0.0-2.el8                                    @anaconda 
xz.x86_64                                  5.2.4-3.el8                                    @anaconda 
xz-libs.x86_64                             5.2.4-3.el8                                    @anaconda 
yum.noarch                                 4.2.17-6.el8                                   @anaconda 
zlib.x86_64                                1.2.11-16.el8_2                                @BaseOS   
zlib-devel.x86_64                          1.2.11-16.el8_2                                @BaseOS   

[root@yigejuhao ~]# yum repolist     (显示repo列表及其简要信息)
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
仓库标识                            仓库名称
AppStream                           CentOS-8 - AppStream
BaseOS                              baseos
base                                CentOS-8 - Base - mirrors.aliyun.com
extras                              CentOS-8 - Extras - mirrors.aliyun.com

[root@yigejuhao ~]# yum -y install tree   (安装tree包)
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
上次元数据过期检查:0:01:57 前,执行于 2021年04月23日 星期五 08时36分00秒。
软件包 tree-1.7.0-15.el8.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!

[root@yigejuhao ~]# yum remove tree      (删除tree包)
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
依赖关系解决。
====================================================================================================
 软件包              架构                  版本                          仓库                  大小
====================================================================================================
移除:
 tree                x86_64                1.7.0-15.el8                  @base                109 k

事务概要
====================================================================================================
移除  1 软件包

将会释放空间:109 k
确定吗?[y/N]: y
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
  准备中  :                                                                                     1/1 
  删除    : tree-1.7.0-15.el8.x86_64                                                            1/1 
  运行脚本: tree-1.7.0-15.el8.x86_64                                                            1/1 
  验证    : tree-1.7.0-15.el8.x86_64                                                            1/1 

已移除:
  tree-1.7.0-15.el8.x86_64                                                               
完毕!

[root@yigejuhao ~]# yum info tree        (显示rpm -qi tree的结果)
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
上次元数据过期检查:0:04:58 前,执行于 2021年04月23日 星期五 08时36分00秒。
可安装的软件包
名称         : tree
版本         : 1.7.0
发布         : 15.el8
架构         : x86_64
大小         : 59 k
源           : tree-1.7.0-15.el8.src.rpm
仓库         : BaseOS
概况         : File system tree viewer
URL          : http://mama.indstate.edu/users/ice/tree/
协议         : GPLv2+
描述         : The tree utility recursively displays the contents of directories in a
             : tree-like format.  Tree is basically a UNIX port of the DOS tree
             : utility.

名称         : tree
版本         : 1.7.0
发布         : 15.el8
架构         : x86_64
大小         : 59 k
源           : tree-1.7.0-15.el8.src.rpm
仓库         : base
概况         : File system tree viewer
URL          : http://mama.indstate.edu/users/ice/tree/
协议         : GPLv2+
描述         : The tree utility recursively displays the contents of directories in a
             : tree-like format.  Tree is basically a UNIX port of the DOS tree
             : utility.

[root@yigejuhao ~]# yum provides tree
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
上次元数据过期检查:0:11:24 前,执行于 2021年04月23日 星期五 08时36分00秒。
tree-1.7.0-15.el8.x86_64 : File system tree viewer
仓库        :base
匹配来源:
提供    : tree = 1.7.0-15.el8

tree-1.7.0-15.el8.x86_64 : File system tree viewer
仓库        :BaseOS
匹配来源:
提供    : tree = 1.7.0-15.el8

[root@yigejuhao ~]# yum provides /*bin/tree  (查看指定的文件或特性是由哪个包安装生成的)
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
上次元数据过期检查:0:11:59 前,执行于 2021年04月23日 星期五 08时36分00秒。
tree-1.7.0-15.el8.x86_64 : File system tree viewer
仓库        :base
匹配来源:
文件名    :/usr/bin/tree

tree-1.7.0-15.el8.x86_64 : File system tree viewer
仓库        :BaseOS
匹配来源:
文件名    :/usr/bin/tree

[root@yigejuhao ~]# yum search tree        (指定的关键字搜索程序包名及summary信息)
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
上次元数据过期检查:0:16:03 前,执行于 2021年04月23日 星期五 08时36分00秒。
===================================== 名称 和 概况 匹配:tree ======================================
tree.x86_64 : File system tree viewer
osbuild-ostree.noarch : OSTree support
texlive-pst-tree.noarch : Trees, using pstricks
ostree-grub2.x86_64 : GRUB2 integration for OSTree
ostree-libs.i686 : Development headers for ostree
ostree-libs.x86_64 : Development headers for ostree
ostree-devel.i686 : Development headers for ostree
ostree-devel.x86_64 : Development headers for ostree
rpm-ostree-libs.i686 : Shared library for rpm-ostree
rpm-ostree-libs.x86_64 : Shared library for rpm-ostree
perl-File-CheckTree.noarch : Run many file-test checks on a tree
ostree.i686 : Tool for managing bootable, immutable filesystem trees
ostree.x86_64 : Tool for managing bootable, immutable filesystem trees
subscription-manager-plugin-ostree.x86_64 : A plugin for handling OSTree content.
greenboot-rpm-ostree-grub2.x86_64 : Scripts for greenboot on rpm-ostree-based systems using the
                                  : Grub2 bootloader
========================================= 名称 匹配:tree ==========================================
rpm-ostree.x86_64 : Hybrid image/package system
git-subtree.x86_64 : Git tools to merge and split repositories
========================================= 概况 匹配:tree ==========================================
hardlink.x86_64 : Create a tree of hardlinks
golang-src.noarch : Golang compiler source tree
perl-File-Path.noarch : Create or remove directory trees
baobab.x86_64 : A graphical directory tree analyzer
cscope.x86_64 : C source code tree search and browse tool
perl-Class-ISA.noarch : Report the search path for a class's ISA tree
perl-B-Debug.noarch : Walk Perl syntax tree, print debug information about op-codes
python2-lxml.x86_64 : XML processing library combining libxml2/libxslt with the ElementTree API
python3-lxml.x86_64 : XML processing library combining libxml2/libxslt with the ElementTree API
python38-lxml.x86_64 : XML processing library combining libxml2/libxslt with the ElementTree API


[root@yigejuhao ~]# yum deplist tree          (显示指定包的依赖关系)
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
上次元数据过期检查:0:17:37 前,执行于 2021年04月23日 星期五 08时36分00秒。
package: tree-1.7.0-15.el8.x86_64
  dependency: libc.so.6(GLIBC_2.4)(64bit)
   provider: glibc-2.28-127.el8.x86_64
  dependency: rtld(GNU_HASH)
   provider: glibc-2.28-127.el8.i686
   provider: glibc-2.28-127.el8.x86_64

package: tree-1.7.0-15.el8.x86_64
  dependency: libc.so.6(GLIBC_2.4)(64bit)
   provider: glibc-2.28-127.el8.x86_64
  dependency: rtld(GNU_HASH)
   provider: glibc-2.28-127.el8.i686
   provider: glibc-2.28-127.el8.x86_64


[root@yigejuhao ~]# yum history     (查看yum的历史事务信息)
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
ID     | 命令行                   | 日期和时间       | 操作           | 更改   
-------------------------------------------------------------------------------
    16 | remove tree              | 2021-04-23 08:39 | Removed        |    1   
    15 | -y install tree          | 2021-04-23 08:36 | Install        |    1   
    14 | -y install bash-com*     | 2021-04-23 08:01 | Install        |    1   
    13 | -y install mariadb*      | 2021-04-01 16:08 | Upgrade        |   16   
    12 | -y install expat-devel l | 2021-04-01 15:42 | I, U           |    8   
    11 | -y install gcc gcc-c++ p | 2021-04-01 15:40 | I, U           |   25   
    10 | -y install vim           | 2021-04-01 15:36 | Install        |    4   
     9 | -y install bzip2         | 2021-04-01 15:35 | Install        |    1   
     8 | -y install tar           | 2021-04-01 15:32 | Install        |    1   
     7 | -y install wget          | 2021-04-01 15:29 | Install        |    1   
     6 | -y install samba*        | 2020-12-22 15:05 | I, U           |   41   
     5 | -y install mariadb*      | 2020-12-15 14:41 | I, U           |  121   
     4 | -y install unzip         | 2020-12-14 18:52 | Install        |    1   
     3 | -y install lrzsz         | 2020-12-14 18:51 | Install        |    1   
     2 | -y install httpd         | 2020-12-14 18:50 | Install        |   10   
     1 |                          | 2020-12-01 18:43 | Install        |  358 EE

[root@yigejuhao ~]# yum grouplist   (列出可用的包组)
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
上次元数据过期检查:0:22:22 前,执行于 2021年04月23日 星期五 08时36分00秒。
可用环境组:
   带 GUI 的服务器
   服务器
   工作站
   虚拟化主机
   定制操作系统
已安装的环境组:
   最小安装
可用组:
   容器管理
   .NET 核心开发
   RPM 开发工具
   开发工具
   图形管理工具
   无头系统管理
   传统 UNIX 兼容性
   网络服务器
   科学记数法支持
   安全性工具
   智能卡支持
   系统工具



[root@xiaoyanyuan ~]# yum history info 2
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
事务 ID: 2
起始时间    : 2021年04月30日 星期五 13时32分02秒
起始 RPM 数据库     : 442:a9ec4629f1617a4aa8ad65fe3c1c565f5a2d5be0
结束时间       : 2021年04月30日 星期五 13时32分07秒 (5 秒)
结束 RPM 数据库      : 446:59ff65317c911d82aea3b1e313e6a48051f75f77
用户           : root <root>
返回码    : 成功
Releasever     : 8
命令行   : -y install vim
已改变的包:
    安装 gpm-libs-1.20.7-15.el8.x86_64           @AppStream
    安装 vim-common-2:8.0.1763-15.el8.x86_64     @AppStream
    安装 vim-enhanced-2:8.0.1763-15.el8.x86_64   @AppStream
    安装 vim-filesystem-2:8.0.1763-15.el8.noarch @AppStream






[root@yigejuhao ~]# yum -y groups mark install "Development tools" (安装一整个组的软件)
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
上次元数据过期检查:0:01:57 前,执行于 2021年04月23日 星期五 08时59分46秒。
依赖关系解决。


[root@yigejuhao ~]# yum makecache  (元数据建立)
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
CentOS-8 - AppStream                                                5.9 kB/s | 4.3 kB     00:00    
CentOS-8 - Base - mirrors.aliyun.com                                 32 kB/s | 3.9 kB     00:00    
CentOS-8 - Extras - mirrors.aliyun.com                               11 kB/s | 1.5 kB     00:00    
baseos                                                              3.8 MB/s | 3.9 kB     00:00    
元数据缓存已建立。

[root@xiaoyanyuan ~]# ls /var/cache/
dnf  krb5rcache  ldconfig  man  private  realmd
[root@xiaoyanyuan ~]# ls /var/cache/dnf/
AppStream-a520ed22b0a8a736  BaseOS-filenames.solvx   extras-filenames.solvx  tempfiles.json
AppStream-filenames.solvx   BaseOS.solv              extras.solv
AppStream.solv              expired_repos.json       last_makecache
BaseOS-929b586ef1f72f69     extras-2770d521ba03e231  packages.db


[root@xiaoyanyuan ~]# rpm -qa|grep httpd
centos-logos-httpd-80.5-2.el8.noarch
httpd-tools-2.4.37-30.module_el8.3.0+561+97fdbbcc.x86_64
httpd-filesystem-2.4.37-30.module_el8.3.0+561+97fdbbcc.noarch
httpd-2.4.37-30.module_el8.3.0+561+97fdbbcc.x86_64

这里写自定义目录标题

上一篇:【Rust日报】 2019-04-28:一家金融公司已经把 Rust 用在高频交易领域


下一篇:2021年广州外国语学校中考二模英语试题