Linux笔记 Day06---(通配符;系统管理命令:ls、pwd、cd、date、hwclock、clock、passwd;passwd文件和shadow文件;配置yum源)

一、命令行通配符

通配符 含义
* 匹配任意长度的任意字符
匹配任意单个字符
[] 匹配指定范围内的单个字符
[^] 匹配指定范围外的单个字符

1. 字母

小写字母:[a-z]或[[:lower:]]
非小写字母:[^ a-z]或[^ [:lower:] ]
大写字母:[A-Z]或[[:upper:]]
非大写字母:[^ A-Z]或[^ [:upper:] ]
所有字母:[[:alpha:]]
非字母:[^ [:alpha:] ]

2. 数字

一位数字:[0-9]
两位数字:[0-9][0-9]
三位、四位……以此类推
所有数字:[[:digit:]]
非数字:[^ 0-9]或[^ [:digit:] ]

3. 空白字符

一个空白字符:[[:space:]]
非空白字符:[^ [:space:] ]

4. 标点符号

所有标点符号:[[:punct:]]
非标点符号:[^ [:punct:] ]

举例:

1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录;

[root@admin ~]# ls /var/l?[[:lower:]]
或者:
[root@admin ~]# ls /var/l?[a-z

2:显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;

[root@admin ~]# ls /etc/[0-9]*[^0-9][root@admin ~]# ls /etc/[[:digit:]]*[^[:digit:]][root@admin ~]# ls /etc/[[:digit:]]*[^0-9][root@admin ~]# ls /etc/[0-9]*[^[:digit:]]

3:显示/etc目录下,以非字母开头,后面跟一个字母及其它任意长度任意字符的文件或目录;

[root@admin ~]# ls /etc/[^[:alpha:]][[:alpha:]]*

4:复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/magedu.com目录;

[root@admin ~]# cp -r /etc/m*[^0-9]  /tmp/magedu.com/[root@admin ~]# cp -r /etc/m*[^[:digit:]]  /tmp/magedu.com/

5:复制/usr/share/man目录下,所有以man开头,后跟一位数数字结尾的文件或目录至/tmp/man/目录下;

[root@admin ~]# cp -r /usr/share/man/man[0-9]  /tmp/man/[root@admin ~]# cp -r /usr/share/man/man[[:digit:]]  /tmp/man/

那如果该题换成这样:
复制/usr/share/man目录下,所有以man开头,后跟两位数数字结尾的文件或目录至/tmp/man/目录下:

[root@admin ~]# cp -r /usr/share/man/man[0-9][0-9]  /tmp/man/[root@admin ~]# cp -r /usr/share/man/man[[:digit:]]  /tmp/man/

再改:
复制/usr/share/man目录下,所有以man开头,后跟数字结尾的文件或目录至/tmp/man/目录下:

#那就只能这样写了
[root@admin ~]# cp -r /usr/share/man/man[[:digit:]]  /tmp/man/

6:复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下;

[root@admin ~]# cp -r /etc/[mnrp]*.conf  /tmp/conf.d/

7.显示当前目录下以第一个以标点符号开头,第三个为空格,第四个为字母,最后以.txt结尾的文件

[root@admin test]# ll
总用量 0
-rw-r--r--. 1 root root 0 7月  11 22:36 !2 linux     2.txt
-rw-r--r--. 1 root root 0 7月  11 22:36 ,2 linux2.txt
-rw-r--r--. 1 root root 0 7月  11 22:45 ,t  pox.txt
[root@admin test]# ll [[:punct:]]?[[:space:]][[:alpha:]]*.txt
-rw-r--r--. 1 root root 0 7月  11 22:36 !2 linux     2.txt
-rw-r--r--. 1 root root 0 7月  11 22:36 ,2 linux2.txt

二、常见系统管理类命令

(一)显示指定工作目录下内容的命令 ls

ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似。当执行ls命令时,默认显示的只有非隐藏文件的文件名、以文件名进行排序及文件名代表的颜色显示。当不加参数时,默认列出当前目录的列表信息。ls命令使用频率非常高,选项也非常多,这里介绍一部分常用的参数,其他参数可以通过man命令查看帮助手册。
说明:在linux下,文件名以点.开头表示该文件为隐藏文件,如.bashrc

dir命令与ls命令功能及用法类似,但稍有差别
在这里插入图片描述

命令格式
ls [选项] [目录或文件名]

命令选项
-a:–all的缩写,显示所有的文件,包括隐藏文件(以.开头的文件),

[root@admin ~]# ls -a
.   anaconda-ks.cfg  .bash_logout   .bashrc  .lesshst  test
..  .bash_history    .bash_profile  .cshrc   .tcshrc   .viminfo

-A:–almost-all的缩写,显示所有的文件,包括隐藏文件,但不包括表示当前目录.和上级目录…这两个文件

[root@admin ~]# ls -A
anaconda-ks.cfg  .bash_logout   .bashrc  .lesshst  test
.bash_history    .bash_profile  .cshrc   .tcshrc   .viminfo

-l:列出长数据串,显示出文件的属性与权限等数据信息(常用)

#ll是ls -l 的别名
[root@admin ~]# ls
anaconda-ks.cfg  test
[root@admin ~]# ll
总用量 4
-rw-------. 1 root root 1588 6月  29 17:12 anaconda-ks.cfg
drwxr-xr-x. 2 root root   84 7月  11 22:47 test

