高级Linux运维工程师养成记-Linux常用基本命令
                来源:互联网
                阅读:-
                2020-10-09 09:16:48
            Linux常用基本命令
lscpu命令和cat /proc/cpuinfo都可以查看cpu信息,和lscpu不同的是cat /proc/cpuinfo 按照每核显示cpu信息
Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz 表示CPU型号和主频,x86_64表示架构,支持32位和64位。
[root@centos8 ~]# lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           2
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               158
Model name:          Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz
Stepping:            10
CPU MHz:             2904.004
BogoMIPS:            5808.00
Hypervisor vendor:   VMware
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            12288K
NUMA node0 CPU(s):   0-7
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xsaves arat md_clear flush_l1d arch_capabilities
free和cat /proc/meminfo都可以查看内存信息
free 查看内存
[root@centos8 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          7.8Gi       725Mi       6.5Gi        10Mi       537Mi       6.8Gi
Swap:         4.0Gi          0B       4.0Gi
cat /proc/meminfo 查看内存
[root@centos8 ~]# cat /proc/meminfo 
MemTotal:        8135208 kB
MemFree:         6841296 kB
MemAvailable:    7116284 kB
Buffers:            2192 kB
Cached:           462160 kB
SwapCached:            0 kB
Active:           543264 kB
Inactive:         332812 kB
Active(anon):     413824 kB
Inactive(anon):     9104 kB
Active(file):     129440 kB
Inactive(file):   323708 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4194300 kB
SwapFree:        4194300 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        399592 kB
Mapped:           209148 kB
Shmem:             11208 kB
KReclaimable:      86476 kB
Slab:             265476 kB
SReclaimable:      86476 kB
SUnreclaim:       179000 kB
KernelStack:        9248 kB
PageTables:        23904 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     8261904 kB
Committed_AS:    2450964 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:            59904 kB
HardwareCorrupted:     0 kB
AnonHugePages:    174080 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      282432 kB
DirectMap2M:     4960256 kB
DirectMap1G:     5242880 kB
/proc目录的文件内容都是以内存的方式保存,存储当前的系统状态,不会占据磁盘空间。
使用ls -l或者别名ll 可以查看文件的大小
[root@centos8 ~]# ll /proc/cpuinfo
-r--r--r--. 1 root root 0 Aug 26 05:47 /proc/cpuinfo
[root@centos8 ~]# ls -l /proc/meminfo 
-r--r--r--. 1 root root 0 Aug 26 05:47 /proc/meminfolsblk可以查看磁盘大小和分区情况
sda表示第一块硬盘,sda1表示第一个分区,依次类推,SIZE表示磁盘的容量
[root@centos8 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    2G  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0   50G  0 part /data
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0    4G  0 part [SWAP]
sr0     11:0    1  7.7G  0 rom  除此以外还可以使用 cat /proc/partitions 来查看磁盘大小和分区情况
[root@centos8 ~]# cat /proc/partitions 
major minor  #blocks  name
   8        0  209715200 sda
   8        1    2097152 sda1
   8        2  104857600 sda2
   8        3   52428800 sda3
   8        4          1 sda4
   8        5    4194304 sda5
  11        0    8038400 sr0
Linux的主流发型版支持uname -r 来查看内核版本信息,其中Ubuntu Server使用的内核版本 比较新,其内核版本是5.4.0-42-generic
CentOS7.8的内核版本
[root@centos7 ~]# uname -r
3.10.0-1127.el7.x86_64
CentOS8.2的内核版本
[root@centos8 ~]# uname -r
4.18.0-193.el8.x86_64
Ubuntu Server20.04的内核版本
guanglei@ubuntu-server:~$ uname -r
5.4.0-42-genericCentOS系列可以通过查看/etc/redhat-release 文件获取操作系统的发型版本
CentOS7查看发型版本
[root@centos7 ~]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)
CentOS8查看发型版本
[root@centos8 ~]# cat /etc/redhat-release 
CentOS Linux release 8.2.2004 (Core) 
Ubunut Server查看/etc/os-release文件获取操作系统的发型版本
guanglei@ubuntu-server:~$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
时间是非常重要的!!!,应用程序,中间件,数据库都会依赖时间
date命令可以显示当前时间
[root@centos8 ~]# date
Wed Aug 26 14:54:38 CST 2020
如果服务器时间不准,还可以使用date修改时间,修改时间的格式为 mmdd hhmmyyyy.ss
使用date命令将当前时间改为2020年9月25号下午三点三十秒
[root@centos8 ~]# date 092615002020.30
Sat Sep 26 15:00:30 CST 2020
[root@centos8 ~]# date
Sat Sep 26 15:00:31 CST 2020
此时系统的时间就是被修改的错误时间,该时间是存储在内存中,此时可以重启服务器,就会恢复正确的时间。
除了系统时间,每台服务器还有硬件时间,硬件时间是从主板上读取的。如果系统时间错误,除了重启系统,还可以使用hwclock -s 命令以硬件时间为准校准系统时间。
[root@centos8 ~]# date
Wed Aug 26 15:08:09 CST 2020
[root@centos8 ~]# date 092612002020.00
Sat Sep 26 12:00:00 CST 2020
[root@centos8 ~]# date
Sat Sep 26 12:00:01 CST 2020
[root@centos8 ~]# hwclock -s
[root@centos8 ~]# date
Wed Aug 26 15:08:45 CST 2020
hwclock命令用于查看系统的硬件时间
[root@centos8 ~]# hwclock
2020-08-26 15:06:13.071486+08:00
假设硬件时间是错误的,可以使用hwclock -w 以系统时间为准,校准硬件时间
[root@centos8 ~]# hwclock -w在安装系统时,选择的时区是亚洲上海,时区的配置文件是/etc/localtime,该文件是一个链接文件
[root@centos8 ~]# ll /etc/localtime 
lrwxrwxrwx. 1 root root 35 Aug 24 08:07 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai不同的时区在同一时刻的时间是不同,timedatectl list-timezones 命令用于列出所有的时区
timedatectl 只支持CentOS7及其以上的版本
[root@centos8 ~]# timedatectl list-timezones timedatectl set-timezone命令用于修改时区,时区修改后,如果不是一个时区的,修改后的系统时间和北京时间是不一样的。
修改当前时区是欧洲/巴黎,然后再查看系统时间
[root@centos8 ~]# timedatectl set-timezone  Europe/Paris 
[root@centos8 ~]# date
Wed Aug 26 09:17:44 CEST 2020修改当前时区为亚洲/上海,然后再查看系统时间,此时时间被修复回来。
[root@centos8 ~]# timedatectl set-timezone  Asia/Shanghai 
[root@centos8 ~]# date
Wed Aug 26 15:18:57 CST 2020
在安装系统时如果没有改时区(默认是美国纽约时区),这里就可以使用timedatectl set-timezone来修改。
同步其他服务器的时间(企业中一般有专门的时间服务器),可以使用ntpdate ip命令同步系统时间。
[root@centos7 ~]# ntpdate 120.25.108.11
30 Jul 19:35:42 ntpdate[6675]: adjust time server 120.25.108.11 offset -0.214244 sec
显示完整日期和时间
[root@centos8 ~]# date '+%F %T'
2020-08-26 17:27:42
修改时间为10天后的日期后还原修改的时间
[root@centos8 ~]# date -s "+10day"
Sat Sep  5 17:28:06 CST 2020
[root@centos8 ~]# date -s "-10day"
Wed Aug 26 17:28:24 CST 2020
[root@centos8 ~]# date
Wed Aug 26 17:28:47 CST 2020
显示昨天的日期时间
[root@centos8 ~]# date -d yesterday
Tue Aug 25 17:29:14 CST 2020
显示明天的日期
[root@centos8 ~]# date -d tomorrow
Thu Aug 27 17:29:32 CST 2020
显示10天后的日期
[root@centos8 ~]# date -d '10day'
Sat Sep  5 17:29:51 CST 2020
在Linux系统中使用cal命令查看日历
cal默认显示当年的日历
[root@centos8 ~]# cal
     August 2020    
Su Mo Tu We Th Fr Sa
                   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 通过cal -y选项可以查看整年的日历
[root@centos8 ~]# cal -y
                               2020                               
       January               February                 March       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
          1  2  3  4                      1    1  2  3  4  5  6  7
 5  6  7  8  9 10 11    2  3  4  5  6  7  8    8  9 10 11 12 13 14
12 13 14 15 16 17 18    9 10 11 12 13 14 15   15 16 17 18 19 20 21
19 20 21 22 23 24 25   16 17 18 19 20 21 22   22 23 24 25 26 27 28
26 27 28 29 30 31      23 24 25 26 27 28 29   29 30 31            
                                                                  
        April                   May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
          1  2  3  4                   1  2       1  2  3  4  5  6
 5  6  7  8  9 10 11    3  4  5  6  7  8  9    7  8  9 10 11 12 13
12 13 14 15 16 17 18   10 11 12 13 14 15 16   14 15 16 17 18 19 20
19 20 21 22 23 24 25   17 18 19 20 21 22 23   21 22 23 24 25 26 27
26 27 28 29 30         24 25 26 27 28 29 30   28 29 30            
                       31                                         
        July                  August                September     
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
          1  2  3  4                      1          1  2  3  4  5
 5  6  7  8  9 10 11    2  3  4  5  6  7  8    6  7  8  9 10 11 12
12 13 14 15 16 17 18    9 10 11 12 13 14 15   13 14 15 16 17 18 19
19 20 21 22 23 24 25   16 17 18 19 20 21 22   20 21 22 23 24 25 26
26 27 28 29 30 31      23 24 25 26 27 28 29   27 28 29 30         
                       30 31                                      
       October               November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
             1  2  3    1  2  3  4  5  6  7          1  2  3  4  5
 4  5  6  7  8  9 10    8  9 10 11 12 13 14    6  7  8  9 10 11 12
11 12 13 14 15 16 17   15 16 17 18 19 20 21   13 14 15 16 17 18 19
18 19 20 21 22 23 24   22 23 24 25 26 27 28   20 21 22 23 24 25 26
25 26 27 28 29 30 31   29 30                  27 28 29 30 31除此以外还可以使用cal 月份 年份查看指定月份的日历
查看2035年10月份的日历
[root@centos8 ~]# cal 10 2035
    October 2035    
Su Mo Tu We Th Fr Sa
    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@centos8 ~]# cal 9 1752
   September 1752   
