Linux管理常用命令

光标快捷键

  1. Home或Ctrl+A:快速移动光标至行首
  2. End或Ctrl+E:快速移动光标至行尾
  3. Ctrl+K:从光标处开始删除,直到行尾

Linux系统信息查询

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
 uname -a 				# 查看内核/操作系统/CPU信息 
head -n 1 /etc/issue # 查看操作系统版本
cat /proc/cpuinfo # 查看CPU信息
hostname # 查看计算机名
lspci -tv # 列出所有PCI设备
lsusb -tv # 列出所有USB设备
lsmod # 列出加载的内核模块
env # 查看环境变量资源
free -m # 查看内存使用量和交换区使用量
df -h # 查看各分区使用情况
du -sh <目录名> # 查看指定目录的大小
grep MemTotal /proc/meminfo # 查看内存总量
grep MemFree /proc/meminfo # 查看空闲内存量
uptime # 查看系统运行时间、用户数、负载
cat /proc/loadavg # 查看系统负载磁盘和分区
mount | column -t # 查看挂接的分区状态
fdisk -l # 查看所有分区
swapon -s # 查看所有交换分区
hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
dmesg | grep IDE # 查看启动时IDE设备检测状况网络
ifconfig # 查看所有网络接口的属性
iptables -L # 查看防火墙设置
route -n # 查看路由表
netstat -lntp # 查看所有监听端口
netstat -antp # 查看所有已经建立的连接
netstat -s # 查看网络统计信息进程
ps -ef # 查看所有进程
top # 实时显示进程状态用户
w # 查看活动用户
id <用户名> # 查看指定用户信息
last # 查看用户登录日志
cut -d: -f1 /etc/passwd # 查看系统所有用户
cut -d: -f1 /etc/group # 查看系统所有组
crontab -l # 查看当前用户的计划任务服务
chkconfig –list # 列出所有系统服务
chkconfig –list | grep on # 列出所有启动的系统服务程序

rpm -qa # 查看所有安装的软件包

# 查看/proc/uptime文件计算系统启动时间:
>>> cat /proc/uptime
<<< 5113396.94 575949.85

# 第一数字即是系统已运行的时间5113396.94秒,运用系统工具date即可算出系统启动时间

>>> date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"

<<< 2018-01-02 06:50:52

查看/proc/uptime文件计算系统运行时间

>>> cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统已运行:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'

<<< 系统已运行:1天1时36分13秒

# Linux查看物理CPU个数、核数、逻辑CPU个数
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
>>> cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
<<< 2

# 查看每个物理CPU中core的个数(即核数)
>>> cat /proc/cpuinfo| grep "cpu cores"| uniq
<<< cpu cores : 2

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l


# 查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
4 Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz

输入命令cat /proc/cpuinfo 查看physical id有几个就有几个物理cpu;查看processor有几个就有几个逻辑cpu。
(一)概念
① 物理CPU
实际Server中插槽上的CPU个数
物理cpu数量,可以数不重复的physical id有几个
② 逻辑CPU
/proc/cpuinfo用来存储cpu硬件信息的
信息内容分别列出了processor 0 –processor n 的规格。这里需要注意,n+1是逻辑cpu数
一般情况,我们认为一颗cpu可以有多核,加上intel的超线程技术(HT), 可以在逻辑上再分一倍数量的cpu core出来
逻辑CPU数量=物理cpu数量 x cpu cores 这个规格值 x 2(如果支持并开启ht)
备注一下:Linux下top查看的CPU也是逻辑CPU个数
③ CPU核数
一块CPU上面能处理数据的芯片组的数量、比如现在的i5 760,是双核心四线程的CPU、而 i5 2250 是四核心四线程的CPU
一般来说,物理CPU个数×每颗核数就应该等于逻辑CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术

lscpu命令,查看的是cpu的统计信息


内存

概要查看内存情况 free -m 详细情况:cat /proc/meminfo

查看硬盘和分区分布: lsblk

如果要看硬盘和分区的详细信息:fdisk -l

使用“df -k”命令,以KB为单位显示磁盘使用量和占用率,-m则是以M为单位显示磁盘使用量和占用率

网卡

查看网卡硬件信息
# lspci | grep -i 'eth'
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)

查看系统的所有网络接口:ifconfig -a

如果要查看某个网络接口的详细信息,例如eth0的详细参数和指标:ethtool eth0

查看pci信息,即主板所有硬件槽信息:lspci

如果要更详细的信息:lspci -v 或者 lspci -vv

如果要看设备树:lspci -t


Linux /proc目录详解

# 1. /proc目录
# Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。

