Linux操作命令,初始学习记录Linux常用命令

多通过 man 查看,SEE ALSO 是最好的

安装

源代码形式

  1. 绝大多数开源软件都是直接以原码形式发布的
  2. 源代码一般会被打成.tar.gz的归档压缩文件
  3. 源代码需要编译成为二进制形式之后才能够运行使用
  4. 源代码基本编译流程:
    1. .configure 检查编译环境;
    2. make对源代码进行编译;
    3. make insall 将生成的可执行文件安装到当前计算机中

rpm

RPM 是 LINUX 下的一种软件的可执行程序,你只要安装它就可以了。这种软件安装包通常是一个RPM包(Redhat Linux Packet Manager,就是Redhat的包管理器),后缀是.rpm。

RPM是Red Hat公司随Redhat Linux推出了一个软件包管理器,通过它能够更加轻松容易地实现软件的安装。

  1. 安装软件:执行 rpm -ivh rpm包名,如:rpm -ivh apache-1.3.6.i386.rpm
  2. 升级软件:执行 rpm -Uvh rpm包名
  3. 反安装:执行 rpm -e rpm包名
  4. 查询软件包的详细信息:执行 rpm -qpi rpm包名
  5. 查询某个文件是属于那个rpm包的:执行 rpm -qf rpm包名
  6. 查该软件包会向系统里面写入哪些文件:执行 rpm -qpl rpm包名 rpm -ql jenkins

RPM特点

  1. 源代码形式的特点:操作复杂、编译时间长、极易出现问题、依赖关系复杂
  2. 为了方便,RPM(redhat package manager)
  3. RPM通过将代码基于特定平台系统编译为可执行文件,并保存依赖关系,来简化开源软件的安装管理。针对不同的系统设定不同的包
  4. 常用命令规范:linuxcast-1.2.0-30.el6.1686.rpm 包名-版本号-适用平台-32/64-rpm
  5. 使用
  • rpm –i software.rpm(安装);
  • rpm -e software.rpm(卸载);
  • rpm –U software.rpm(升级形式安装);
  • rpm –ivh http://www.linuxcast.net/software.rpm(支持通过http\ftp协议形式安装)
  • -v 显示详细信息;
  • -h 显示进度条

查询功能:rpm –qa 列出全部已经安装的.rpm软件 rpm –qa |grep *** rpm -qa | grep docker

yum

  1. rpm软件包形式的管理虽然方便,但是需要手工解决软件包的依赖关系。很多时候安装一个软件安装一个软件需要安装1个或者多个其他软件,手动解决时,很复杂,yum解决这些问题。Yum是rpm的前端程序,主要目的是设计用来自动解决rpm的依赖关系,其特点:

    1. 自动解决依赖关系

    2. 可以对rpm进行分组,基于组进行安装操作

    3. 引入仓库概念,支持多个仓库

    4. 配置简单

  2. yum仓库用来存放所有的现有的.rpm包,当使用yum安装一个rpm包时,需要依赖关系,会自动在仓库中查找依赖软件并安装。仓库可以是本地的,也可以是HTTP、FTP、nfs形式使用的集中地、统一的网络仓库。

  3. 仓库的配置文件/etc/yum.repos.d目录下

  4. 使用:

    1. yum install 安装;

    2. yum remove 卸载;

    3. yum update 升级制定软件

  5. 安装的时候,会下载软件包.Rpm在安装,所以用国内仓库改变镜像源

    1. 访问地址http://mirrors.163.com/

    2. 点centos使用帮助

    3. 按步骤来

  6. 查询软件:可以使用 yum search **

yum list installed | grep docker

yum makecache fast 在更新yum源或者出现配置yum源之后,通常都会使用yum makecache 生成缓存 将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度

yum clean all yum 会把下载的软件包和header存储在cache中而不自动删除。如果觉得占用磁盘空间,可以使用yum clean指令清除缓存

安装man中文手册
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// 1. 查找man中文安装包
# yum list |grep man.*zh
man-pages-zh-CN.noarch                   1.5.2-4.el7                   @base