-d:–directory的缩写,仅列出目录本身,而不是列出目录里的内容列表

[root@admin sysconfig]# ls -d
.
[root@admin sysconfig]# ll -d
drwxr-xr-x. 6 root root 4096 7月  10 10:07 .

-f:直接列出结果,而不进行排序(ls默认会以文件名排序)

[root@admin ~]# ls -f
.             .bash_profile  .tcshrc          .lesshst
..            .bashrc        anaconda-ks.cfg  test
.bash_logout  .cshrc         .bash_history    .viminfo
[root@admin ~]# ls -a
.   anaconda-ks.cfg  .bash_logout   .bashrc  .lesshst  test
..  .bash_history    .bash_profile  .cshrc   .tcshrc   .viminfo
[root@admin ~]# ls
anaconda-ks.cfg  test

–color[=WHEN]:是否根据文件类型显示颜色,WHEN可以为never、always或者auto
(ls默认显示文件的颜色)
在这里插入图片描述
–full-time:以完整的实际模式显示(包含年月日时分),类似与ls -l --time-style=full-iso

[root@admin ~]# ls --full-time
总用量 4
-rw-------. 1 root root 1588 2020-06-29 17:12:43.748423188 +0800 anaconda-ks.cfg
drwxr-xr-x. 2 root root   84 2020-07-11 22:47:12.039921907 +0800 test
[root@admin ~]# ll
总用量 4
-rw-------. 1 root root 1588 6月  29 17:12 anaconda-ks.cfg
drwxr-xr-x. 2 root root   84 7月  11 22:47 test

-g:列表显示结果,和-l类似,但是不显示文件所属者。

[root@admin ~]# ll
总用量 4
-rw-------. 1 root root 1588 6月  29 17:12 anaconda-ks.cfg
drwxr-xr-x. 2 root root   84 7月  11 22:47 test
[root@admin ~]# ls -g
总用量 4
-rw-------. 1 root 1588 6月  29 17:12 anaconda-ks.cfg
drwxr-xr-x. 2 root   84 7月  11 22:47 test

-h:·的方式显示
使用“-h”参数时,会根据文件的大小选择显示的单位是“K”、“M”还是“G”。如果希望指定显示的单位,可以使用“–block-size=[k,m,g,t……]”参数,单位 不分大小写

[root@admin ~]# ll
总用量 760836
-rw-------. 1 root root      1588 6月  29 17:12 anaconda-ks.cfg
-rw-r--r--. 1 root root 115343360 7月  12 10:28 mydem1o
-rw-r--r--. 1 root root 314572800 7月  12 10:27 mydemo
-rw-r--r--. 1 root root 349175808 7月  12 10:29 mydemo2
[root@admin ~]# ll -h
总用量 744M
-rw-------. 1 root root 1.6K 6月  29 17:12 anaconda-ks.cfg
-rw-r--r--. 1 root root 110M 7月  12 10:28 mydem1o
-rw-r--r--. 1 root root 300M 7月  12 10:27 mydemo
-rw-r--r--. 1 root root 333M 7月  12 10:29 mydemo2
[root@admin ~]# ll --block-size=G
总用量 1G
-rw-------. 1 root root 1G 6月  29 17:12 anaconda-ks.cfg
-rw-r--r--. 1 root root 1G 7月  12 10:28 mydem1o
-rw-r--r--. 1 root root 1G 7月  12 10:27 mydemo
-rw-r--r--. 1 root root 1G 7月  12 10:29 mydemo2

#这里要注意的是:单位不够1都会进1,单位没有显示的情况下默认是B(字节)

-i:结合-l参数,列出每个文件的inode

[root@admin ~]# ll -i
总用量 4
201326659 -rw-------. 1 root root 1588 6月  29 17:12 anaconda-ks.cfg
134839643 drwxr-xr-x. 2 root root   84 7月  11 22:47 test
[root@admin ~]# ll
总用量 4
-rw-------. 1 root root 1588 6月  29 17:12 anaconda-ks.cfg
drwxr-xr-x. 2 root root   84 7月  11 22:47 test

-n:和-l类似,-n只是显示的所属用户和组所对应的id,而-l只是显示所属用户和组所对应的名称
在这里插入图片描述
-r:–reverse,将排序结果以倒序方式显示

[root@admin ~]# ls
anaconda-ks.cfg  mydem1o  mydemo  mydemo2
[root@admin ~]# ls -r
mydemo2  mydemo  mydem1o  anaconda-ks.cfg

-S:以文件大小排序

[root@admin ~]# ll
总用量 760836
-rw-r--r--. 1 root root 314572800 7月  12 10:27 ademo
-rw-r--r--. 1 root root 115343360 7月  12 10:28 amydemo
-rw-------. 1 root root      1588 6月  29 17:12 anaconda-ks.cfg
-rw-r--r--. 1 root root 349175808 7月  12 10:29 mydemo2
[root@admin ~]# ls
ademo  amydemo  anaconda-ks.cfg  mydemo2
[root@admin ~]# ls -S
mydemo2  ademo  amydemo  anaconda-ks.cfg

-t:以修改时间排序

[root@admin ~]# ll
总用量 760836
-rw-r--r--. 1 root root 314572800 7月  12 10:27 ademo
-rw-r--r--. 1 root root 115343360 7月  12 10:28 amydemo
-rw-------. 1 root root      1588 6月  29 17:12 anaconda-ks.cfg
-rw-r--r--. 1 root root 349175808 7月  12 10:29 mydemo2
[root@admin ~]# ls
ademo  amydemo  anaconda-ks.cfg  mydemo2
[root@admin ~]# ls -t
mydemo2  amydemo  ademo  anaconda-ks.cfg