# 2. 子文件或子文件夹
/proc/buddyinfo 每个内存区中的每个order有多少块可用,和内存碎片问题有关
/proc/cmdline 启动时传递给kernel的参数信息
/proc/cpuinfo cpu的信息
/proc/crypto 内核使用的所有已安装的加密密码及细节
/proc/devices 已经加载的设备并分类
/proc/dma 已注册使用的ISA DMA频道列表
/proc/execdomains Linux内核当前支持的execution domains
/proc/fb 帧缓冲设备列表,包括数量和控制它的驱动
/proc/filesystems 内核当前支持的文件系统类型
/proc/interrupts x86架构中的每个IRQ中断数
/proc/iomem 每个物理设备当前在系统内存中的映射
/proc/ioports 一个设备的输入输出所使用的注册端口范围
/proc/kcore 代表系统的物理内存,存储为核心文件格式,里边显示的是字节数,等于RAM大小加上4kb
/proc/kmsg 记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理
/proc/loadavg 根据过去一段时间内CPU和IO的状态得出的负载状态,与uptime命令有关
/proc/locks 内核锁住的文件列表
/proc/mdstat 多硬盘,RAID配置信息(md=multiple disks)
/proc/meminfo RAM使用的相关信息
/proc/misc 其他的主要设备(设备号为10)上注册的驱动
/proc/modules 所有加载到内核的模块列表
/proc/mounts 系统中使用的所有挂载
/proc/mtrr 系统使用的Memory Type Range Registers (MTRRs)
/proc/partitions 分区中的块分配信息
/proc/pci 系统中的PCI设备列表
/proc/slabinfo 系统中所有活动的 slab 缓存信息
/proc/stat 所有的CPU活动信息
/proc/sysrq-trigger 使用echo命令来写这个文件的时候,远程root用户可以执行大多数的系统请求关键命令,就好像在本地终端执行一样。要写入这个文件,需要把/proc/sys/kernel/sysrq不能设置为0。这个文件对root也是不可读的
/proc/uptime 系统已经运行了多久
/proc/swaps 交换空间的使用情况
/proc/version Linux内核版本和gcc版本
/proc/bus 系统总线(Bus)信息,例如pci/usb等
/proc/driver 驱动信息
/proc/fs 文件系统信息
/proc/ide ide设备信息
/proc/irq 中断请求设备信息
/proc/net 网卡设备信息
/proc/scsi scsi设备信息
/proc/tty tty设备信息
/proc/net/dev 显示网络适配器及统计信息
/proc/vmstat 虚拟内存统计信息
/proc/vmcore 内核panic时的内存映像
/proc/diskstats 取得磁盘信息
/proc/schedstat kernel调度器的统计信息
/proc/zoneinfo 显示内存空间的统计信息,对分析虚拟内存行为很有用

# 以下是/proc目录中进程N的信息
/proc/N pid为N的进程信息
/proc/N/cmdline 进程启动命令
/proc/N/cwd 链接到进程当前工作目录
/proc/N/environ 进程环境变量列表
/proc/N/exe 链接到进程的执行命令文件
/proc/N/fd 包含进程相关的所有的文件描述符
/proc/N/maps 与进程相关的内存映射信息
/proc/N/mem 指代进程持有的内存,不可读
/proc/N/root 链接到进程的根目录
/proc/N/stat 进程的状态
/proc/N/statm 进程使用的内存的状态
/proc/N/status 进程状态信息,比stat/statm更具可读性
/proc/self 链接到当前正在运行的进程

文件命令

1
2
3
tree . #列出当前文件夹下的所有文件
tree /f #显示当前文件夹所有文件
tree /a #显示当前文件夹的所有文件夹

关机/重启

序号 命令 对应英文 作用
01 shutdown 选项 时间 shutdown 关机/重新启动
  • shutdown命令可以安全关闭或者重新启动电脑
选项 含义
-r 重新启动
  • 不指定选项和参数,默认表示 1 分钟之后 关闭电脑
  • 远程维护服务器时,最好不要关闭系统,而应该重新启动系统
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 重新启动操作系统,其中 now 表示现在
$ shutdown -r now

# 立刻关机,其中 now 表示现在
$ shutdown now

# 系统在今天的 20:25 会关机
$ shutdown 20:25

# 系统再过十分钟后自动关机
$ shutdown +10

# 取消之前指定的关机计划
$ shutdown -c

查看或配置网卡信息

序号 命令 对应英文 作用
01 ifconfig configure a network interface 查看/配置计算机当前的网卡配置信息
02 ping ip地址 ping 检测到目标 ip地址 的连接是否正常

网卡 和 IP 地址

网卡

  • 网卡是一个专门负责网络通讯的硬件设备
  • IP 地址是设置在网卡上的地址信息