// 2. 执行安装命令
# sudo yum install man-pages-zh-CN.noarch

// 3. 编辑配置文件使中文包生效 追加一行alias
# vi .bashrc
alias cman='man -M /usr/share/man/zh_CN'

// 4. 使上一步alias生效
# source .bashrc

wget

tar

ps

  • 统计php-fpm平均内存占用 rss 进程使用的总物理内存数, Kbytes字节 cmd(args) 执行命令的简单格式 ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }

netstat

  • 查看nginx监听了哪些端口 netstat -anp | grep nginx

  • 查看php-fpm进程数是否够用

当前fastcgi进程个数 netstat -napo |grep "php-fpm" | wc -l

查看服务器上一共开了多少的 php-cgi 进程 ps -ef |grep "php-fpm"|grep "pool"|wc -l

  • 查看已经有多少个php-cgi进程用来处理tcp请求 netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l

文本处理

grep

sed

awk

基本用法
1
2
3
4
5
# awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号`
$ awk '{print $1,$4}' access.log # 默认空格分隔为字段, $1 对应第一个字段

# awk -F  #-F相当于内置变量FS, 指定分割字符
$ awk -F, '{print $1,$2}'   access.log
运算符
  • = += -= *= /= %= ^= **= 赋值
  • || 逻辑或
  • && 逻辑与
  • ~ 和 !~ 匹配正则表达式和不匹配正则表达式
  • < <= > >= != == 关系运算符
内建变量
  • $n 当前记录的第n个字段,字段间由FS分隔
  • $0 完整的输入记录
  • FNR 各文件分别计数的行号
  • FS 字段分隔符(默认是任何空格)
  • NF 一条记录的字段的数目
  • NR 已经读出的记录数,就是行号,从1开始