-c:和-lt一起使用:显示列表并且以ctime(文件状态最后改变时间)排序。和-l一起使用:显示ctime并且以文件名排序。其他情况,以ctime排序。

[root@admin ~]# ls -clt
总用量 760836
-rw-r--r--. 1 root root 115343360 7月  12 10:54 amydemo
-rw-r--r--. 1 root root 314572800 7月  12 10:54 ademo
-rw-r--r--. 1 root root 349175808 7月  12 10:29 mydemo2
-rw-------. 1 root root      1588 6月  29 17:12 anaconda-ks.cfg

(二) 显示当前工作目录的命令 pwd

pwd 是 Print Working Directory 的缩写,其功能是显示当前所在工作目录的全路径。主要用在当不确定当前所在位置时,通过 pwd 来查看当前目录的绝对路径

命令格式
pwd [选项]

命令选项

-L:–logical,显示当前的路径,有连接文件时,直接显示连接文件的路径,(不加参数时默认此方式)

-p:–physical,显示当前的路径,有连接文件时,不使用连接路径,直接显示连接文件所指向的文件。 当包含多层连接文件时,显示连接文件最终指向的文件

[root@admin httpd]# ll
总用量 0
drwxr-xr-x. 2 root root  37 7月  10 10:07 conf
drwxr-xr-x. 2 root root  82 7月  10 10:07 conf.d
drwxr-xr-x. 2 root root 146 7月  10 10:07 conf.modules.d
lrwxrwxrwx. 1 root root  19 7月  10 10:07 logs -> ../../var/log/httpd
lrwxrwxrwx. 1 root root  29 7月  10 10:07 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx. 1 root root  10 7月  10 10:07 run -> /run/httpd
[root@admin httpd]# cd modules
[root@admin modules]# pwd
/etc/httpd/modules
[root@admin modules]# pwd -L
/etc/httpd/modules
[root@admin modules]# pwd -P
/usr/lib64/httpd/modules

(三)改变当前工作目录的命令 cd

cd 是 Change Directory 的缩写,这是用来切换工作目录的命令。

命令格式
cd [相对路径或绝对路径或特殊符号]

说明: 不加参数时,默认切换到用户主目录,即环境变量HOME指定的目录。如root用户的HOME变量为/root,那么cd命令不带参数时便切换到/root目录下;普通用户的HOME变量为/home/用户名,那么cd命令不带参数时便切换到/home/用户名目录下
特殊符号包括~、-、…等。

~表示用户主目录 即HOME变量指定的目录,如root用户的主目录为/root;普通用户为/home/用户名

[root@admin sysconfig]# cd ~
[root@admin ~]# pwd
/root
[dxk@admin bin]$ cd ~
[dxk@admin ~]$ pwd
/home/dxk

-表示前一个工作目录 (返回进入此目录之前所在目录)
l

[root@admin ~]# pwd
/root            #当前在/root下
[root@admin ~]# cd /etc/sysconfig/network-scripts      #当前在/root目录下,使用绝对路径直接进入/etc/sysconfig/network-scripts目录下
[root@admin network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@admin network-scripts]# cd -   # 返回进入此目录之前所在目录,在进入这个目录之前的所在目录是/root,所以返回到/root下
/root
[root@admin ~]# pwd
/root
[root@admin ~]# cd -     #刚才是从/etc/sysconfig/network-scripts目录下进入到/root目录下,所以返回进入此目录之前所在目录就是/etc/sysconfig/network-scripts
/etc/sysconfig/network-scripts

… 表示上级目录

[root@admin sysconfig]# pwd
/etc/sysconfig
[root@admin sysconfig]# cd ..
[root@admin etc]# pwd
/etc
[root@admin etc]# cd ..
[root@admin /]# pwd
/
#/目录(根目录)是系统的一级文件结构,不能再返回上一级了

.表示当前目录

[dxk@admin ~]$ cd /bin
[dxk@admin bin]$ pwd
/bin
[dxk@admin bin]$ cd .
[dxk@admin bin]$ pwd
/bin
[dxk@admin bin]$ cd ..
[dxk@admin /]$ pwd
/
[dxk@admin /]$ cd .
[dxk@admin /]$ pwd
/

cd 路径

切换到 /etc/sysconfig目录下

[root@admin ~]# cd /etc/sysconfig
[root@admin sysconfig]# pwd
/etc/sysconfig

cd
不加参数,是进入用户目录

Ⅰ.root用户的主目录是/root

[root@admin network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@admin network-scripts]# cd
[root@admin ~]# pwd
/root

Ⅱ.普通用户的主目录是/home/用户名

[dxk@admin bin]$ pwd
/bin
[dxk@admin bin]$ cd
[dxk@admin ~]$ pwd
/home/dxk

注意:家目录和主目录一般是相同的

(四)显示或修改系统时间与日期的命令 date

命令语法

date [OPTION]… [+FORMAT]
date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]
其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss为秒数

命令选项

-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u:显示GMT或UTC;

说明:
UTC时间:世界协调时间(UTC)是世界上不同国家用来调节时钟和时间的主要时间标准。也就是零时区的时间

UTC与格林尼治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同。UTC与GMT含义完全相同。