我们可以把 电脑 比作 电话网卡 相当于 SIM 卡IP 地址 相当于 电话号码

IP 地址

  • 每台联网的电脑上都有 IP 地址是保证电脑之间正常通讯的重要设置

注意:每台电脑的 IP 地址不能相同,否则会出现 IP 地址冲突,并且没有办法正常通讯

提示:有关 IP 地址的详细内容,在就业班会详细讲解!

ifconfig

  • ifconfig 可以查看/配置计算机当前的网卡配置信息
1
2
3
4
5
# 查看网卡配置信息
$ ifconfig

# 查看网卡对应的 IP 地址
$ ifconfig | grep inet

提示:一台计算机中有可能会有一个 物理网卡多个虚拟网卡,在 Linux 中物理网卡的名字通常以 ensXX 表示

  • 127.0.0.1 被称为 本地回环/环回地址,一般用来测试本机网卡是否正常

ping

1
2
3
4
5
# 检测到目标主机是否连接正常
$ ping IP地址

# 检测本地网卡工作正常
$ ping 127.0.0.1
  • ping 一般用于检测当前计算机到目标计算机之间的网络 是否通畅数值越大,速度越慢
  • ping 的工作原理与潜水艇的声纳相似,ping 这个命令就是取自 声纳的声音
  • 网络管理员之间也常将 ping 用作动词 —— ping 一下计算机X,看他是否开着

原理:网络上的机器都有 唯一确定的 IP 地址,我们给目标 IP 地址发送一个数据包,对方就要返回一个数据包,根据返回的数据包以及时间,我们可以确定目标主机的存在

提示:在 Linux 中,想要终止一个终端程序的执行,绝大多数都可以使用 CTRL + C

远程登录和复制文件

序号 命令 对应英文 作用
01 ssh 用户名@ip secure shell 关机/重新启动
02 scp 用户名@ip:文件名或路径 用户名@ip:文件名或路径 secure copy 远程复制文件

ssh 基础(重点)

在 Linux 中 SSH 是 非常常用 的工具,通过 SSH 客户端 我们可以连接到运行了 SSH 服务器 的远程机器上

  • SSH 客户端是一种使用 Secure Shell(SSH) 协议连接到远程计算机的软件程序
  • SSH 是目前较可靠,专为远程登录会话和其他网络服务 提供安全性的协议
    • 利用 SSH 协议 可以有效防止远程管理过程中的信息泄露
    • 通过 SSH 协议 可以对所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗
  • SSH 的另一项优点是传输的数据可以是经过压缩的,所以可以加快传输的速度

域名 和 端口号

域名

  • 由一串 用点分隔 的名字组成,例如:www.itcast.cn
  • IP 地址 的别名,方便用户记忆

端口号

  • IP 地址:通过 IP 地址 找到网络上的 计算机

  • 端口号:通过 端口号 可以找到 计算机上运行的应用程序

    • SSH 服务器 的默认端口号是 22,如果是默认端口号,在连接的时候,可以省略
  • 常见服务端口号列表:

序号 服务 端口号
01 SSH 服务器 22
02 Web 服务器 80
03 HTTPS 443
04 FTP 服务器 21

提示:有关 端口号的详细内容,在就业班会详细讲解!

SSH 客户端的简单使用

1
ssh [-p port] user@remote
  • user 是在远程机器上的用户名,如果不指定的话默认为当前用户
  • remote 是远程机器的地址,可以是 IP域名,或者是 后面会提到的别名
  • portSSH Server 监听的端口,如果不指定,就为默认值 22

提示:

  • 使用 exit 退出当前用户的登录

注意:

  • ssh 这个终端命令只能在 Linux 或者 UNIX 系统下使用
  • 如果在 Windows 系统中,可以安装 PuTTY 或者 XShell 客户端软件即可

提示:

  • 在工作中,SSH 服务器的端口号很有可能不是 22,如果遇到这种情况就需要使用 -p 选项,指定正确的端口号,否则无法正常连接到服务器

Windows 下 SSH 客户端的安装

建议从官方网站下载正式的安装程序

scp(掌握)

  • scp 就是 secure copy,是一个在 Linux 下用来进行 远程拷贝文件 的命令
  • 它的地址格式与 ssh 基本相同需要注意的是,在指定端口时用的是大写的 -P 而不是小写的

1
2
3
4
5
6
7
8
9
10
11
12
13
# 把本地当前目录下的 01.py 文件 复制到 远程 家目录下的 Desktop/01.py
# 注意:`:` 后面的路径如果不是绝对路径,则以用户的家目录作为参照路径
scp -P port 01.py user@remote:Desktop/01.py