更多使用 man awk

  • 查看哪些进程使用了 swap for file in /proc/*/status ; do awk '/VmSwap|Name|^Pid/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 3 -n -r | head

性能检测

strace

开启多个客户端窗口,分析redis
窗口1
1
2
3
4
5
6
7
$ strace -ff -o ~/xxx/out ~/redis-5.0.4/bin/redis-server # 前台启动 记下 pid:22636

# 窗口3 执行BGSAVE后 可以看到 copy-on-write
22636:M 05 May 2020 22:56:33.535 * Background saving started by pid 22747
22747:C 05 May 2020 22:56:33.540 * DB saved on disk
22747:C 05 May 2020 22:56:33.541 * RDB: 4 MB of memory used by copy-on-write
22636:M 05 May 2020 22:56:33.591 * Background saving terminated with success
窗口2
1
2
3
4
5
6
7
8
9
$ cd ~/xxx/ # 有4个文件 名称 out.线程编号
out.22636  out.22637  out.22638  out.22639

$ vim out.22636 # 可以看到有 socket 调用(listen、bind等) epoll 调用(epoll_create、epoll_ctl、epoll_wait)

# 窗口3 执行BGSAVE后 可以看到多出 out.22747 文件
$ vim out.22747 # 可以看到 clone 调用

$ tail -f out.22636 # 发现 epoll_wait 一直有
窗口3
1
2
$ ~/redis-5.0.4/bin/redis-cli
> BGSAVE

uptime

该命令可以大致的看出计算机的整体负载情况,load average后的数字分别表示计算机在1min、5min、15min内的平均负载。

1
2
$ uptime
01:57:26 up 10 days,  3:43,  1 user,  load average: 0.00, 0.01, 0.05

dmesg

打印内核环形缓存区中的内容,可以用来查看一些错误

1
2
$ dmesg  | tail

vmstat

查看系统的整体性能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$ vmstat 1

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 451556 132632 939880    0    0     1     2   29    5  0  0 100  0  0
 0  0      0 451540 132632 939880    0    0     0     0   38   59  0  0 100  0  0
 0  0      0 451540 132632 939880    0    0     0     0   34   51  0  0 100  0  0
 0  0      0 451540 132632 939880    0    0     0    12   42   65  0  0 100  0  0
 0  0      0 451540 132632 939880    0    0     0     0   37   55  0  0 100  0  0
 0  0      0 451540 132632 939880    0    0     0     0   32   52  0  0 100  0  0
 0  0      0 451540 132632 939880    0    0     0     0   32   51  0  0 100  0  0
 0  0      0 451540 132632 939880    0    0     0     0   32   51  0  0 100  0  0
 0  0      0 451540 132632 939880    0    0     0     0   39   55  0  0 100  0  0
 0  0      0 451540 132632 939880    0    0     0     0   46   62  0  1 99  0  0

mpstat

用于查看cpu的性能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ mpstat -P ALL 1

02时39分40秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02时39分41秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
02时39分41秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

02时39分41秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02时39分42秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
02时39分42秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

02时39分42秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02时39分43秒  all    0.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
02时39分43秒    0    0.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00

该命令用于每秒打印一次每个CPU的统计信息,可用于查看CPU的调度是否均匀。

pidstat

1
2
# 间隔1s 打印5组数据
$ pidstat 1 5

该命令用于打印各个进程对CPU的占用情况,类似top命令中显示的内容。pidstat的优势在于,可以滚动的打印进程运行情况。

iostat

用于查看io的状态

1
2
3
4
5
6
7
8
$ iostat 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    4.95    0.00   95.05

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.99    0.00     7.92     0.00    16.00     0.04   45.00   45.00    0.00  45.00   4.46


  • r/s, w/s, rkB/s, wkB/s,表示每秒向I/O设备发出的reads、writes、read Kbytes、write Kbytes的数量。
  • await,表示应用程序排队等待和被服务的平均I/O时间,该值若大于预期的时间,这表示I/O设备处于饱和状态或者异常。
  • avgqu-sz,表示请求被发送给I/O设备的平均时间,若该值大于1,则表示I/O设备可能已经饱和;
  • %util,每秒设备的利用率;若该利用率超过60%,则表示设备出现性能异常;

free

用于产看内存的状态

1
2
3
4
5
$ free -m
              total        used        free      shared  buff/cache   available
Mem:           1839         361         400          16        1077        1265
Swap:          1999           0        1999

  • buffers: For the buffer cache, used for block device I/O.
  • cached: For the page cache, used by file systems.
  • 若buffers和cached接近0,说明I/O的使用率过高,系统存在性能问题。
  • Linux中会用free内存作为cache,若应用程序需要分配内存,系统能够快速的将cache占用的内存回收,因此free的内存包含cache占用的部分。

sar

系统活动状态报告简称

用于查看网络的状态

-n DEV 1, 每秒统计一次网络的使用情况; -n EDEV 1,每秒统计一次错误的网络信息;

sar -n DEV 1

  • IFACE ,网络接口名称;
  • rxpck/s ,每秒接收到包数;
  • txpck/s ,每秒传输的报数;(transmit packages)
  • rxkB/s ,每秒接收的千字节数;
  • txkB/s ,每秒发送的千字节数;
  • rxcmp/s ,每秒接收的压缩包的数量;
  • txcmp/s ,每秒发送的压缩包的数量;
  • rxmcst/s,每秒接收的组数据包数量;

sar -n TCP,ETCP 1

可以用于粗略的判断网络的吞吐量,如发起的网络连接数量和接收的网络连接数量;

  • TCP, 报告关于TCPv4网络流量的统计信息;

  • ETCP, 报告有关TCPv4网络错误的统计信息;

  • active/s: Number of locally-initiated TCP connections per second (e.g., via connect()),发起的网络连接数量;

  • passive/s: Number of remotely-initiated TCP connections per second (e.g., via accept()),接收的网络连接数量;

  • retrans/s: Number of TCP retransmits per second,重传的数量;

top

包含更多的指标统计,相当于一个综合命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
top - 01:08:21 up 28 days,  2:54,  1 user,  load average: 0.04, 0.03, 0.05
Tasks:  79 total,   1 running,  78 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1883496 total,    93264 free,   386640 used,  1403592 buff/cache
KiB Swap:  2047996 total,  2047996 free,        0 used.  1263592 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                          
    1 root      20   0   43260   3692   2496 S  0.0  0.2   1:08.82 systemd                                                          
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.05 kthreadd                                                         
    3 root      20   0       0      0      0 S  0.0  0.0   0:01.46 ksoftirqd/0                                                      
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                                     
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0    

top命令的顶部显示与uptime命令相似的输出,当前时间,系统已运行时间,当前已登录用户的数量,相应最近5、10、15分钟内的平均负载。

任务 Tasks: 系统闲杂共有进程,运行running,休眠sleeping,stoped状态0个,zombie状态(僵尸)的有0个。

CPU状态:

  • us,user:运行(未调整优先级的)用户进程的CPU时间
  • sy,system:运行内核进程的CPU时间
  • ni,运行已调整优先级的用户进程的CPU时间
  • wa:用户等待IO完成的CPU时间
  • hi:处理硬件中断的CPU时间
  • si:处理软件中断的CPU时间
  • st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。

内存使用:Mem 物理内存 和 Swap 虚拟内存使用(交换空间)

各进程(任务)的状态监控:

  • PID:进程id,进程唯一标识符
  • USER:进程所有者的实际用户名
  • PR:进程调度优先级,有些值是RT,就是这些进程运行在实时态
  • NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负责表示高优先级,正值表示低优先级。
  • VIRT:进程使用的虚拟内存。
  • RES:驻留内存大小。是任务使用的非交换物理内存大小。进程使用的,未被换出的物流内存大小。
  • SHR:SHR是进程使用的共享内存。
  • S:进程状态。
    • D 不可中断的睡眠态
    • R 运行态
    • S 睡眠态
    • T 被跟踪或已停止
    • D 僵尸态
  • %CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
  • %MEM:进程使用的可用物理内存百分比。
  • TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
  • COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

多核监控按键盘数字 1,可监控每个CPU,其他可 man top

压力测试工具

stress
  • CPU密集型进程 $ stress --cpu 1 --timeout 600
  • I/O密集型进程 $ stress -i 1 --timeout 600
  • 大量进程的场景 $ stress -c 8 --timeout 600
stress-ng
  • I/O密集型进程 比如 $ stress-ng -i 1 --hdd 1 --timeout 600(–hdd表示读写临时文件)

  • chattr 配置文件隐藏属性

    • +i 可以让一个档案无法被更改
    • +a 不能修改和删除旧有的数据,只能追加
  • lsattr 查阅隐藏的属性

档案的特殊权限

  • SUID,SGID,SBIT 特殊权限 s 和 t
  • 4为SUID
  • 2为SGID
  • 1为SBIT

SUID 的限制与功能

  • 权限仅对二进制程序有效;
  • 执行者对于该程序需要具有x的可执行权限;
  • 本权限仅在执行该程序的过程中有效(runtime);
  • 执行者将具有该程序拥有者(owner)的权限。

SGID 对档案的功能

  • SGID对二进制程序有用;
  • 程序执行者对于该程序来说,需具备x的权限;
  • 执行者在执行过程中将会获得该程序组的支持。

SGID 对目录的功能

  • 用于若对于此目录具有r与x的权限时,该用户能够进入此目录;
  • 用户在此目录下的有效群组将会变成该目录的群组;
  • 用途:若用户在此目录下具有w的权限(可以新建档案),则使用者所建立的新档案,该新档案的群组与此目录的群组相同。

SBIT 对目录的作用

  • 当用户对此目录具有w,x权限,亦即具有写入的权限时;
  • 用户在该目录下建立档案或目录时,仅有自己与root才有权力删除该档案。

权限与指令

  • 进入某目录成为 可工作目录 的基本权限
    • 可使用指令 cd
    • 目录权限 x
    • 查阅文件名,对目录还要有 r
  • 目录内读取一个档案
    • 可使用指令 catmoreless
    • 目录权限 x
    • 档案权限 r
  • 修改一个档案的基本权限
    • 可使用指令 nanovi
    • 目录权限 x
    • 档案权限 r w
  • 建立一个档案的基本权限
    • 目录权限 w x
  • 进入某目录并执行该目录下的指令的基本权限
    • 目录权限 x
    • 档案权限 x