CST(Central Standard Time 国家标准时间)
CST(可以理解为当地时间)同时代表了下面4个时区:
  CST:Central Standard Time (USA) 中部标准时间(美国) UTC -6:00
  CST:Central Standard Time (Australia) 中部标准时间(澳大利亚) UTC 9:30
  CST:China Standard Time 中国标准时间(北京时间) UTC 8:00
  CST: Cuba Standard Time 古巴标准时间 UTC -4:00CST (时区缩写)
  CST可视为美国、澳大利亚、古巴或中国的标准时间。

计算:UTC + 时区差=本地时间

北京时区是东八区,领先UTC 8个小时

日期格式字符串列表 FORMAT
%H 小时(以00-23来表示)。
%I 小时(以01-12来表示)。
%K 小时(以0-23来表示)。
%l 小时(以0-12来表示)。
%M 分钟(以00-59来表示)。
%P AM或PM。
%r 时间(含时分秒,小时以12小时AM/PM来表示)。
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯用法来表示)。
%T 时间(含时分秒,小时以24小时制来表示)。
%X 时间(以本地的惯用法来表示)。
%Z 时区。
%a 星期的缩写。
%A 星期的完整名称。
%b 月份英文名的缩写。
%B 月份的完整英文名称。
%c 日期与时间。只输入date指令也会显示同样的结果。
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%j 该年中的第几天。
%m 月份(以01-12来表示)。
%U 该年中的周数。
%w 该周的天数,0代表周日,1代表周一,异词类推。
%x 日期(以本地的惯用法来表示)。
%y 年份(以00-99来表示)。
%Y 年份(以四位数来表示)。
%n 在显示时,插入新的一行。
%t 在显示时,插入tab。
MM 月份(必要)
DD 日期(必要)
hh 小时(必要)
mm 分钟(必要)
ss 秒(选择性)

格式化输出

[root@admin modules]# date +%Y-%m-%d
2020-07-12
[root@admin modules]# date "+%Y-%m-%d"
2020-07-12
[root@admin modules]# date "+%Y-%m-%d %H:%M:%S"
2020-07-12 11:31:38

输出昨天日期:

[root@admin modules]# date -d "1 day ago"  +"%Y-%m-%d %H:%M:%S"
2020-07-11 11:34:17
[root@admin modules]# date -d yesterday  +"%Y-%m-%d %H:%M:%S"
2020-07-11 11:35:2

10秒、10分,10小时后的时间:

[root@admin modules]# date
2020年 07月 12日 星期日 11:39:01 CST
[root@admin modules]# date -d "+ 10 second"
2020年 07月 12日 星期日 11:39:13 CST
[root@admin modules]# date -d "+ 10 minute"
2020年 07月 12日 星期日 11:49:05 CST
[root@admin modules]# date -d "+ 10 hour"
2020年 07月 12日 星期日 21:39:10 CST
[root@admin modules]# date -d "- 5 hour"
2020年 07月 12日 星期日 06:40:38 CST

传说中的 1234567890 秒:

#显示从1970年1月1日0时0分开始后经过1234567890秒后的日期和时间
[root@admin modules]# date -d "1970-01-01 1234567890 second"
2009年 02月 13日 星期五 23:31:30 CST
#就相当于日历的作用,比如我们要查指定日期的星期
[root@admin modules]# date -d "2222-02-22"
2222年 02月 22日 星期五 00:00:00 CST
[root@admin modules]# date -d "2222-02-22 22:22"
2222年 02月 22日 星期五 22:22:00 CST

普通转格式:

[root@admin modules]# date -d "2020-07-12" +"%Y/%m/%d %H:%M.%S"
2020/07/12 00:00.00

格式转换:

[root@admin modules]# date -d "July 12 ,2020 11:56:33 AM" +"%Y-%m-%d %H:%M.%S"
2020-07-12 11:56.33

格式转换后时间:

[root@admin modules]# date -d "July 12 ,2020 11:56:33 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
2018-07-12 11:56.33

以指定格式显示当前时间

date “+%Y%m%d”
date “+%Y-%m-%d”
date “+%Y-%m-%d %H-%M-%S”
date “+%Y/%m/%d %H:%M:%S”
格式可以自己定
加减操作:
date -d “+1 day” +%Y%m%d #显示后一天的日期
date -d “-1 day” +%Y%m%d #显示前一天的日期
date -d “-1 month” +%Y%m%d #显示上一月的日期
date -d “+1 month” +%Y%m%d #显示下一月的日期
date -d “-1 year” +%Y%m%d #显示前一年的日期
date -d “+1 year” +%Y%m%d #显示下一年的日期

设定时间
date -s #设置当前时间,只有root权限才能设置,其他只能查看

date -s 20000101 #把当前系统日期设置为2020年1月1日,这样会把具体时间设置成空00:00:00

[root@admin ~]# date -s 20000101
2000年 01月 01日 星期六 00:00:00 CST
[root@admin ~]# date
2000年 01月 01日 星期六 00:00:02 CST

date -s 01:01:01 #设置具体时间,不会对日期做更改

[root@admin ~]# date -s 12:12:12
2000年 01月 01日 星期六 12:12:12 CST
[root@admin ~]# date
2000年 01月 01日 星期六 12:12:15 CST

date -s “01:01:01 2018-12-01” #这样可以设置全部时间
date -s “01:01:01 20181201” #这样可以设置全部时间
date -s “2018-12-01 01:01:01” #这样可以设置全部时间
date -s “20182101 01:01:01” #这样可以设置全部时间