Su Mo Tu We Th Fr Sa
       1  2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
日常运维时关机和重启谨慎使用
关机可以使用halt或者poweroff命令
重启可以使用reboot,其中 -f选项表示强制关机,不调用shutdown,-p表示切断电源。
而shutdown可以实现关机或者重启,shutdown -r表示重启,即reboot,shutdown -h表示关机,即halt。 -c表示取消关机或重启。
除此以外shutdown 还可以指定时间来关机或重启,默认是1分钟后执行。
shutdown命令的常用案例
三分钟后关机,当前时间是22:37
[root@centos8 ~]# shutdown -h 22:40
Shutdown scheduled for Wed 2020-08-26 22:40:00 CST, use 'shutdown -c' to cancel.
取消关机使用shutdown -c命令
[root@centos8 ~]# shutdown -c
5分钟后重启系统
[root@centos8 ~]# shutdown -r +5
Shutdown scheduled for Wed 2020-08-26 22:43:10 CST, use 'shutdown -c' to cancel.立刻重启
[root@centos8 ~]# shutdown -r  now
如果想要知道当前机器开机时间,可以使用uptime查看
CentOS7开机时间
[root@centos7 ~]# uptime
 04:47:12 up 32 min,  1 user,  load average: 0.00, 0.01, 0.02
