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
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于