[root@admin ~]# date -s "20080808 08:08:08"
2008年 08月 08日 星期五 08:08:08 CST
[root@admin ~]# date -s "2008-08-08 08:08:08"
2008年 08月 08日 星期五 08:08:08 CST
[root@admin ~]# date -s "08:08:08 20080808"
2008年 08月 08日 星期五 08:08:08 CST
[root@admin ~]# date -s "08:08:08 2008-08-08"
2008年 08月 08日 星期五 08:08:08 CST

注意:如果日期和时间同时都要修改必须给参数加上双引号,单个修改时间或者日期双引号可加可不加。修改完系统时间后,如果没有将系统时钟同步到硬件时钟,那么重新登录后设置的时间会失效

在Linux中有硬件时钟与系统时钟两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。所有Linux相关指令与函数都是读取系统时钟的设定。因为存在两种不同的时钟,那么它们之间就会存在差异。

当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。

在Linux中,用于时钟查看和设置的命令主要有datehwclockclock。其中,clock和hwclock用法相近,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系。

用date命令对系统时间进行设置后,并不会去修改硬件时钟,所以系统重启后,系统时间还会去读取硬件时间,这就是为何date设置失效到原因。
因此,需要在设置系统时间后,将系统时间同步到硬件时钟

(五)硬件时钟的命令 hwclock或clock

用于显示或设定硬件时钟 (只有超级用户才能设置硬件时钟)

命令选项 :

-s, --hctosys:以硬件为准,把系统调整为与硬件时间相同(即将系统时间同步到硬件时间)
-w, --systohc:以系统为准,把硬件时间调整为与系统时钟相同(即将硬件时间同步到系统时间)

#查看系统时间和硬件时间

[root@admin ~]# date     #系统时间
2018年 11月 11日 星期日 03:08:07 CST
[root@admin ~]# clock	 #硬件时间
2020年07月12日 星期日 14时34分41秒  -0.263281 秒
[root@admin ~]# hwclock	 #硬件时间
2020年07月12日 星期日 14时34分44秒  -0.977904 秒

#以硬件为准,把系统调整为与硬件时间相同clock -s 或hwclock -s

[root@admin ~]# date
2018年 11月 11日 星期日 03:09:53 CST
[root@admin ~]# clock
2020年07月12日 星期日 14时36分27秒  -0.603692 秒
[root@admin ~]# clock -s     #或者hwclock -s
da[root@admin ~]# date
2020年 07月 12日 星期日 14:36:38 CST

#以系统为准,把硬件时间调整为与系统时间相同 clock -w或hwclock -w

[root@admin ~]# date
2018年 11月 11日 星期日 03:05:10 CST
[root@admin ~]# clock
2020年07月12日 星期日 14时40分33秒  -0.303201 秒
[root@admin ~]# clock -w
[root@admin ~]# clock
2018年11月11日 星期日 03时05分33秒  -0.339284 秒

这样我们就彻底将时间改了,将会一直生效

以上的时间是我们随便给的,那么现在系统时间和硬件时间都已经和当前时间不一样了,这个时候应该怎么办呢?

有一个方法就是我们看一下手机上现在的时间,然后将当前系统时间修改过来再将系统时间写入硬件时间。可是,这样做有一个缺点,肯定会和标准当地时间有误差,因为你在前一秒看的时间,你还要进行操作改时间,写入时间等等一系列操作,这样你在改时间的时候到底写多少?大概估计一下过了多久,然后加上刚才看的时间?如果预估不准呢?

#同步网络时间到系统时间
同步时钟源服务器到当前系统时间,这里我们用阿里云linux时钟服务器,地址为ntp1.aliyun.com(从网上找到这个服务器地址)
①首先,我们需要安装ntpdate包

[root@admin ~]# yum install ntpdate -y

②安装好以后:

[root@admin ~]# ntpdate ntp1.aliyun.com
12 Jul 15:00:40 ntpdate[1718]: step time server 120.25.115.20 offset 52659330.491733 sec

③这时候我们查看系统时间:

[root@admin ~]# date
2020年 07月 12日 星期日 15:01:17 CST
[root@admin ~]# clock
2018年11月11日 星期日 03时26分58秒  -0.859929 秒

④但是硬件时间还没改过来,这时候我们需要将系统时间同步到硬件时间就好了:

[root@admin ~]# clock -w  		#也可以  hwclock -w
[root@admin ~]# clock
2020年07月12日 星期日 15时03分30秒  -0.579661 秒
[root@admin ~]# date
2020年 07月 12日 星期日 15:03:32 CST

(六)设置用户口令的命令 passwd

关于用户信息的两个文件:

1. /etc/passwd文件

Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作

首先我们来打开这个文件,看看到底包含哪些内容,执行命令如下:

[dxk@admin ~]$ vi /etc/passwd   #查看文件内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
dxk:x:1000:1000::/home/dxk:/bin/bash
Bob:x:1002:1002::/home/Bob:/bin/bash
……省略部分输出……

可以看到,/etc/passwd 文件中的内容非常规律,每行记录对应一个用户

这些用户中的绝大多数是系统或服务正常运行所必需的用户,这种用户通常称为系统用户或伪用户。系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。

不仅如此,每行用户信息都以 “:” 作为分隔符,划分为 7 个字段,每个字段所表示的含义如下:

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell

具体字段所代表的含义我们以后慢慢了解

2. /etc/shadow文件

/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”

前面所说的 /etc/passwd 文件,由于该文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了此文件中

/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性

我们先看看此文件,执行如下命令

[root@admin ~]# vim /etc/shadow    #查看该文件内容
root:$6$gBpH.w6Y$zC4WlobJdWQ4y4MnUdJX.jEG2DDBdZgiOFq09Rv78SwKCT9E
uAU8hZU3kJgjk33xmtiwJvPFya3klhZc6qEF0.:18455:0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
sshd:!!:18442::::::
dxk:$6$oJauh31p$38INgybvDI/Z8h/XOlDVt63fsZZ7hdgdqHAfJ0r.UA3HsJ528
owlUb3R3upHw/GD43EeX97jH4GBVbDOuHCgl.:18455:0:99999:7:::
……省略部分输出……

同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 “:” 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

接下来,分别介绍这 9 个字段。

第一列:用户名

用户名,就是一串代表用户身份的字符串

第二列:加密后的密码

这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。

注意:这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效

所有伪用户的密码都是 “!!” 或 “*”,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 “!!”,代表这个用户没有密码,不能登录。

第三列最后一次修改时间

此字段表示最后一次修改密码的时间,可是,为什么 root 用户显示的是 18455 呢?

这是因为,Linux 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间。这里显示 18455 天,也就是说,此 root 账号在 1970 年 1 月 1 日之后的第 18455 天修改的 root 用户密码

可以使用如下命令进行换算:

#只能精确到天
[root@admin ~]# date -d "19700101 +18455 day" "+%Y年%m月%d日"
2020年07月12日

第四列:修改密码的最小时间间隔

最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码

第五列:密码有效期

经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。
该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期

第六列:密码需要变更前的警告天数

与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 “再过 n 天你的密码就要过期了,请尽快重新设置你的密码!”。

该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 “修改密码” 的警告信息。

第七列:密码过期后的宽限天数

也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。

比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。

第八列:账号失效时间

同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用

第九列:预留
这个字段目前没有使用,为新功能所预留

对于普通账户的密码遗失,可以通过 root 账户解决,它会重新给你配置好指定账户的密码,而不需知道你原有的密码

根据以上各字段的含义,root用户可以根据需要对相应用户的密码信息进行修改,以达到限制或约束的目的。一种方式是直接修改该文件相应用户的字段值,另一种方式是root用户使用passwd命令进行修改,passwd命令用法如下:

3. 命令用法

命令格式
passwd [选项][] [ username]

root用户可以修改普通用户的密码

[root@admin ~]# passwd 用户名

root用户无论是修改自己的密码还是普通用户的密码,都没有什么复杂性要求,即使是修改成一位字符也可以,系统只有所提示,而没有硬性规定

普通用户只能修改自己的密码,而且在修改时系统会对你的密码进行硬性的复杂性要求

[root@admin ~]# passwd 自己的用户名
或者:
[root@admin ~]# passwd

命令选项

-k:保留即将过期的用户在期满后能仍能使用
-d:删除用户密码(仅限root用户)

[root@admin ~]# passwd -d dxk
清除用户的密码 dxk。
passwd: 操作成功
#用户dxk便无法登录,通过root用户 再为其 更改密码,就可以登录了

-l:锁住用户并使该用户无权更改其密码(仅限root用户。使用后会在密码的起始位置加上“!”,当密码被锁定时,用户将不能更改它的密码且无法登录)

[root@admin ~]# passwd -l dxk
锁定用户 dxk 的密码 。
passwd: 操作成功
#若该普通用户在线就不能修改密码,如果不在线要登录的话就无法登陆进去

-u:解除锁定(仅限root用户)

[root@admin ~]# passwd -u dxk
解锁用户 dxk 的密码。
passwd: 操作成功
#当该用户被解锁后,便可以正常登录

-f:强制操作(仅限root用户)

-x:两次密码修改的最大天数,后面接数字 (仅限root用户)对应于shadow文件该用户信息行的第五列

[root@admin ~]# passwd -x 100 dxk

-n:两次密码修改的最小天数,后面接数字 (仅限root用户)对应于shadow文件该用户信息行的第四列

[root@admin ~]# passwd -n  50 dxk
调整用户密码老化数据dxk。
passwd: 操作成功

-w:在距多少天提醒用户修改密码,后面接数字 (仅限root用户) 对应于shadow文件该用户信息行的第6列

[root@admin ~]# passwd -w 10 dxk
调整用户密码老化数据dxk。
passwd: 操作成功

-i:在密码过期后多少天,用户被禁掉,后面接数字 (仅限root用户) 对应于shadow文件该用户信息行的第7列

[root@admin ~]# passwd -i 100 dxk
调整用户密码老化数据dxk。
passwd: 操作成功

-S:查询用户的密码状态 (仅限root用户)

[root@admin ~]# passwd -S root
root PS 2020-07-13 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@admin ~]# passwd -S dxk
dxk PS 2020-07-13 50 100 10 100 (密码已设置,使用 SHA512 算法。)

–stdin :从标准输入获取密码 (仅限root用户)

[root@admin ~]# echo "123456" | passwd --stdin dxk
更改用户 dxk 的密码 。
passwd:所有的身份验证令牌已经成功更新。

passwd 未加任何选项指修改当下用户自己的密码

[root@admin ~]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

修改用户密码过期时间: chage -M 天数 用户名 (仅限root用户)