CentOS8开机时间
[root@centos8 ~]# uptime
 04:47:07 up 1 min,  1 user,  load average: 0.14, 0.07, 0.02
Ubuntu20.04开机时间
guanglei@ubuntu20:~$ uptime
 20:48:10 up 33 min,  1 user,  load average: 0.02, 0.02, 0.00
显示当前登录有效用户
guanglei@ubuntu20:~$ whoami
guanglei
查看系统当前所有的登录会话及所做的操作
[root@centos8 ~]# w
 04:50:07 up 4 min,  2 users,  load average: 0.20, 0.08, 0.02
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         04:45    1.00s  0.07s  0.03s w
guanglei tty2     tty2             04:50    4:37   3.85s  0.02s /usr/libexec/gsd-mouse
查看系统当前所有的登录会话
[root@centos8 ~]# who
root     pts/0        2020-07-27 04:45 (10.0.0.1)
guanglei tty2         2020-07-27 04:50 (tty2)
在系统运维时会经常到编辑文本文件,而运维初学者不建议直接使用功能复杂的vim来编辑文件,使用nano即可。
nano只能编辑文本文件,无法编辑二进制文件。
[root@centos8 ~]# nano .bashrc
nano编辑文件
在使用nano进行文本编辑时,nano后面跟文件名即可打开文件,然后可以直接修改文件,类似于windows的记事本,修改完成后然后按Ctrl+x退出,接着按y保存修改,回车后退出nano。
在有些耗时比较长的运维场景下(例如数据库备份等等)希望命令在终端窗口以外关闭后依然能够正常执行,因为一般的命令在终端窗口关闭以后,命令就会意外中断,每个终端窗口就是一个会话,
关闭了终端窗口就等同于关闭了会话,因此执行中的命令会中断。
这时我们可以使用screen命令实现即使关闭窗口,也能让命令在后台执行。
首次执行screen命令时系统会提示找不到命令
[root@centos7 ~]# screen
bash: screen: command not found...
使用yum install -y screen 安装screen命令
此命令暂时只能在CentOS7.8下使用yum来进行安装
[root@centos7 ~]# yum install -y screen
安装完成以后使用screen 开启一个会话
[root@centos7 ~]# screen
然后使用ping命令来检查centOS8的网络是否通畅
[root@centos7 ~]# ping 10.0.0.100
紧接着关闭centOS7的xshell会话窗口,然后重新开一个会话窗口,使用ps aux|grep ping会发现之前运行的ping进程依然在执行
[root@centos7 ~]# ps aux|grep ping
guanglei   2614  0.0  0.0 463332  3892 ?        Sl   06:13   0:01 /usr/libexec/gsd-housekeeping
root      14582  0.0  0.0 128552  1272 pts/1    S+   22:49   0:00 ping 10.0.100
root      14662  0.0  0.0 112812   968 pts/2    S+   22:50   0:00 grep --color=auto ping
显示所有已经打开的sceen会话,可以使用screen -ls查看
[root@centos7 ~]# screen -ls
There is a screen on:
	14684.pts-2.centos7	(Attached)
