Linux 常用命令
命令解析器
Shell:Unix 系统
Bash :Linux 系统
基础命令
系统信息
填充
Tab # 两下出选项
中断当前正在执行的/程序
Ctrl + C
退出
Ctrl + D = exit
清屏
Ctrl + L
clear
查看计算机名
hostname
查看主机名
hostnamectl
修改主机名
hostnamectl set-hostname 主机名
日期时间
date [+%Y/%m/%d] [+%H/%M]
日历
cal [month] [year]
当前在线用户
who
CPU 大小
cat /proc/cpuinfo | grep "model name" && cat /proc/cpuinfo | grep "physical id
内存大小
cat /proc/meminfo | grep MemTotal
硬盘大小
fdisk -l | grep Disk
查看内核版本
uname [-asrmpi]
-a:所有系统信息
-s:系统内核名称 Linux
-r:内核版本信息 3.10.0-957.21.3.el7.x86_64
-m:系统硬件架构 x86_64
-p:CPU类型信息 x86_64
-i:硬件平台信息 x86_64
显示当前支持的语系
locale
修改语系
LANG=en_US_utf8
export LC_ALL=en_US_utf8
帮助
command --help
man command # Space翻页 Home首页 End尾页 /string下差string ?string上查string
+ NAME:命令名称
+ SYNOPSIS:命令语法
+ DESCRIPTION:完整说明
+ OPTIONS:选项说明
重启
reboot
shutdown -r now
关机
poweroff
shutdown -h now
# 关机前将内存中的数据同步到磁盘,多执行几次
sync; sync; sync; reboot
目录、文件
查看路径(pwd)
查看当前路径(Print Working Directory)
pwd
切换路径(cd)
路径:相对路径、绝对路径(Change Directory)
cd / # 根目录
cd ~ # 家目录 /home/hefery
. # 当前目录
cd .. # 上级目录
cd - # 切换前一工作目录
查看目录结构(ls -al)
ls -l == ll
ls -al # 显示所有文件或目录(包含隐藏的文件)
tree # 列出目录下所有的文件,并以树状形式展现
查看目录结构 tree 需下载 sudo apt install tree; yum install tree
白色:普通文件
蓝色:目录
绿色:可执行文件
红色:压缩文件
青色:链接文件
黄色:设备文件(block、char、fifo)
灰色:其他文件
输入 ll
,查看当前目录下文件
Linux 文件类型:
1.普通文件: 包括纯文本 ASCII 文件、数据 data 文件、二进制 binary 文件
2.目录文件: Linux 系统把目录看成是一种特殊的文件,利用它构成文件系统的树型结构
3.设备文件: Linux 系统把每一个设备都看成是一个文件
区块 Block 设备文件:硬盘、软盘等存储数据以提供系统随机存取的接口设备
字符 character 设备文件:键盘、鼠标等串行端口的接口设备
4.链接文件:快捷方式
5.数据接口文件:sockets
6.数据传输文件:pipe、fifo
文件类型:1
-:普通文件 d:目录 b:块设备 c:字符设备 l:链接符号 p:管道 s:socket 文件
文件 user 权限:3
r:read w:write x:execute
所属组用户权限:3
r:read w:write x:execute
其他人权限:3
创建删除目录(mkdir、rmdir)
mkdir:Make Directory
mkdir 目录名称
mkdir -p 一级目录/二级目录/三极目录 # 递归创建
rmdir:Remove Directory
rmdir 目录名称 # 删除空目录
rm -r 一级目录/二级目录/三极目录 # 递归删除
创建删除文件(touch、rm -rf )
touch hello.c # 创建文件
rm -f hello.c # 删除文件
rm -rf * # 删除所有文件
拷贝文件、目录(cp)
cp [-i] hello.c temp.c # 若拷贝到已有文件,则覆盖原文件内容
cp -r 目录/ 新目录 # 递归拷贝
查看文件内容(cat、vim)
cat hello.c # 适合短内容文件
more hello.c # 行切Enter、页切Space、回看Ctrl+B
vim hello.c # 常用
tail -10 /etc/passwd # 查看后10行数据
tail -f catalina.log # 动态查看日志
重命名、移动(mv)
mv hello.c hi.c
mv hello.c newDir
创建硬链接(ln)
ln hello.c hello.hard # 不占磁盘空间,文件链接数+1
打包压缩
#1.tar #参数 -c:创建一个新tar文件 -v:显示运行过程的信息 -f:指定文件名 -z:调用gzip压缩命令进行压缩 -t:查看压缩文件的内容 -x:解开tar文件 #压缩 tar -zcvf XXX.tar.gz /hefery/Desktop/Software # z:使用gzip方式压缩 x:压缩 v:显示提示信息 f:指定压缩文件名称 tar -jcvf XXX.tar.bx2 /hefery/Desktop/Software # j:使用bizp2方式压缩 x:压缩 v:显示提示信息 f:指定压缩文件名称 #解压 tar -zxvf XXX.tar.gz -C /hefery/Desktop/Moduls tar –xvf XXX.tar -C /hefery/Desktop/Moduls # 2.rar:需手动安装 sudo apt-get install rar #压缩 rar -a XXX /hefery/Desktop/Software #压缩文件 rar -r XXX /hefery/Desktop/Software #压缩目录 #解压缩 rar -x XXX /hefery/Desktop/Moduls # 3.zip:需手动安装 sudo apt-get install zip #压缩 zip XXX /hefery/Desktop/Software #解压缩 unzip XXX -d /hefery/Desktop/Moduls
比较文件差异
diff -u 1.txt 2.txt
查看一个文件夹下有多少个文件
ls -l | grep "^-" | wc -l
文件权限
文件属性
# nacos目录下执行 ls -al
total 114884
drwxr-xr-x 10 root root 4096 Nov 24 20:42 .
drwxr-xr-x 10 root root 4096 Nov 28 04:06 ..
drwxr-xr-x 2 root root 4096 Nov 9 11:15 logs
drwxr-xr-x 7 root root 4096 Nov 9 10:53 nacos
drwxr-xr-x 8 root root 4096 Nov 9 11:33 nacos-8848
drwxr-xr-x 8 root root 4096 Nov 9 11:15 nacos-8858
drwxr-xr-x 8 root root 4096 Nov 9 11:15 nacos-8868
drwxr-xr-x 6 root root 4096 Nov 8 22:35 nacos-8878
-rw-r--r-- 1 root root 117598819 Nov 8 15:16 nacos-server-2.0.3.zip
drwxr-xr-x 3 root root 4096 Nov 24 20:44 nacosstandalone
drwxr-xr-x 3 root root 4096 Nov 8 22:35 work
[类型+权限][链接数][拥有者][用户组][ 文件容量 ][ 修改日期 ][文件名]
类型:文件(-)、目录(d)
常规文件:纯文本文件(ASCII)、二进制文件(binary)、数据文件(data)
目录(directory)
链接(link)
设备文件:区块设备(block)、字符设备(character)
数据接口文件(socket)
数据输送文件(FIFO、pipe)
权限:文件拥有者owner权限(3) + 文件所属用户组group权限(3) + 其他人others权限(3)
权限说明:可读(r==4)、可写(w==2)、可执行(x==1)、无权限(-)
文件nacos-server-2.0.3.zip:-rw-r--r-- 拥有者可读可写,组成员可读,其他人可读
文件权限:
-rwxr-xr-- 拥有者可读可写可执行,组成员可读可执行,其他人可读
-rwxr-xr-x 拥有者可读可写可执行,组成员可读可执行,其他人可读可执行
注意:
目录没有x权限,不能进入(目录的 x 代表用户能否进入该目录成为工作目录)
文件开头为小数点“.”代表隐藏文件
修改文件属性和权限
# 修改所属用户组
chgrp [-R] dirname/filename # -R递归修改
# 修改文件拥有者
chown [-R] 账户名称 dirname|filename
chown [-R] 账户名称:用户组名称 dirname|filename
# 修改文件权限
chmod 754 filenmae # 数字类型修改-rwxr-xr--
chmod u=rwx,go=rx filenmae # 符号类型修改-rwxr-xr-x (u:owner g:group o:others)(+:添加 -:去除 =:赋予)
查找和检索
# 查找脚本文件所在路径
which 文件(ifconfig)
按文件名称查找
# find 查找目录 -name "文件名" find 目录 -name "*文件名*" find / -name redis.conf # 通配符的使用: 多个* 单个? find / -name “ins*” # 查找文件名称是以ins开头的文件 find / -perm -777 –type d-ls # 查找权限是777的文件 grep lang anaconda-ks.cfg –color # 在文件中查找lang(高亮显示)
按文件大小查找
# find 查找目录 -size -10k/+10M find ~ -size -10k # 小于10k find ~ -size +10M # 大于10M find ~ -size +10M -size -100M # 大于10M,小于100M
按文件类型查找
# find 目录 -type 普通文件-/目录d/链接l/块b/字符c/套接字s/管道p
按文件内容查找
grep -r "查找内容" 查找目录 find / -name "*sh" | xargs grep -i "*if*" 搜索sh文件中是否有包含if的字符串 # 反向匹配, 查找不包含xxx的内容 grep -v xxx # 查询以abc开头的行 grep -n “^abc” 111.txt # 同时列出该词语出现在文章的第几行 grep 'xxx' -n xxx.log # 忽视大小写 grep 'xxx' -i xxx.log
按时间属性查找
find /etc -cmin -5 # 在 /etc 目录下查找5分钟内被修改过属性的文件和目录 -amin 访问时间 -cmin 文件属性被更改 -mmin 文件内容被修改
按所有属/者查找
find /home -group hefery # 在home目录下查询所属组为 hefery 的文件 find /home -user hefery # 在home目录下查询所有者为 hefery 的文件
软件安装、卸载
apt-get 安装
# 安装 sudo apt-get install tree # 移除 sudo apt-get remove tree # 更新 sudo apt-get update # 状态 sudo aptitude show tree
deb 包安装
# 安装 sudo dpkg -i XXX.deb # 卸载 sudo dpkg -r XXX
yum 安装
# 安装 yum -y install packagename yum install/update 软件名称 # 重新安装 yum reinstall packagename # 卸载 yum remove packagenmae # 更新 yum update [package] # 降级 yum downgrage package 查询: yum info 软件名称 # 软件功能 yum list # 已安装软件 yum list updates # 可升级软件 yum check-update # 检查可用的更新 yum deplist package1 # 查询软件包的依赖 # 处理损坏包的依赖 yum clean all yum update # 查看软件是否安装 rpm -qa | grep -i 软件名称 # 查找软件 yum search 软件名称 # 安装软件 yum install 软件名称
rpm 安装
安装:rpm -ivh 包全名/http地址 -i (install) 安装 -v (verbose) 显示详细信息 -h (hash) 显示进度 --nodeps:软件依赖出现导致无法安装,执意安装 --force:某文件、软件已安装,执意安装 升级:rpm -Uvh 包全名 -U (upgrade) 升级 卸载:rpm -e 包名 -e (erase)卸载 --nodeps 不检测依赖性(实际工作中也不允许使用) 查询是否安装:rpm -q 包名 -q 查询(query) 查询所有已经安装的RPM包:rpm -qa 查询软件包详细信息:rpm -qi 包名 -i 查询软件信息(information) -p 查询未安装包信息(package) 查询软件包的依赖性:rpm -qR 包名 -R 查询软件包的依赖性(requires) -p 查询未安装包信息(package)
用户、文件权限
用户ID :UID
用户组ID:GID
/etc/passwd:管理用户UID、GID
/etc/group :规范组名与GID的对应
/etc/shadow:管理密码
校验过程:
1.查找 /etc/passwd 里是否存在账号,若存在则找出账号对应的UID、GID(/etc/group),并设置用户家目录和shell配置
2.核对密码表,Linux进入 /etc/shadow 找出对应的账号与UID,核对密码
查看当前用户
[root@iZwz92kyfwxfkwzurg8czfZ ~]# w 10:46:34 up 19 days, 19:23, 2 users, load average: 0.02, 0.03, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 183.215.20.2 08:47 44:02 0.08s 0.08s -bash root pts/1 183.215.20.2 10:10 2.00s 0.00s 0.00s w [root@iZwz92kyfwxfkwzurg8czfZ ~]# who root pts/0 2020-10-26 08:47 (183.215.20.2) root pts/1 2020-10-26 10:10 (183.215.20.2) [root@iZwz92kyfwxfkwzurg8czfZ ~]# whoami root
切换用户(su)
# 切换root用户 hefery@Ubuntu16:/$ sudo su [sudo] password for hefery: [hefery@CentOS7 ~]$ su - Password: # 切换普通用户 root@Ubuntu16:/#su hefery hefery@Ubuntu16:/$
修改文件权限(chmod)
数字类型:二进制设定 r -> 4、w -> 2、x -> 1 owner:rwx -> 4+2+1=7 group:rwx -> 4+2+1=7 other:--- -> 0+0+0=0 chmod [-R] 770 文件/目录 # shell脚本文件设置可执行权限 chmod 755 hello.sh 符号类型: user-> u group -> g others -> o all -> a chmod [u|g|o|a] [+|-|=] [r|w|x] # shell脚本文件设置可执行权限 chmod u+x hello.sh # 团队开发数据共享 -rwxrws---
拓展:目录的权限 1.r:读取目录结构 2.w:操作目录结构(慎重) 3.x:能否作为工作目录
修改所属用户/用户组(chown、chgrp)
chown [-R] 账号名称root[:用户组名称] 文件/目录 chgrp [-R] 文件/目录
添加删除用户(组)
# 用户名需小写 useradd XXX useradd -s /bin/bash -g Hefery -d /home/hefery -m hefey -s:指定shell,默认/bin/bash -g:初始用户组 -d:家目录绝对路径 -m:建立使用者家目录 # 查看用户是否创建成功 grep hefery /etc/passwd /etc/shadow /etc/group # 修改用户信息 usermod [-cdegGlsuLU] username # 查看 useradd 默认值 [root@iZwz92kyfwxfkwzurg8czfZ ~]# useradd -D GROUP=100 # GID HOME=/home # 家目录基准目录 INACTIVE=-1 # 密码过期是否失效的设置值 EXPIRE= # 账号失效日期 SHELL=/bin/bash # 默认 shell SKEL=/etc/skel # 用户家目录参考基准目录 CREATE_MAIL_SPOOL=yes # 建立用户的 mailbox deluser XXX # 连同用户主目录一并删除 userdel -r XXX # 新增用户组 groupadd 用户组名称 # 修改用户组信息 groupmod 用户组名称 # 删除用户组 groupdel
修改密码
passwd XXX
主机名配置
hostname 查看主机名 hostname xxx 修改主机名 重启后无效 永久生效:修改/etc/sysconfig/network文件
磁盘管理
硬盘设备种类:
SCSI Device
hd Hard Disk 硬盘
fd floppy Disk 软盘
硬盘1:sda 主分区:最多只能有4个
包括主分区1(sda1)、主分区2(sda2)、主分区3(sda3)、主分区4(sda4)
拓展分区:第一个逻辑分区sda5开始
硬盘2:sdb ...
硬盘3:sdc ...
# 查看磁盘挂载情况
mount
# 查看磁盘分区信息
df
# 查看目录及子目录大小
du -H -h
# 查看当前目录下各个文件, 文件夹占了多少空间, 不会递归
du -sh *
进程管理
查看进程
# 终端yyt 图形界面终端:tty7 文字终端:tty1~6 # 1.查看系统所有进程:ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 43708 4052 ? Ss Oct06 0:16 /usr/lib/systemd/systemd root 2 0.0 0.0 0 0 ? S Oct06 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? S< Oct06 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S Oct06 0:02 [ksoftirqd/0] root 7 0.0 0.0 0 0 ? S Oct06 0:03 [migration/0] USER:用户账户 PID:进程ID PPID:父进程 %CPU:该进程使用掉的CPU资源百分比 %MEM:该进程所占用的物理内存百分比(内存使用率) VSZ:该进程使用的虚拟内存(KB) RSS:该进程占用的固定内存(KB) TTY:登陆者的终端 STAT:进程状态 START:该进程被触发启动的时间 TIME:使用CPU时间 COMMAND:该进程实际命令 # 2.查看自己bash进程:ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 26699 26697 0 80 0 - 28887 do_wai pts/1 00:00:00 bash 0 R 0 28641 26699 0 80 0 - 38338 - pts/1 00:00:00 ps F:进程标识 process flags 4:权限为root 1:权限仅复制fork没有实际执行exec S:进程状态 process stat R:running S:sleep D;不可被唤醒的睡眠状态 T:stop Z:僵尸状态,进程已终止却不能删除 # 僵尸进程:该进程已执行完毕,应该要终止,但该进程的父进程无法完整结束掉该进程,造成进程一直停留在内存中(<defunct>) UID/PID/PPID:用户ID 进程ID 父进程PID C:CPU使用率 PRI/NI:Priority/Nice,此进程被CPU执行的优先级,越小优先级越高 ADDR/SZ/WCHAN:ADDR-kernel function,指明该进程在内存的哪部分 SZ:此进程用掉多少内存 WCHAN:目前进程是否执行 TTY:登陆者的终端 TIME:使用CPU时间 CMD:command,造成此命令的触发命令 # 3.树状显示:pstree -A systemd-+-AliYunDun---22*[{AliYunDun}] |-AliYunDunUpdate---3*[{AliYunDunUpdate} |-aliyun-service---2*[{aliyun-service}] |-containerd-+-containerd-shim-+-rabbitmq-server-+-beam.smp-+-erl_child_setup---+ | | | | `-82*[{beam.smp}] | | | `-epmd | | `-9*[{containerd-shim}] | |-containerd-shim-+-redis-server---3*[{redis-server}] | | `-9*[{containerd-shim}] | |-containerd-shim-+-mysqld---26*[{mysqld}] | | `-10*[{containerd-shim}] | `-13*[{containerd}] |-crond # 4.查找指定程序的PID ps aux | grep bash # 5.根据CPU使用率降序排列 ps -aux --sort pcpu | less # 根据内存使用率降序排序 ps -aux --sort pmem | less # 将CPU和内存参数合并到一起,并通过管道显示前10个结果 ps -aux --sort -pcpu,+pmem | head # 动态查看进程:top (q退出)
kill 进程
kill -SIGKILL pid kill -9 pid
动态查看进程
# Windows的任务管理器 top # Ctrl+C退出
管理前后台进默认情况下,用户创建的进程都是前台进程,前台进程从键盘读取数据,并把处理结果输出到显示器
# 后台运行,并且有nohup.out输出
nohup xxx &
# 后台运行, 不输出任何日志
nohup xxx > /dev/null &
# 后台运行, 并将错误信息做标准输出到日志中
nohup xxx >out.log 2>&1 &
# 回复 Ctrl + Z 转入后台的程序
bg
# 后台命令转到前台
fg
网络相关
网络统计
# 统计网络
netstat -i
# 所有开启的连接
netstat -uta
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令
IP 地址配置
ifconfig 以太网:Link encap:Ethernet 硬件地址:HWaddr 00:0c:29:2b:78:47 IP地址:inet addr:192.168.1.128 广播:Bcast:192.168.1.255 掩码:Mask:255.255.255.0 本地回环:lo Link encap:Local Loopback
ifconfig eth0 192.168.12.22 #修改ip地址 永久生效:修改 /etc/sysconfig/network-scripts/ifcfg-eth0文件 DEVICE=eth0 #网卡名称 BOOTPROTO=static #获取ip的方式(static/dhcp/bootp/none) HWADDR=00:0C:29:B5:B2:69 #MAC地址 IPADDR=12.168.177.129 #IP地址 NETMASK=255.255.255.0 #子网掩码 NETWORK=192.168.177.0 #网络地址 BROADCAST=192.168.0.255 #广播地址 NBOOT=yes #系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备 nslookup www.baidu.com
域名映射
/etc/hosts 文件:用于在通过主机名进行访问时做 ip 地址解析之用, 相当于 windows 系统的 C:\Windows\System32\drivers\etc\hosts 文件的功能
端口管理
# 端口管理:记得重启防火墙
firewall-cmd --permanent --list-ports # 查看开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent # 开放范围端口
firewall-cmd --reload # 启动设置
firewall-cmd --permanent --remove-port=8080-8085/tcp # 关闭端口
firewall-cmd --zone=public --list-ports # 查看防火墙所有开放的端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent # 开放5672端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent # 关闭5672端口
firewall-cmd --reload # 配置立即生效
# 查看监听的端口,yum install -y net-tools
netstat -lnpt
# 检查端口被哪个进程占用
netstat -lnpt | grep port
# 查看进程的详细信息
ps pid
网络服务管理
service network status # 查看指定服务的状态 service network stop # 停止指定服务 service network start # 启动指定服务 service network restart # 重启指定服务 service --status–all # 查看系统中所有后台服务 netstat –nltp # 查看系统中网络进程的端口监听情况
防火墙
# 查看防火墙
systemctl status firewalld.service
firewall-cmd --state
# 关闭防火墙
systemctl stop firewalld.service
# 关闭开机防火墙自启
systemctl disable firewalld.service
# 开启防火墙
systemctl start firewalld.service
# 开机防火墙自启
systemctl enable firewalld.service
# 查看防火墙设置开机自启是否成功
systemctl is-enabled firewalld.service;echo $?
# 重启防火墙
systemctl restart firewalld.service
磁盘相关
# 查看系统资源的使用情况
top
# 查看内存使用情况
free -m
# 查看磁盘读写情况
iostat
# 查看磁盘空间使用情况
df -h
# 查看文件大小情况
du -sh
定时和延时执行
&&:&&号前的命令执行成功才会执行后面的命令
||:||号前的命令执行失败,才会执行后面的命令
分号:不论分号前的命令执行成功与否,都执行分号后的命令
# 定时
at
# 列出at任务
atq
# 删除 at 任务
atrm
# 定时执行程序
crontab
crontab:用于修改crontab文件(路径最好用绝对路径)
cron:用于实际执行定时的程序cron
格式:m h dom mon dow command
m:分钟 h:小时 dom:天 mon:月 dow:星期 command:定时执行的命令
crontab –e : 修改 crontab 文件. 如果文件不存在会自动创建
crontab –l : 显示 crontab 文件
crontab -r : 删除 crontab 文件
Linux 面试
Linux 操作系统启动过程
OS --> /boot --> init 进程 --> 运行级别 --> /etc/init.d --> 用户登录 --> Login Shell
-
通电加载 BIOS 信息,硬件自检
当计算机打开电源后,首先是 BIOS 开机自检,按照 BIOS 中设置的启动设备(通常是硬盘)来启动。操作系统接管硬件以后,首先读入 /boot 目录下的内核文件,读取 BIOS 内相关硬件信息及进行硬件系统的自检,随后根据 BIOS 配置找到第一个有引导程序的的设备
-
启动引导设备内 MBR 的 Boot Loader
硬盘上第 0 磁道第一个扇区被称为 MBR,即主引导记录,大小是 512 字节,存放了预启动信息、分区表信息,系统找到 BIOS 所指定的硬盘的 MBR 后,就会将其复制到物理内存中,被复制到物理内存的内容就是 Boot Loader。Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备
-
加载 Kernel 到内存空间
虚拟文件系统(Initial RAM Disk),即/boot/initramfs-release.img,能够通过 boot loader 来加载到内存中, 然后这个文件会被解压缩并且在内存当中模拟成一个根目录,且此模拟在内存当中的文件系统能够提供一支可运行的程序,透过该程序来加载启动过程中所最需要的核心模块
-
运行/sbin/init 程序,设定 Linux 的启动级别和加载自启动设备
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。init 程序首先是需要读取配置文件 /etc/inittab。init 进程的一大任务,就是去运行这些开机启动的程序—"守护进程"(daemon,许多程序需要开机启动),启动时根据"运行级别",确定要运行哪些程序
-
执行/etc/rc.d/rc.sysinit 初始化系统
在 init 的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而 rc.sysinit 是一个 bash shell 的脚本,它主要是完成一些系统初始化的工作,包括设置主机名、设置欢迎信息、激活 Udex 和 seliux、挂载/etc/fstab 文件中定义的所有文件系统、检测根文件系统、设置系统时钟、根据/etc/sysctl.conf 文件来设置内核参数、激活 LVM 及软 RAID 设备、激活 swap 设备、加载额外设备的驱动程序、执行清理操作。rc.sysinit 是每一个运行级别都要首先运行的重要脚本,主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。真正的 rc 启动脚本实际上都是放在/etc/rc.d/init.d/目录下
-
启动内核模块
依据/etc/sysconfig/modules 文件目录下的文件来装载内核模块
-
执行/etc/rc.d/rc.local
在一切初始化工作后,Linux 留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里
-
执行/bin/login,建立终端
rc 执行完毕后,返回 init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。init 接下来会打开 6 个终端(tty1~6),以便用户登录系统
-
用户登录系统
Linux 的账号验证程序是 login,login 会接收 mingetty 传来的用户名作为用户名参数。然后 login 会对用户名进行分析:如果用户名不是 root,且存在 /etc/nologin 文件,login 将输出 nologin 文件的内容,然后退出。通常用来系统维护时防止非 root 用户登录。只有/etc/securetty 中登记了的终端才允许 root 用户登录,如果不存在这个文件,则 root 用户可以在任何终端上登录。
常用的 Linux 命令
查看硬件信息:ifconfig free fdisk ethtool mii-tool dmidecode dmesg lspci
系统性能监视:uptime top free vmstat mpstat iostat sar chkconfig
内存:top free vmstat mpstat iostat sar
CPU:top vmstat mpstat iostat sar
I/O:vmstat mpstat iostat sar
进程:ipcs ipcrm lsof strace lstrace
负载:uptime mount umount df du fsck dd dumpe2fs dump
系统安全:chmod chown chgrp chage passwd su sudo umask chattr
文件权限,0644 表示什么意思?
Linux采用三位十进制数表示权限
A- 0,表示十进制;B-用户;C-组用户;D-其他用户
查看文件权限:ls -l
--- -> 0 (no excute , no write ,no read)
--x -> 1 excute, (no write, no read)
-w- -> 2 write
-wx -> 3 write, excute
r-- -> 4 read
r-x -> 5 read, excute
rw- -> 6 read, write ,
rwx -> 7 read, write , excute
0755:用户具有读/写/执行权限,组用户和其它用户具有读写权限——目录
0644:用户具有读写权限,组用户和其它用户具有只读权限——文件
查找指定名称的进程
pgrep java | xargs ps -u --pid
pgrep [str] 命令进行模糊匹配,找到匹配该特征串的进程 ID
根据进程 ID 显示指定的进程信息,ps --pid [pid]
查找出来的进程 ID 需要被作为参数传递给 ps 命令,故使用 xargs 命令,通过管道符号连接
显示进程详细信息,需要加上-u 参数
找到占用内存最多的前 5 个进程
ps -aux | sort -k4nr | head -5
查看一个进程的端口
查找指定目标进程 nacos 的 pid
ps -aux | grep nacos
在全部端口中查找进程号 pid 的信息
netstat -naop | grep pid
Linux 查看线程数
pstree 命令行工具
yum -y install psmisc
查询 zookeeper 进程打开的线程数
# 先执行 jps 查看zookeeper:10196 QuorumPeerMain
pstree -p `jps | grep QuorumPeerMain | awk '{print $1}'` | wc -l
pstree -p 10196 | wc -l
Linux 如何查看某个进程的线程
top -H -p PID
CPU 过高如何处理
- 使用 top 命令查看 CPU 使用情况
- 通过 top -Hp 进程号命令找到 CPU 消耗最多的线程号(列名仍然为 PID)
- 通过 printf "%x\n" 线程号命令输出该线程号对应的 16 进制数字
- PID 进程在内核调用情况。如果是 Java 应用可通过 jstack 进程号 | grep 16 进制线程号 -A 10 命令找到 CPU 消耗最多的线程方法堆栈;非 Java 应用可使用 perf top -p 7574 (安装:yum install perf)
Linux 故障排查思路
进程排查:
查看当前系统状态:top 占CPU较大的重点排查
查看当前系统进程信:ps
ps -aef | grep inetd # 查看有没有奇怪进程
ps -u root # 查看用户root运行的进程
ps -u root -u root -n # 查看非root运行的进程
网络排查:
网络系统的状态信息:netstat -lntp
查看谁在使用某个端口:lsof -i :22 # 看看22端口使用情况
查看所有tcp网络连接信息:lsof -i tcp
查看所有udp网络连接信息:lsof -i udp
文件排查:
查看文件路径:whereis filename
查看文件创建时间:ls -al filname
查找最近24小时内修改过的文件:find ./ -mtime 0
查找以.txt结尾的文件名:find / -iname "*.txt"
查找不是以.txt结尾的文件:find / ! -name "*.txt"
Linux 如何查看内存、CPU 等的使用情况
top:查看各个进程的cpu使用情况,默认按cpu使用率排序
top -Hp PID:查看该进程下各个线程的cpu使用情况
jstack pid:查看当前java进程的堆栈状态
jps(Java Virtual Machine Process Status Tool):java提供的一个显示当前所有java进程pid的命令
Linux 运行级别
- 0:关机模式
- 1:单用户模式 <==破解 root 密码
- 2:无网络支持的多用户模式
- 3:有网络支持的多用户模式(文本模式,工作中最常用的模式)
- 4:保留,未使用
- 5:有网络支持的 X-windows 支持多用户模式(桌面)
- 6:重新引导系统,即重启
Linux 运维
# 删除0字节文件
find -type f -size 0 -exec rm -rf {} \
# 查看进程按内存从大到小排列
ps -e -o "%C : %p : %z : %a"|sort -k5 -nr
# 查看进程按 CPU 利用率从大到小排列
ps -e -o "%C : %p : %z : %a"|sort -nr
# 查看 http 的并发请求数及其 TCP 连接状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# 取 IP 地址
# 内存的大小
free -m |grep "Mem" | awk '{print $2}'
# 查看 Apache 的并发请求数及其 TCP 连接状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# 磁盘空间
df -h
# 磁盘 I/O 负载,检查I/O使用率(%util)是否超过 100%
iostat -x 1 2
# 网络负载
netstat -i
# 进程总数
ps aux | wc -l
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于