Linux 必知必会

本贴最后更新于 972 天前,其中的信息可能已经时移世异

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 软件名称

yum 源的配置

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)

RPM 包安装软件 -- 详细解读

用户、文件权限

用户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

image.png

网络相关

网络统计

# 统计网络
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 文件

image.png

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 过高如何处理

  1. 使用 top 命令查看 CPU 使用情况
  2. 通过 top -Hp 进程号命令找到 CPU 消耗最多的线程号(列名仍然为 PID)
  3. 通过 printf "%x\n" 线程号命令输出该线程号对应的 16 进制数字
  4. 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
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    930 引用 • 937 回帖
  • command
    2 引用
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖 • 1 关注
3 操作
Hefery 在 2022-02-15 15:57:38 更新了该帖
Hefery 在 2022-01-22 09:16:55 更新了该帖
Hefery 在 2022-01-19 01:41:40 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...