[root@admin ~]# chage -M 1000 dxk
[root@admin ~]# chage -M 10000  root

以上通过命令修改后的信息都会在/etc/shadow文件中对应于各用户的字段也随之更改并保存

三、Yum源

(一)Yum概述

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

说到yum源就必须说到linux系统中特有的依赖关系问题,yum就是为了解决依赖关系而存在的。yum源就相当是一个目录项,当我们使用yum机制安装软件时,若需要安装依赖软件,则yum机制就会根据在yum源中定义好的路径查找依赖软件,并将依赖软件安装好。

YUM是“Yellow dog Updater, Modified”的缩写,是一个软件包管理器,YUM从指定的地方(相关网站的rpm包地址或本地的rpm路径)自动下载RPM包并且安装,能够很好的解决依赖关系问题。

可以这么说,yum 是改进型的 RPM 软件管理器,它很好的解决了 RPM 所面临的软件包依赖问题。yum 在服务器端存有所有的 RPM 包,并将各个包之间的依赖关系记录在文件中,当管理员使用 yum 安装 RPM 包时,yum 会先从服务器端下载包的依赖性文件,通过分析此文件从服务器端一次性下载所有相关的 RPM 包并进行安装。

YUM的基本工作机制

服务器端:在服务器上面存放了所有的RPM软件包,然后以相关的功能去分析每个RPM文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内。
客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件(可通过WWW或FTP方式),通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。

yum需要一个yum仓库,也就是yum源。默认情况下,CentOS就有一个yum源(官方源),在/etc/yum.repos.d/目录下有一些默认的配置文件

yum源有三种:网络yum源(官方yum源,国内第三方yum源)、本地yum源

首先要找一个yum库(源),然后确保本地有一个客户端(yum这个命令就是客户端),由yum程序去连接服务器。连接的方式是由配置文件决定的。通过编辑/etc/yum.repos.d/CentOS-Base.repo文件,可以修改设置。

在/etc/yum.repos.d 目录下存放的以.repo为后缀的文件就是yum源的配置文件

[root@admin yum.repos.d]# ls /etc/yum.repos.d/
CentOS-Base.repo       CentOS-Media.repo
CentOS-CR.repo         CentOS-Sources.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo
CentOS-fasttrack.repo  CentOS-x86_64-kernel.repo

我们可以打开一个配置文件看看(其实这是系统自带的网络官方yum源配置文件):

[root@admin yum.repos.d]# vim CentOS-Sources.repo 
#这里复制部分进行分析,其他基本都是类似的 ,内容如下:
[extras-source]    #yum源的名称,起到标记yum源的作用
name=CentOS-$releasever - Extras Sources   #对yum的描述,作用是使用户可以更容易的读懂该文件
baseurl=http://vault.centos.org/centos/$releasever/extras/Source/    #指定的查找依赖关系软件的路径,(该路径可以是一个网址路径,也可以是采用本地连接时本机上的一个file路径)
gpgcheck=1    #gpgcheck表示是否进行gpg检测,0表示不进行,1表示进行。gpg检查就是在使用yum安装软件是对软件输入公钥进行验证,看是否来源安全
enabled=0    #enabled 是使能够的意思,0表示baseurl定义的路径是不可用的,1表示定义的路径是可用的。
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7    #进行gpg检查时,使用file协议导入公钥,后面接的路径就是系统自带的公钥存放路径

(二)配置yum源

两种yum源:本地yum源和网络yum源

1. 网络yum源配置

一般情况下,只要你的主机网络正常,可以直接使用网络 yum 源,不需要对配置文件做任何修改

所有 yum 源配置文件(也称为yum源容器)均位于 /etc/yum.repos.d/ 目录下,文件扩展名为".repo"(只要扩展名为 ".repo" 的文件都是 yum 源的配置文件)

上面所看到的该目录下有8个yum配置文件,通常情况下 CentOS-Base.repo 文件生效,上面我们也简单介绍了配置文件中各个参数的含义,这里我们进行总结:

  • [base]:容器名称,一定要放在[]中。
  • name:容器说明,可以自己随便写。
  • mirrorlist:镜像站点,这个可以注释掉。
  • baseurl:yum 源服务器的地址。默认是 CentOS 官方的 yum 源服务器,是可以使用的。如果你觉得慢,则可以改成国内的第三方 yum 源地址(比如阿里云)
  • enabled:此容器是否生效,如果不写或写成 enabled或enabled=1 则表示此容器生效,写成 enable=0 则表示此容器不生效。
  • gpgcheck:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效。
  • gpgkey:数字证书的公钥文件保存位置。不用修改。
    每个容器中的参数都是类似的,不外乎这些

这里的网络yum源地址都是CentOS官方网站,那么我们在下载 rpm软件包时可能会比较慢,那么我们就可以使用国内的第三方yum源地址

配置国内网络yum源
这里我们以阿里云为例,介绍如何操作:

第一步:先下载安装wget包

wget 是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP协议 下载,并可以使用 HTTP 代理

[root@admin ~]# yum install wget -y

第二步:备份官方的yum源配置文件
(也可以删除或移动到其他目录下,备份主要是为了以备不时之需)

#这里就举一个例子,每个人的官方yum源配置文件可能不同,全部都备份(这里后缀名随便改只要不是.repo就行 )
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

第三步:下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/