# 把远程 家目录下的 Desktop/01.py 文件 复制到 本地当前目录下的 01.py
scp -P port user@remote:Desktop/01.py 01.py

# 加上 -r 选项可以传送文件夹
# 把当前目录下的 demo 文件夹 复制到 远程 家目录下的 Desktop
scp -r demo user@remote:Desktop

# 把远程 家目录下的 Desktop 复制到 当前目录下的 demo 文件夹
scp -r user@remote:Desktop demo
选项 含义
-r 若给出的源文件是目录文件,则 scp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名
-P 若远程 SSH 服务器的端口不是 22,需要使用大写字母 -P 选项指定端口

注意:

  • scp 这个终端命令只能在 Linux 或者 UNIX 系统下使用
  • 如果在 Windows 系统中,可以安装 PuTTY,使用 pscp 命令行工具或者安装 FileZilla 使用 FTP 进行文件传输

FileZilla

SSH 高级(知道)

  • 免密码登录
  • 配置别名

提示:有关 SSH 配置信息都保存在用户家目录下的 .ssh 目录下

免密码登录

步骤

  • 配置公钥
    • 执行 ssh-keygen 即可生成 SSH 钥匙,一路回车即可
  • 上传公钥到服务器
    • 执行 ssh-copy-id -p port user@remote,可以让远程服务器记住我们的公钥

示意图

非对称加密算法

  • 使用 公钥 加密的数据,需要使用 私钥 解密
  • 使用 私钥 加密的数据,需要使用 公钥 解密

配置别名

每次都输入 ssh -p port user@remote,时间久了会觉得很麻烦,特别是当 user, remoteport 都得输入,而且还不好记忆

配置别名 可以让我们进一步偷懒,譬如用:ssh mac 来替代上面这么一长串,那么就在 ~/.ssh/config 里面追加以下内容:

1
2
3
4
Host mac
HostName ip地址
User itheima
Port 22

保存之后,即可用 ssh mac 实现远程登录了,scp 同样可以使用

终端前缀修改目标:

原本的提示信息是:路径

目标:修改终端提示信息为:这是我的终端

01

打开.bash_profile文件

1
vi $HOME/.bash_profile

编辑.bash_profile文件

点击i,左下角出现-- INSERT --后,可以正常输入内容。

在文件内输入以下内容:

1
2
PS1=这是我的终端
export PS1

保存内容

输入完成后,点击键盘左上角Esc,左下角-- INSERT --消失后,输入:wq回车即可保存。

03

更新配置

在终端输入以下命令更新配置

1
source $HOME/.bash_profile

04

05

补充

符号所代表的意义

1
2
3
4
5
6
7
8
9
10
11
\d : '代表日期
\H : '完整的主机名称
\h : '仅取主机的第一个名字
\t : '显示时间为24小时格式,如:HH:MM:SS
\T : '显示时间为12小时格式
\A : '显示时间为24小时格式:HH:MM
\u : '用户名
\v : 'BASH的版本信息
\w : '完整的工作目录名称
\W : '列出最后一个目录
\$ : '提示字符,如果是root时,提示符为:# ,普通用户则为:$

自定义效果

1
2
3
4
5
6
7
8
"只对当前用户生效,就修改~/.bashrc;如果想要所有用户生效,就修改/etc/profile"
[root@VM-0-16-centos ~]# vim ~/.bashrc
export PS1='\h:\w \$ '
[root@VM-0-16-centos ~]# source ~/.bashrc
VM-0-16-centos:~ #
"这里吧前后的[]方括号去除了,就变成了suse的风格了"
"显示完整目录有一个缺点,就是进入的目录层级越深,前缀就越长,根据个人喜好来就行"

添加颜色

1
2
3
4
5
6
7
8
9
VM-0-16-centos:~ # vim ~/.bashrc
export PS1='\[\e[0;31m\]\h:\w \$ \[\e[0m\]'
VM-0-16-centos:~ # source ~/.bashrc
"有那么点suse的味道了"

"如果你喜欢绿色,他也会原谅你的哟"
VM-0-16-centos:~ # vim ~/.bashrc
export PS1='\[\e[1;32m\]\h:\w \$ \[\e[0m\]'
VM-0-16-centos:~ # source ~/.bashrc

五颜六色

1
2
3
4
5
"甚至还可以交通灯"
VM-0-16-centos:~ # vim ~/.bashrc
export PS1='\[\e[1;31m\]\d-\[\e[0m\]\[\e[1;33m\]\h\[\e[0m\]\[\e[1;32m\]:\w \$ \[\e[0m\]'
VM-0-16-centos:~ # source ~/.bashrc

image-20220813123721651

将前缀改为实时目录

1
2
PS1='[`pwd`]\$'
export PS1