1 Socket in /var/run/screen/S-root.
恢复某screen会话,可以使用screen -r命令
[root@centos7 ~]# screen -r
64 bytes from 10.0.0.100: icmp_seq=205 ttl=64 time=0.470 ms
64 bytes from 10.0.0.100: icmp_seq=206 ttl=64 time=0.417 ms
64 bytes from 10.0.0.100: icmp_seq=207 ttl=64 time=2.42 ms
64 bytes from 10.0.0.100: icmp_seq=208 ttl=64 time=0.906 ms
64 bytes from 10.0.0.100: icmp_seq=209 ttl=64 time=1.35 ms
screen除了创建会话,能让命令关闭窗口后继续在后台执行的功能以外,还能够实现远程桌面共享,从而实现远程协助的功能。
实现该功能必须满足两个条件,两个用户必须使用同一个账号登录同一台机器。
假设小红红有个问题,需要小明明远程协助。
首先小红红以root账号登录10.0.0.102的机器,即CentOS7.8的那台机器,然后使用screen -S help开启一个远程会话,会话的名字叫help
[root@centos7 ~]# screen -S help
然后小明明也以root的账号登录10.0.0.102的机器,然后使用screen -x help加入小红红开启的远程会话
screen -x help
共享会话
当小明明解决小红红的问题后,可以使用ctrl a,d退出当前会话。
如果小明明不知道小红红的会话名称,可以使用screen -ls获取会话
[root@centos7 ~]# screen -ls
There are screens on:
        14877.help      (Attached)
        14684.pts-2.centos7     (Attached)
