内核与模块管理
lsb_release - 查看LSB信息
LSB是Linux Standard Base的缩写,lsb_release命令用来显示LSB和特定版本的相关信息。如果使用该命令时不带参数,则默认加上-v参数。安装命令:yum install -y redhat-lsb
语法格式: lsb_release [参数]
常用参数:
| -i | 显示系统名称简写 |
|---|---|
| -d | 显示系统全称和版本号 |
| -r | 显示版本号 |
| -a | 显示LSB所有信息 |
查看Linux系统版本
# 此命令适用于所有的Linux发行版.包括RedHat、SUSE、Debian…等[root@harbor ~]# lsb_release -aLSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarchDistributor ID: CentOSDescription: CentOS Linux release 7.5.1804 (Core)Release: 7.5.1804Codename: Core
cat /etc/redhat-release,这种方法只适合Redhat系的Linux;
cat /etc/issue,此命令也适用于所有的Linux发行版
uname – 显示系统信息
uname命令的英文全称即“Unix name”。
用于显示系统相关信息,比如主机名、内核版本号、硬件架构等。
语法格式:uname [参数]
常用参数:
| -a | 显示系统所有相关信息 |
|---|---|
| -m | 显示计算机硬件架构 |
| -n | 显示主机名称 |
| -r | 显示内核发行版本号 |
| -s | 显示内核名称 |
| -v | 显示内核版本 |
| -p | 显示主机处理器类型 |
| -o | 显示操作系统名称 |
| -i | 显示硬件平台 |
查看内核版本
[root@harbor ~]# uname -aLinux harbor 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux# cat /proc/version 也可以查看[root@harbor ~]# cat /proc/versionLinux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018
常用工具命令
screen – 多窗口管理程序
Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
会话恢复
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
多窗口
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。 会话共享 Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。
语法格式:screen [参数]
常用参数:
| -A | 将所有的视窗都调整为目前终端机的大小 |
|---|---|
| -d<作业名称> | 将指定的screen作业离线 |
| -m | 即使目前已在作业中的screen作业,仍强制建立新的screeN作业 |
| -r<作业名称> |
| 恢复离线的screen作业 |
| -R | 先试图恢复离线的作业,若找不到离线的作业,即建立新的screen作业 |
| -s
| 显示版本信息 | | -x | 恢复之前离线的screen作业 | | -ls | 显示目前所有的screen作业 | | -list | 显示目前所有的screen作业 |
多窗口执行shell脚本
# screen指定作业名称,启动一个新会话,执行shell脚本root@master:# screen -S k3s.deploy[detached from 2305.k3s.deploy]# Ctrl+a+d -> 会话分离,此后会话处于Detachedroot@master:# screen -lsThere is a screen on:2305.k3s.deploy (06/12/2021 11:54:16 PM) (Detached)1 Socket in /run/screen/S-root.# 会话恢复root@master:# screen -r 2305root@master:# screen -lsThere is a screen on:2305.k3s.deploy (06/12/2021 11:54:15 PM) (Attached)1 Socket in /run/screen/S-root.# 杀死窗口,此后会话处于dead状态root@master:~# kill -9 2305root@master:~# screen -lsThere is a screen on:2305.k3s.deploy (06/12/2021 09:54:51 PM) (Dead ???)Remove dead screens with 'screen -wipe'.1 Socket in /run/screen/S-root.# 清除dead会话root@master:~# screen -wipeThere is a screen on:2305.k3s.deploy (06/12/2021 09:54:50 PM) (Removed)1 socket wiped out.No Sockets found in /run/screen/S-root.
常用命令
df
df -h 打印设备上挂载了多少磁盘,以及磁盘里还有多少可用空间。[root@harbor ~]# df -h文件系统 容量 已用 可用 已用% 挂载点/dev/vda1 50G 23G 24G 50% /devtmpfs 7.8G 0 7.8G 0% /devtmpfs 7.8G 0 7.8G 0% /dev/shmtmpfs 7.8G 2.9M 7.8G 1% /runtmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup/dev/vdc1 197G 157G 31G 84% /var/lib/docker/dev/vdd1 99G 68G 26G 73% /data系统盘分配大小为50G,/dev/vda1分区被挂载到根目录docker数据盘大小197G,/dev/vdc1分区被挂载到/var/lib/docker,这意味着所有在/var/lib/docker之下的文件和目录在物理意义上存储于/dev/vdc1上
grep
根据正则表达式查找相关内容并打印对应的数据-A 除了显示符合范本样式的那一行之外,并显示该行之后的内容。-B 在显示符合范本样式的那一行之外,并显示该行之前的内容。-C 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。-c 计算符合范本样式的列数。-i 忽略字符大小写的差别。-v 反转查找# 查看日志里面有 error 关键字的日志记录,与这个记录前后三行的日志信息cat log-fail.txt |grep error -C 3
awk
localhost% cat test.txtNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIMEk8s01 Ready wise-controller 38d v1.16.4 192.168.0.3 <none> CentOS 3.10.0-862.el7.x86_64 docker://18.9.8k8s02 Ready wise-controller 38d v1.16.4 192.168.0.7 <none> CentOS 3.10.0-862.el7.x86_64 docker://18.9.8k8s03 Ready wise-controller 38d v1.16.4 192.168.0.10 <none> CentOS 3.10.0-862.el7.x86_64 docker://18.9.8k8s04 NotReady node 38d v1.16.4 192.168.0.15 <none> CentOS 3.10.0-862.el7.x86_64 docker://18.9.8# 打印文本的总列数,即字段数量localhost% awk 'END{print NF}' test.txt10# 打印文件的第一列和第五列localhost% awk '{print $1,$5}' test.txtNAME VERSIONk8s01 v1.16.4k8s02 v1.16.4k8s03 v1.16.4k8s04 v1.16.4# 打印最后一列字段localhost% awk '{print $NF}' test.txtCONTAINER-RUNTIMEdocker://18.9.8docker://18.9.8docker://18.9.8docker://18.9.8打印倒数第二列字段:localhost% awk '{print $(NF-1)}' test.txtKERNEL-VERSION3.10.0-862.el7.x86_643.10.0-862.el7.x86_643.10.0-862.el7.x86_643.10.0-862.el7.x86_64# 打印文本文件的总行数localhost% awk 'END{print NR}' test.txt5# 打印文本第1行数据localhost% awk 'NR==1{print}' test.txtNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME# 打印文本大于第1行的数据localhost% awk 'NR>1{print}' test.txtk8s01 Ready wise-controller 38d v1.16.4 192.168.0.3 <none> CentOS 3.10.0-862.el7.x86_64 docker://18.9.8k8s02 Ready wise-controller 38d v1.16.4 192.168.0.7 <none> CentOS 3.10.0-862.el7.x86_64 docker://18.9.8k8s03 Ready wise-controller 38d v1.16.4 192.168.0.10 <none> CentOS 3.10.0-862.el7.x86_64 docker://18.9.8k8s04 NotReady node 38d v1.16.4 192.168.0.15 <none> CentOS 3.10.0-862.el7.x86_64 docker://18.9.8# 打印文本最后1行数据localhost% awk 'END{print}' test.txtk8s04 NotReady node 38d v1.16.4 192.168.0.15 <none> CentOS 3.10.0-862.el7.x86_64 docker://18.9.8# 打印统计两种状态的主机数量localhost% cat test.txt |awk 'NR>1{print $2}' |uniq -c3 Ready1 NotReady
sed
定位到数据行并对数据进行增删改查操作。替换文本中的字符串:sed 's/book/books/' file# 使用后缀/g标记会替换每一行中的所有匹配:[root@harbor image_pull_push]# cat img-list.txt |sed 's/registry.cn-hangzhou.aliyuncs.com/192.168.0.11/g'当需要从第N处匹配开始替换时,可以使用 /Ng:echo sksksksksksk | sed 's/sk/SK/3g'skskSKSKSKSK
find
find . -name README.md 查找当前目录下是否存在README.mdfind / -name nginx.conf 查找根目录/是否存在nginx.conffind /home -name "*.txt" 在/home目录下查找以.txt结尾的文件名find / -size +500M 搜索大于500M的文件
echo
# 创建带有内容的文件[root@harbor ~]# echo hello > new.yaml[root@harbor ~]# cat new.yamlhello# 追加写入文件[root@harbor ~]# echo hello-test >> new.yaml[root@harbor ~]# cat new.yamlhellohello-test
wc
wc -l 统计文本行数wc -w 统计文本字数wc -c 统计文本字节数
dd
创建一个50M的文件,文件名为out.txtdd if=/dev/zero of=out.txt bs=10M count=1
tar
tar -cvf log.tar log2012.log 仅打包,不压缩!tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩tar -ztvf log.tar.gz 查阅tar包内有哪些文件tar -zxvf /opt/soft/test/log.tar.gz 将tar包解压缩总结1、*.tar 用 tar –xvf 解压2、*.gz 用 gzip -d或者gunzip 解压3、.tar.gz和.tgz 用 tar –xzf 解压4、*.bz2 用 bzip2 -d或者用bunzip2 解压5、*.tar.bz2用tar –xjf 解压6、*.Z 用 uncompress 解压7、*.tar.Z 用tar –xZf 解压8、*.rar 用 unrar e解压9、*.zip 用 unzip 解压
文件与目录管理
ls
ls -l 列出当前目录下所有文件详细信息ls -a 列出当前目录下所有文件及目录,包括隐藏文件目录[root@dev-7 ~]# ll -d /var/log/message*-rw------- 1 root root 3746323 12月 22 17:58 /var/log/messages-rw-------. 1 root root 11478322 10月 15 17:28 /var/log/messages-20191015-rw------- 1 root root 1296942 12月 21 03:43 /var/log/messages-20191221-rw------- 1 root root 6150415 12月 22 03:27 /var/log/messages-20191222
stat
stat 显示指定文件的详细信息,比ls更详细
pwd
pwd 获取当前目录所在的路径
mkdir
mkdir -p 创建目录,若无父目录,则创建p(parent)
tree
树形结构列出指定目录下的所有文件,包括子目录里的文件
cat
cat 显示全部内容,结合grep可以查找内容
more、less
more 分页显示文本文件内容less 支持上下滑动,左右移动显示内容
head、tail
head file (显示文件file的前10行)tail file (显示文件file的最后10行)tail -n 20 file (显示文件file的最后20行)tail -f 20 file (实时显示文件最新追加的20行内容)
vim
一般模式:上下翻页:Ctrl+f、Ctrl+b、跳到当前行最后字符处:Fn+右键跳到当前行最前面字符处:Fn+左键、0查找字符images:/image n继续查找删除行:dd ndd(n代表删除或复制的行数)复制行:yy nyy粘贴行:p、P复原前一个操作:u重做上一个操作:ctrl+r显示行号::set nu字符全局替换::%s/foo/bar/g :{作用范围}s/{目标}/{替换}/{替换标志}
scp
从远程拷贝目录到本地scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/上传本地目录到远程机器指定目录scp -r /opt/soft/mongodb root@10.10.10.10:/opt/soft/scptest
chmod、chown
chmod 修改一个文件的权限chown 修改一个文件所归属的用户或组
以 README.md 文件为例,文件权限中有三组内容:第一组内容(rw)表示该文件在当前用户下的权限,d代表是目录第二组内容(r)表示在同组下的权限第三组内容(r)表示不在同组下其他方的权限。而 r 表示可读,w 表示可写,x 表示文件可执行。localhost:wise2c-robot liaoxb$ ls -ltotal 1216-rw-r--r-- 1 liaoxb staff 515 11 5 14:36 Dockerfiledrwxr-xr-x 6 liaoxb staff 192 11 5 14:36 Project-rw-r--r-- 1 liaoxb staff 1404 11 5 14:36 README.mddrwxr-xr-x 25 liaoxb staff 800 12 13 18:36 libspecs-rw-r--r-- 1 liaoxb staff 250147 12 20 17:02 log.html-rw-r--r-- 1 liaoxb staff 61616 12 20 17:02 output.xml-rw-r--r-- 1 liaoxb staff 1405 12 20 15:01 red.xml-rw-r--r-- 1 liaoxb staff 230561 12 20 17:02 report.html-rw-r--r-- 1 liaoxb staff 229 12 20 12:44 requirements.txt
进程和网络管理
ps
ps -ef 报告当前系统的进程状态。用户的 UID,进程的PID,父进程的PPID,以及进程开始的时间,运行参数等信息
top
top 显示负载情况,当前用户,启动时间,相关的任务树,以及内存,进程的一些数据等,同样也包含 PID、USER、内存、共享内存,CPU 占比等全部信息
netstat
有时进程之间需要通信,需要开启一个socket,socket就是对外建立连接的一个窗口,然后借助TCP协议进行通信。但进行通信之前首先需要进程开启一个端口,这时就可以通过netstat命令查看开启的端口以及由哪个进程开启
netstat -anlp-t或--tcp:显示TCP传输协议的连线状况;-u或--udp:显示UDP传输协议的连线状况;-n或--numeric:直接使用ip地址,而不通过域名服务器;-l或--listening:显示监控中的服务器的Socket-p或--programs:显示正在使用Socket的程序识别码和程序名称;
ss
ss 可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效
系统管理命令
du
du -sh 对文件和目录磁盘使用的空间总量的查看
watch
watch -d -n 60 "free -h" 每分钟动态监测主机内存的使用情况
who
显示在线登陆用户
whoami
显示当前操作用户
rpm
rpm -qa 列出所有安装过的包rpm -ql nfs-utils-1.3.0-0.54.el7.x86_64 获取rpm包中的文件安装路径rpm -ivh your-package.rpm 安装rpm软件包
alias
alias showmeit="ps -aux" 命令重命名unaliax showmeit 解除使用
nohup
nohup command > myout.file 2>&1 &stderr和stdout被重定向到myout.file文件中使用Ctrl + C发送SIGINT信号,程序关闭;关闭session发送SIGHUP信号,程序免疫;平时经常使用nohup和&配合来启动程序。双同免疫
script
script -q myfile 静默模式记录,exit 退出记录
crontab
crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:minute hour day month week command每五分钟执行 */5 * * * *每小时执行 0 * * * *每天执行 0 0 * * *每周六、周日的1:10重启smb *10 1 * * 6,0 /etc/init.d/smb restart*创建cron脚本用法- 第一步,vi创建cron脚本,命名为crontest.cron,写入命令*0 9 * * * echo "Good morning." >> /tmp/test.txt* 每天早上9点执行打印一次命令- 第二步:添加定时任务。执行命令 *crontab crontest.cron* 搞定- 第三步:*crontab -l* 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本其它用法- *crontab -r* 删除该用户的定时任务- *crontab -e* 编辑该用户的定时任务
wget
下载harbor安装包,默认会以最后一个符合/的后面的字符来命令wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgz下载并以不同的文件名保存wget -O harbor.tgz https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgz后台下载wget -b url
linux命令大全汇总 http://man.linuxde.net/netstat
