Linux运维¶
1 查看linux是centos或ubuntu¶
- 执行
lsb_release -a
,ubuntu版本会显示信息,centos版显示错误 - 执行
cat /etc/redhat-release
,centos版会显示信息,ubuntu版会显示错误
2 查看机器重启记录¶
- 执行:
last reboot
$ last reboot
reboot system boot 4.19.12-1.el7.el Tue Apr 19 18:10 - 19:12 (01:02)
reboot system boot 4.19.12-1.el7.el Sun Apr 17 21:41 - 19:12 (1+21:31)
reboot system boot 4.19.12-1.el7.el Sun Apr 17 04:28 - 19:12 (2+14:44)
reboot system boot 4.19.12-1.el7.el Sat Apr 16 20:39 - 19:12 (2+22:33)
reboot system boot 4.19.12-1.el7.el Fri Apr 15 06:56 - 19:12 (4+12:16)
reboot system boot 4.19.12-1.el7.el Thu Apr 14 19:43 - 19:12 (4+23:29)
reboot system boot 4.19.12-1.el7.el Sun Sep 5 00:29 - 19:41 (221+19:11)
reboot system boot 4.19.12-1.el7.el Sat Sep 4 05:26 - 19:41 (222+14:15)
reboot system boot 4.19.12-1.el7.el Wed Sep 1 08:12 - 19:41 (225+11:28)
reboot system boot 4.19.12-1.el7.el Tue Aug 31 03:17 - 19:41 (226+16:23)
reboot system boot 4.19.12-1.el7.el Thu Aug 26 22:11 - 19:41 (230+21:29)
reboot system boot 4.19.12-1.el7.el Thu Aug 26 17:06 - 19:41 (231+02:34)
reboot system boot 4.19.12-1.el7.el Thu Aug 26 16:43 - 19:41 (231+02:58)
reboot system boot 4.19.12-1.el7.el Fri Aug 20 11:30 - 19:41 (237+08:11)
3 修改系统hostid¶
- 示例
15ac1f1d
echo -ne '\x1d\x1f\xac\x15' > /etc/hostid
4 修改hostname¶
- 临时修改:
hostname 主机名
,机器重启失效 - 永久修改:编辑/etc/hostname文件,
echo 主机名 > /etc/hostname
5 升级系统内核¶
centos7默认内核版本是3.10,此版本内核存在漏洞,k8s中建议使用4以上内核版本
# 1.查看当前内核版本
[root@k8s ~]# uname -r
3.10.0-1160.el7.x86_64
# 2.添加yum源仓库
[root@k8s ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@k8s ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@k8s ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@k8s ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@k8s ~]# yum install -y https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
# 3.更新yum源仓库(这步更新较多,速度比较慢)
[root@k8s ~]# yum -y update
# 4.下载内核
# 4.1查看可用的系统内核包,lt表长期支持版,mt表示当前稳定版
[root@k8s ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
# 4.2安装内核,注意先要查看可用内核,我安装的是5.18.10版本的内核 (可能有些需要安装header包(内核include文件)等,请自行选择安装),kernel-mt-headers kernel-mt-tools kernel-mt-devel
[root@k8s ~]# yum --enablerepo=elrepo-kernel install kernel-ml -y
# 4.3查看目前可用内核
[root@k8s ~]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.18.10-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-338bf7be5ccb4bd4a9cd9e4ea1e91ad9) 7 (Core)
# 5.使用序号为0的内核,序号0是前面查出来的可用内核编号
[root@k8s ~]# grub2-set-default 0
# 6.生成 grub 配置文件并重启
[root@k8s ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
# 7.重启机器
[root@k8s ~]# reboot
# 8.查看内核
[root@k8s ~]# uname -r
5.18.9-1.el7.elrepo.x86_64
# 9.安装内核头文件
[root@centos7 ~]# yum install "kernel-devel-uname-r == $(uname -r)"
6 删除内核¶
[root@centos7 ~]# uname -r
5.18.15-1.el7.elrepo.x86_64
[root@centos7 ~]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.18.15-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.71.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-338bf7be5ccb4bd4a9cd9e4ea1e91ad9) 7 (Core)
[root@centos7 ~]# rpm -qa | grep kernel
kernel-tools-3.10.0-1160.71.1.el7.x86_64
kernel-ml-5.18.15-1.el7.elrepo.x86_64
kernel-3.10.0-1160.el7.x86_64
kernel-3.10.0-1160.71.1.el7.x86_64
kernel-tools-libs-3.10.0-1160.71.1.el7.x86_64
## 删除内核3.10.0的2个内核
[root@centos7 ~]# yum remove kernel-3.10.0-1160.71.1.el7.x86_64 -y
[root@centos7 ~]# yum remove kernel-3.10.0-1160.el7.x86_64 -y
[root@centos7 ~]# reboot
[root@centos7 ~]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.18.15-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (0-rescue-338bf7be5ccb4bd4a9cd9e4ea1e91ad9) 7 (Core)
7 普通用户使用 sudo¶
- 参考
- 步骤
# 编辑/etc/sudoers文件
vi /etc/sudoers
# 在添加root ALL=(ALL) ALL那一列下面添加 "用户名 ALL=(ALL) ALL"
root ALL=(ALL) ALL
user ALL=(ALL) ALL
# wq!保存退出
8 Linux 给软件设置环境变量¶
- 打开环境变量配置文件
sudo vim /etc/profile
- 新增环境变量
# 在 export PATH 下一行新增如下命令,(假设将vscode可执行文件路径设为环境变量)
export VSCODE=/opt/apps/com.visualstudio.code/files/share/code/bin
export PATH=$PATH:$VSCODE
# /opt/apps/com.visualstudio.code/files/share/code/bin是vscode可执行文件路径
- 更新配置文件
source /etc/profile
- 直接使用命令打开软件
# code是/opt/apps/com.visualstudio.code/files/share/code/bin路径下的可执行文件名
code .
9 shell 补全 bash-complete¶
- shell 补全功能:是当在命令行键入命令时,可以通过单击 tab 来自动补全,或双击 tab 显示所有匹配项。
- 实现方法:通过 linux 自带的 complete,配置相应的规则即可
- 示例
$ complete -W "one two three" test_complete
$ test_complete [TAB][TAB]
one three two
9.1 complete 语法规则¶
10 设置 man 手册搜索路径¶
- 使用场景:当我们手动安装软件时,可能需要将软件自带的 man 文件并没有在 man 默认搜索路径里,结果是导致 man 失效
- 方法:
- 修改 man 配置文件,如 ubuntu 下是
/etc/manpath.config
,debian 下是/etc/man_db.conf
- 新增一行
MANDATORY_MANPATH /your/man/path
, 如MANDATORY_MANPATH /home/shw/tools/share/man
11 设置 PS1 变量¶
12 curl¶
- 功能:用于网络间传输数据的工具,支持的协议有:HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP or FILE
- 语法:
curl [option] urls
- 无选项:显示目标url数据,如
curl https://www.baidu.com/
,将输出网页源码 -o file
或>> file
:指定输出文件,即重定向到指定文件-s/--silent
:不显示进程条和错误信息-X/--request <command>
:http中请求方式,如GET、PUT、POST
,默认GET方法-H/--header <header>
:指定http头部内容-d/--data <data>
:指定http中body消息体内容-T/--upload-file <file>
:上传文件,如果用于ftp,在url后有/
表示的是目录,否则当成文件名,如果文件存在,则覆盖,如果指定了-a
,则追加写。如果用户http,则采用put方法curl -u username:password URL
:在访问需要授权的页面时,输入用户名和密码curl -u username URL
:同上,仅输入用户名,后根据提示输入密码-C -
:断点续传,当上一次下载任务尚未完成而异常终止,使用此选项可以接着上一次进程继续下载-i
:参数打印出服务器回应的 HTTP 标头- 示例:选项
-o
$ curl https://www.baidu.com/ >>baidu.html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2443 100 2443 0 0 22172 0 --:--:-- --:--:-- --:--:-- 22412
$ curl https://www.baidu.com/ -o baidu.html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2443 100 2443 0 0 19924 0 --:--:-- --:--:-- --:--:-- 20190
- 示例:-T -a
# 将本地baidu.html追加写入ftp://192.168.1.59/下的1.txt中
$ curl -aT baidu.html ftp://192.168.1.59/1.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2443 0 0 100 2443 0 7437 --:--:-- --:--:-- --:--:-- 7448
13 日志文件里面查找关键字¶
13.1 head和tail查看日志首位行¶
- 查看日志 前 n行:
- 语法:
cat 文件名 | head -n 数量
- 示例:
cat log.log | head -n 200
- 查看日志 尾 n行:
- 语法:
cat 文件名 | tail -n 数量
- 示例:
cat log.log | tail -n 200
13.2 grep 查找日志关键字¶
- 方法1:
- 语法:
cat 文件名 | grep "关键词"
- 示例:
cat log.log | grep "train"
- 方法2:
- 语法:
grep -i "关键词" 文件名
- 示例:
grep -i "train" log.log
14 chrony时间同步¶
# 安装chrony
[root@k8s ~]# yum install -y chrony
# 开机自启,启动chronyd服务,查看服务状态
[root@k8s ~]# systemctl enable chronyd
[root@k8s ~]# systemctl start chronyd
[root@k8s ~]# systemctl status chronyd
# 测试时间
[root@k8s ~]# date
Sun Jul 3 11:28:18 CST 2022
15 ssh互信¶
16 防火墙¶
16.1 不关闭防火墙暴露指定端口供外网访问¶
在开启防火墙时,如果想要外网访问主机,需要在防火墙配置中将此访问端口公开,否则访问会失败。比如你的机器作为web服务器,需要配置防火墙开放80端口公网才能访问。
17 systemd¶
17.1 systemctl管理程序¶
17.1.1 systemctl status 状态类型¶
在操作系统中,有某些服务只需要初始化一下就可以了;不需要在服务器中启动一个守护进程。这种服务初始化完成后就直接推出,其服务的状态就是active(exited)。
使用systemctl 查看服务的状态,返回的状态有以下几种:
1. loaded
:系统服务已经初始化完成,加载过配置
2. active(running)
:正有一个或多个程序正在系统中执行, vsftpd就是这种模式
3. atcive(exited)
:仅执行一次就正常结束的服务, 目前并沒有任何程序在系統中执行
4. atcive(waiting)
:正在执行当中,不过还在等待其他的事件才能继续处理
5. inactive
:服务关闭
6. enbaled
:服务开机启动
7. disabled
:服务开机不自启
8. static
:服务开机启动项不可被管理
9. failed
:系统配置错误
18 pkg-config¶
- 功能:获取已安装库的元信息(比如需要链接的lib库,包含的头文件信息)。需要配置库信息相关文件(.pc文件),然后pkg-config去解析
18.1 pkg-config使用¶
使用方式:首先要先定义.pc文件,然后将.pc文件所在目录写入PKG_CONFIG_PATH变量中,并导出,如export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
,这样pkg-config
命令才能找到.pc文件
- 语法:pkg-config [option] 库名称
- 可选参数:
- [--cflags]
:显示如头文件包含的信息,如-I${libdir}/glib/include
- [--libs]
:显示库链接信息,如-L${libdir} -lgobject-1.3
- ...
- 示例:pkg-config --cflags --libs fuse
:获取libfuse的链接和头文件包含信息
18.2 .pc文件规则¶
.pc文件中每行具有2中含义:1.以=赋值的变量,如下面示例中prefix变量;2.以:标识的预定义的关键字,如下面示例中Name关键字
- 关键字如下:
- Name
:包名;(特点:简洁,可读;不是pkg-config命令中的库名)
- Description
:包名的描述信息。(简洁明了)
- URL
:可以为使用者获得更多信息或下载本包的网址
- Version
:包的版本信息
- Requires
:提供依赖包的检测功能。每一个依赖包以,
区分,也可以使用=, <, >, >=, <=来指定版本;如Requires: glib-2.0 = 1.3.1
- Conflicts
:提供冲突包的检测功能。每一个冲突包以,
区分,也可以使用=, <, >, >=, <=来指定版本,也可以重复指定不同版本的包;如Conflicts: foobar=4.8 foobar <= 4.5-
Libs:使用本包需要的链接信息,如
Libs: -L${libdir} -lgobject-1.3-
Libs.private:私有库的链接信息。静态链接需要使用。如
Libs.private: -lm。Private libraries are libraries which are not exposed through your library, but are needed in the case of static linking.
-
Cflags:一些编译选项,包括头文件包含路径,如
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib/include`
- 示例
##This is a comment
prefix=/home/hp/unst # this defines a variable
exec_prefix=${prefix} # defining another variable in terms of the first
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: GObject # human-readable name
Description: Object/type system for GLib # human-readable description
Version: 1.3.1
URL: http://www.gtk.org
Requires: glib-2.0 = 1.3.1
Conflicts: foobar <= 4.5
Libs: -L${libdir} -lgobject-1.3
Libs.private: -lm
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib/include
19 查看系统相关信息¶
19.1 查看内存信息¶
cat /proc/meminfo
19.2 查看某一进程系统资源占用信息/proc/[PID]
¶
- 在
/proc/[PID]
目录下有以下文件(PID是进程号)
$ ls /proc/1958076
attr clear_refs cpuset fd limits mem net oom_score projid_map setgroups statm timers
autogroup cmdline cwd fdinfo loginuid mountinfo ns oom_score_adj root smaps status uid_map
auxv comm environ gid_map map_files mounts numa_maps pagemap sched stack syscall wchan
cgroup coredump_filter exe io maps mountstats oom_adj personality sessionid stat task
19.2.1 查看io信息¶
$ cat /proc/1958076/io
rchar: 21911
wchar: 1420
syscr: 53
syscw: 5
read_bytes: 0
write_bytes: 4096
cancelled_write_bytes: 0
- 参数解释如下:
rchar
:读出的总字节数,read或者pread()中的长度参数总和(pagecache中统计而来,不代表实际磁盘的读入)wchar
:写入的总字节数,write或者pwrite中的长度参数总和syscr
:read()或者pread()总的调用次数syscw
:write()或者pwrite()总的调用次数read_bytes
:实际从磁盘中读取的字节总数 (这里if=/dev/zero 所以没有实际的读入字节数)write_bytes
:实际写入到磁盘中的字节总数cancelled_write_bytes
:由于截断pagecache导致应该发生而没有发生的写入字节数(可能为负数)
19.2.2 查看进程的状态status¶
- 参数解释如下:
VmHWM
:物理内存占用的峰值VmRSS
:占用的物理内存
19.3 判断固态硬盘和机械硬盘¶
- 使用
lsblk -d
查看块设备名 - 使用
cat /sys/block/[块设备名]/queue/rotational
- 输出0表示设备不可旋转(即固态硬盘)
- 输出1表示设备可以旋转(即机械硬盘)
- 示例:sdf是机械硬盘,sdg是固态硬盘
$ lsblk -d
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1.1T 0 disk
sdb 8:16 0 1.1T 0 disk
sdc 8:32 0 1.1T 0 disk
sdd 8:48 0 1.1T 0 disk
sde 8:64 0 1.1T 0 disk
sdf 8:80 0 1.1T 0 disk
sdg 8:96 0 447.1G 0 disk
sdh 8:112 0 447.1G 0 disk
sr0 11:0 1 1024M 0 rom
$ cat /sys/block/sdf/queue/rotational
1
$ cat /sys/block/sdg/queue/rotational
0
19.4 查看linux发行版本¶
lsb_release -a
19.5 查询操作系统信息¶
uname -a
20 查看ip¶
20.1 hostname¶
shw@小锋哥:~$ hostname -I
172.22.227.232
20.2 ip¶
shw@小锋哥:~$ ip addr show
20.3 ifconfig¶
shw@小锋哥:~$ ifconfig