wget -O /etc/yum.repos.d/*****.repo URL
(这个文件一定要保存到/etc/yum.repos.d/下,至于这个URL自己可以在阿里云开发者社区找到自己对应版本的)

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#下载完后,我们可以看下就会有一个下载好的yum源配置文件
[root@admin yum.repos.d]# ls
CentOS-Base.repo

第四步:清理缓存

[root@admin yum.repos.d]# yum clean all

第五步:生成缓存

就是把服务器的包信息下载到本地电脑缓存起来,makecache建立一个缓存
以后用install时就在缓存中搜索,提高了速度

[root@admin yum.repos.d]# yum makecache

这样就国内网络yum源就配置好了,如果想换回官方yum源就将该配置文件删除或备份,将备份的官方配置文件移动到该目录下并 将后缀名改为.repo,最后清理、生成缓存就好了

2. 本地yum源配置

在无法联网的情况下,yum 可以考虑用本地光驱作为 yum 源

我们在安装Linux 系统的时候基本上都是使用iso镜像文件进行引导安装,其实在该iso镜像中就含有常用的 RPM 包

如果你下载的是everything iso镜像文件那么几乎所有的RPM包都会有,如果是其它的可能会有所减少,但是常用的基本都会有

配置步骤

第一步:把iso镜像挂载到虚拟机的虚拟光驱设备上 如下:
在这里插入图片描述

第二步:将此设备进行挂载

此时会有一个光驱设备文件/dev/sr0就是我们装有iso镜像文件的光驱设备文件,然后我们将此设备文件挂载到一个目录下(这个目录可以自行指定)

在linux中,一切皆文件,所以光驱也是一个文件

#这里我挂载到/etc/data/目录下
[root@admin ~]# mkdir /data/
[root@admin ~]# mount /dev/sr0 /data/
mount: /dev/sr0 写保护,将以只读方式挂载   

上述步骤执行完了,我们可以在挂在后的目录下的Packages目录下查看iso镜像文件中所有的RPM包

[root@admin ~]# ls /data/Packages
#可以看到特别多

第三步 :在目录/etc/yum.repos.d下配置本地yum源文件

在该目录下要确保没有其他配置文件(即以.repo结尾的文件),如果有可以修改后缀名进行备份或者移动到其他目录下

因为只有后缀名是".repo"的文件才能被系统当作yum 源配置文件。当然可以删除其他几个 yum 源配置文件,但是如果删除了,当又想用网络作为 yum 源时,就没有了参考文件,所以最好还是修改扩展名进行备份

[root@admin yum.repos.d]# cd /etc/yum.repos.d/     #进入该目录下
[root@admin yum.repos.d]# ls			#查看是否有其他配置文件
CentOS-Base.repo
[root@admin yum.repos.d]# mv CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup   #对该配置文件进行重命名备份
[root@admin yum.repos.d]# ls    #查看是否备份成功
CentOS-Base.repo.backup

然后在该目录下自己写一个yum配置文件,此文件名必须以.repo为后缀,名字自拟

[root@admin yum.repos.d]# vim myyum.repo
#在该文件中写如下内容并保存退出
[myyum]    #容器名称,一定要放在[]中,自拟
name="myyum"     #容器说明,可以自己随便写
baseurl=file:///data  #因为是使用本地文件(光驱中的文件)所以使用的是file协议,指定的路径是挂载后的目录 baseurl=file://挂载后的路径
gpgcheck=0    #本地源不需要数字证书,0表示 RPM 的数字证书不生效
enabled=1     #写成 enable=1 则表示此配置文件生效。
~                                                                
~                                                                
~                                                                
~                                                                
                                                          
:wq 

第五步:清空缓存

[root@admin yum.repos.d]# yum clean all

第六步:重新生成缓存

[root@admin yum.repos.d]# yum makecache

可以用以下命令查看:
yum list 列出所有可安装的安装包
yum list installed 列出已安装的安装包
rpm -qa 列出所有已安装的rpm包

这样,本地yum源就配置完成了

但是这样写存在问题,在重启之后,本地yum源就会失效。必须要再次重新挂载光驱设备(即只要重启系统就必须将第二步再执行一次)那么我们如何挂载将会永久生效呢?

当然就是将挂载的命令写入相应文件中,在系统每次重启之后就会读取该文件进行挂载,不用我们每次再进行手动挂载,两种途径:

第一种:
第一步:将挂载命令写入/etc/fstab文件中

[dxk@admin ~]$ vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Jun 29 16:36:21 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=4dd7e68d-866e-45c4-90fa-a874f9860a3a /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        -1 0
/dev/sr0 /data                                iso9660   defaults        0 0
~                                                             
~                                                             
~                                                             
~                                                             
:wq 

第二步:写入保存后,执行以下命令:

[dxk@admin ~]$ mount  -a   #让文件立即生效同时可以检查是否写入错误

这样本地yum源就可以永久生效

第二种:
第一步:将挂载命令写入/etc/rc.d/rc.local文件中

[dxk@admin ~]$ vim /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
if[ -d /data]
then
mount /dev/sr0 /data
fi
~                                                             
~                                                             
~                                                             
:wq     

第二步:写入保存后,执行以下命令:

chmod +x /etc/rc.d/rc.local

这样就本地yum源也可以永久生效

其实本地yum源就是在没有网络的情况下,从光驱这个存储了很多RPM包的介质中获取我们需要的包进行安装

猜你喜欢

转载自blog.csdn.net/weixin_45880055/article/details/107290586