2 Sockets in /var/run/screen/S-root.
echo用于输出指定的字符串,主要用于输出信息。echo的含义就是回显,即返回显示。
[root@centos8 ~]# echo linux 
linux
echo通常用于显示变量,在显示变量时在变量名前面加$
查看PATH变量
[root@centos8 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin查看SHELL和PS1变量
[root@centos8 ~]# echo $SHELL
/bin/bash
[root@centos8 ~]# echo $PS1
[\u@\h \W]\$
除此以外echo还可以启用-e选项结合转义字符实现特殊用途
使用echo结合转义字符\a实现发声
[root@centos7 ~]# echo -e "\a"
睡眠3秒后发声,sleep 3表示睡眠3秒
一行可以同时执行多个命令,多个命令之间使用;分割
[root@centos7 ~]# sleep 3; echo -e "\a"
输出指定区间的数字和字母
[root@centos7 ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@centos7 ~]# echo {1..10..2}
1 3 5 7 9
[root@centos7 ~]# echo {20..10..2}
20 18 16 14 12 10
[root@centos7 ~]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
输出笛卡尔乘积
[root@centos7 ~]# echo {1..10}{a..c}
1a 1b 1c 2a 2b 2c 3a 3b 3c 4a 4b 4c 5a 5b 5c 6a 6b 6c 7a 7b 7c 8a 8b 8c 9a 9b 9c 10a 10b 10c
使用反向单引号输出echo $PATH的执行结果
[root@centos7 ~]# echo `echo $PATH`
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
使用反向单引号实现以当前日期在/data目录下创建日志文件
[root@centos7 ~]# touch /data/`date +%F`.log
[root@centos7 ~]# ls /data
2020-08-01.log
ASCII码:计算机内部,所有信息最终都是一个二进制值。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。
ASCII 码一共规定了128个字符的编码,占用了一个字节的后面7位,最前面的一位统一规定为0
Unicode:用于表示世界上所有语言中的所有字符。 每一个符号都给予一个独一无二的编码数字,Unicode 是一个很大的集合,现在的规模可以容纳100多
万个符号。Unicode 仅仅只是一个字符集,规定了每个字符对应的二进制代码,至于这个二进制代码如何存储则没有规定。
Unicode编码方案:
目前广泛使用的都是UTF-8编码,UTF-8编码中一个中文通常占据3个字节。
[root@centos8 ~]# echo $LANG
en_US.UTF-8为了理解字符与编码的关系。
首先准备一个测试文件,文件内容包含3行,每行一个字符,可以使用nano编辑,然后使用cat查看,查看时根据UTF-8编码通过数值对应的字符进行转换
[root@centos8 ~]# nano test.txt
[root@centos8 ~]# cat test.txt 
a
b
c然后使用hexdump 查看test.txt的底层十六进制存储
[root@centos8 ~]# hexdump test.txt 
0000000 0a61 0a62 0a63                         
0000006
可以使用echo 输出16进制的61,62,63代表的字符
[root@centos8 ~]# echo -e '\x61'
a
[root@centos8 ~]# echo -e '\x62'
b
[root@centos8 ~]# echo -e '\x63'
c推荐阅读:中国财视网