Linux基础命令

linux作为个人工作经常使用的系统、做下简单的记录方便以后工作参考。

ps

ps命令用于报告系统某个时间内进程的情况

  • 参数
1
2
3
4
5
-A : 所有的进程均显示出来
-a : 不与terminal有关的所有进程
-u : 有效用户的相关进程
-x : 一般与a参数一起使用,可以列出比较完整的信息。
-l : 较详细地将PID的信息列出。

案例

查询某程序的情况

1
2
3
$ [root@VM_115_109_centos ~]# ps -ef | grep mysqld
root 8013 17307 0 05:34 pts/0 00:00:00 grep --color=auto mysqld
mysql 28882 1 0 Apr02 ? 00:07:03 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

UID PID PPID C STIME TTY TIME CMD (类目描述)

  • UID 程序被该 UID 所拥有
  • PID 就是这个程序的 ID
  • PPID 则是其上级父程序的ID
  • C CPU 使用的资源百分比
  • STIME 系统启动时间
  • TTY 登入者的终端机位置
  • TIME 使用掉的 CPU 时间。
  • CMD 所下达的指令

查看内存占用前1的进程

  • ps auxw | head -1;ps auxw|sort -rn -k4|head -1
1
2
3
$  ps auxw | head -1;ps auxw|sort -rn -k4|head -1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 28882 0.0 10.9 1143416 205484 ? Sl Apr02 7:20 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
  • 内存的单位是kb,VSZ是虚拟内存的占用,RSS是真实的内存的占用。
  • 命令分解:
  • ps auxw显示系统资源占用情况;
  • head -1表示显示第一列,即标题列;
  • sort -r 表示反向排序,-n表示按数字排序,-k4表示列的第4个字符。

查看CPU占用前1的进程

  • ps auxw|head -1;ps auxw|sort -rn -k3|head -1
1
2
3
4
5
6
7
$ ps auxw|head -1;ps auxw|sort -rn -k3|head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1690 0.1 0.6 536692 12436 ? Sl Apr10 29:58 barad_agent
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 9 0.0 0.0 0 0 ? R Mar08 1:45 [rcu_sched]
root 884 0.0 0.0 110044 808 ttyS0 Ss+ Mar08 0:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt220
root 883 0.0 0.0 110044 788 tty1 Ss+ Mar08 0:00 /sbin/agetty --noclear tty1 linux

free

在系统维护的过程中,随时可能有需要查看 CPU和内存的使用率,并根据相应信息分析系统状况的需求。

  • 参数
1
2
3
4
5
6
7
-b:以Byte为单位显示内存使用情况;
-k:以KB为单位显示内存使用情况;
-m:以MB为单位显示内存使用情况;
-o:不显示缓冲区调节列;
-s<间隔秒数>:持续观察内存使用状况;
-t:显示内存总和列;
-V:显示版本信息。

案例

1
2
3
4
$ free
total used free shared buff/cache available
Mem: 16200512 5593928 4748604 9048 5857980 10196852
Swap: 8191996 0 8191996
  • free命令默认是以kb为单位显示的,可以用free -m 用Mb单位来显示。
  • Mem行 : total = used + free 其中buffers和cached虽然计算在used内, 但其实为可用内存。
  • Mem下一行:used为真实已占内存,free为真实可用内存。
  • Swap:内存交换区的使用情况。

top

显示系统整体负载

  • 参数
1
2
3
4
5
6
7
8
9
10
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。

案例

  • 第一行: 系统时间 + 系统运行时间 + 几个用户 + 1/5/15分钟系统平均负载
  • 第二行:进程总数(total) + 正在运行进程数(running) + 睡眠进程数(sleeping) + 停止的进程数(stopped)+ 僵尸进程数(zombie)
  • 第三行:用户空间CPU占比(us) + 内核空间CPU占比(sy)+ CPU空置率(id)
  • 注解
    • PID :进程ID
    • USER :用户名
    • PR :优先级
    • NI :负值表示高优先级,正值表示低优先级。
    • VIRT :虚拟内存
    • RES : 真实内存
    • SHR :共享内存
    • S :进程状态 D=不可中断的睡眠状态; R=运行; S=睡眠 ;T=跟踪/停止; Z=僵尸进程
    • 参数:
      • top -d 2 :每隔2秒显式所有进程的资源占用情况
      • top -c :每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
      • top -p 12345 -p 6789:每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
      • top -d 2 -c -p 123456 :每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数

env

查看环境变量;这个用的相对较少了。所以也不用太在意。

last

查看用户登录日志

  • 参数
1
2
3
4
5
6
-a : 把从何处登录系统的主机名或Ip地址,显示在最后一行。
-d : 将Ip地址转换成主机名称。
-f : 指定记录文件
-n : 设置列出名单的显示列数。
-R : 不显示登录系统主机名称或Ip地址。
-x : 显示系统关机,重新开机,以及执行等级的改变信息。

rpm

一般用rpm -qa | grep xxx 查看所有程序的软件包,如果不做筛选的话会吧所有已经安装的程序列出来。

  • 参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-a:查询所有套件;
-b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;
-c:只列出组态配置文件,本参数需配合"-l"参数使用;
-d:只列出文本文件,本参数需配合"-l"参数使用;
-e<套件档>或--erase<套件档>:删除指定的套件;
-f<文件>+:查询拥有指定文件的套件;
-h或--hash:套件安装时列出标记;
-i:显示套件的相关信息;
-i<套件档>或--install<套件档>:安装指定的套件档;
-l:显示套件的文件列表;
-p<套件档>+:查询指定的RPM套件档;
-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
-R:显示套件的关联性信息;
-s:显示文件状态,本参数需配合"-l"参数使用;
-U<套件档>或--upgrade<套件档>:升级指定的套件档;
-v:显示指令执行过程;
-vv:详细显示指令执行过程,便于排错。

mv

该命名用于移动文件、目录或更名,move之意,它的常用参数如下:

  • 参数
1
2
3
-f  : force强制的意思,如果目标文件已经存在,不会询问而直接覆盖。
-i : 若目标文件存在,则询问是否覆盖。
-u : 若目标文件已经存在,且比目标新文件新,才会更新。

案例

1
2
3
$ echo "hello world" >> newfile.txt #创建一个有内容的文本。
$ midir 001 #创建一个文件夹
$ ehco "are you ok" >> 001/newfile.txt #创建一个有内容的文本并放置在001文件夹中。
  • mv -i
1
2
3
$ mv -i  newfile.txt 001/newfile.txt
# mv : overwite '001/newfile.txt'?
# 填 yes 或者 y都可以。
  • mv -u
1
2
3
$ mv -u newfile.txt 001/newfile.txt
# mv : overwite '001/newfile.txt'?
# 填 yes 或者 y都可以。

注意如果目标文件创建时间比当前文件新,会移动失败。

  • mv -f
1
$ mv -f newfile.txt 001/newfile.txt

注意了,这里并不会提示什么,会直接覆盖掉目标文件。前提是你有足够的权限。

rm

  • 参数
1
2
3
4
5
6
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。

案例

删除当前目录下的 log.txt文件

1
$ rm log.txt

删除当前目录下所有.txt后缀的文件

1
$ rm *.txt

使用 rm 命令删除时,会提示你是否确定删除,输入 y 即删除,输入 n 则取消

rm: remove regular file `log.txt’? y

删除当前目录下所有以 doubi开头的文件

1
$ rm doubi*

删除当前目录下所有以 doubi开头 以.txt后缀结尾的文件

1
$ rm doubi*.txt

当你用 rm 删除目录的时候会发现提示这不是一个文件

1
2
$ rm bash
rm: cannot remove `bash': Is a directory

可以加上 -r 来归递删除目录及其目录下的内容

1
$  rm -r bash

因为为了避免手误删除错误,所以 rm默认是加上了 -i 的参数,也就是每一次删除文件/目录都会提示,如果觉得烦可以用 -rf 参数

1
$ rm -rf bash

rm -rf 这个命令请慎重使用,而且千万不要使用 rm -rf / 或者 rm -rf /* 之类的命令(系统自杀),可能会让你系统爆炸,所以使用请慎重

更多的命令可以用 rm –help 查看。

du

查看 文件/文件夹 占用磁盘空间的大小

  • 参数
1
2
3
4
5
6
7
-h :以人类易读的方式显示
-a :显示 目录占用的磁盘空间大小,并显示其下目录和文件占用磁盘空间的大小
-s :显示 目录占用的磁盘空间大小,但不显示其下子目录和文件占用的磁盘空间大小
-c :显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
--apparent-size:显示目录或文件自身的大小
-l :统计硬链接占用磁盘空间的大小
-L :统计符号链接所指向的文件占用的磁盘空间大小

案例

显示 /root 文件夹的大小,但不显示其子目录和文件的大小

1
2
$ du -sh
190M .

显示 /root 文件夹的大小,并显示其子目录和文件的大小

1
2
3
4
5
$ du -ah
182M ./jdk-8u161-linux-x64.tar.gz
8.5M ./apache-maven-3.5.3-bin.tar.gz
28K ./mysql57-community-release-el7-11.noarch.rpm
190M .

chmod

修改 文件|文件夹权限,linux里面的东西都是文件形式存放的。所以经常会设计到权限问题。

  • 参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
-c :只输出被改变权限的文件信息
-f :当chmod不能改变文件模式时,不通知文件的用户
-R :可递归遍历子目录,把修改应到目录下所有文件和子目录
-v :无论修改是否成功,输出每个文件的信息

# 操作符号:

+ :添加某个权限。
- :取消某个权限。
= :赋予给定权限并取消其他所有权限(如果有的话)。

# 权限设置字母:

r :可读
w :可写
x :可执行
X :只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性
s :在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位
t :保存程序的文本到交换设备上
u :当前用户的权限
g :当前用户同组的权限
o :其他用户的权限

# 权限设定数字:

# 数字表示的属性含义:
0 :表示没有权限
1 :表示可执行权限
2 :表示可写权限
4 :表示可读权限

# 然后将其相加,所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
# 如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。

案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 比如要运行sh脚本来启动jar程序,可能就需要修改*.sh的权限
chmod +x start.sh

# 赋予 start.sh 文件可读权限
chmod 444 start.sh

# 赋予 start.sh 可读、可写权限
chmod 666 start.sh

# 赋予 start.sh 可读、可写、可执行权限
chmod 777 start.sh

# 赋予 opt/ 文件夹以及其子目录和文件 可读、可写、可执行权限。
chmod -R 777 start.sh

yum

这个命令经常使用是Centos 系统中快速安装和下载的工具,当然并不是Centos专属的命令。

  • 参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 命令:

update - 检索 新的包列表
upgrade - 升级 软件包
search - 搜索 软件包
install - 安装 软件包
list - 列出 软件包或者软件包组
info - 显示软件包或者软件包组的详细信息
erase - 删除 软件包(这两个命令一样)
remove - 删除 软件包(这两个命令一样)
groupinfo - 显示 有关包组的详细信息
groupinstall - 安装 软件包组(就像一种软件合集)
grouplist - 列出 可用的软件包组
groupremove - 删除 软件包组
check - 检查 软件包
check-update - 检查 可更新的软件包
clean - 清除 缓存目录内的软件包
deplist - 列出 一个包的依赖关系
distribution-synchronization - 同步 已安装的软件包到最新的版本
downgrad - 降级 一个软件包
reinstall - 重新安装 软件包(自动删除重装)
repolist - 显示 配置的软件包仓库
resolvedep - 确定 软件包需要的依赖关系

# 选项:
-t :容忍错误
-C :完全从系统缓存运行,不要更新缓存
-R 分钟 :最大命令等待时间
-q :安静的操作
-y :对于所有问题回答是
--nogpgcheck :禁用gpg签名检查

案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 检索 新的包列表
yum update

# 安装 Nginx 软件包
yum install nginx

# 安装 Development Tools 软件包组(这个软件包组中包含了编译所需的软件)
# 注意:当软件包或者软件包组的名字中包含空格的时候,请把 软件包或软件包组 加上双引号!
yum groupinstall "Development Tools"

# 卸载 Nginx 软件包
yum erase nginx / yum remove nginx

# 卸载 Development Tools 软件包组
yum groupremove "Development Tools"

# 升级 所有可更新的软件包
yum upgrade

# 升级 Nginx 可更新的软件包
yum upgrade nginx

# 在安装软件和卸载的时候,为了避免误操作,都会询问是否继续,每次都要输入 y 来确定会很麻烦,可以加上 -y 参数
# 安装 Nginx 软件包 并不显示确定提示
yum install nginx -y

# 卸载 Nginx 软件包 并不显示确定提示
yum erase nginx -y / yum remove nginx -y

# 搜索 Nginx 软件包是否存着
yum search nginx

# 列出 可用的软件包
yum list

# 列出 可用的软件包组
yum grouplist

# 清除 缓存目录中的所有软件包
yum clean

# 清除 缓存目录中的 Nginx 软件包
yum clean nginx

# 重装 Nginx 软件包
yum reinstall nginx

这个命令主要用于查询文件头部内容,就是正查询。

  • 参数
1
2
3
4
5
-c 数字:显示指定文件的前 xx 字节的内容(bytes)
-n 数字:显示指定文件的前 xx 行的内容
-q :不显示包含指定文件名的文件头(当使用 head打开多个文件的时候,会去在每个文件输出结果的顶部添加一个包含文件名的文件头用于区分)

# 更多的命令可以用 head --help 来查看。

案例

1
2
3
4
5
6
7
# 创建一个文件,里面的内容如下
$ touch demo.txt #在编辑内容添加数据
1
2
3
4
5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 查看 demo.txt文件的全部内容
head log.txt

# 查看 demo.txt文件的前 4字节的内容
head -c 4 demo.txt

# 输出示例
1
2

# 查看 demo.txt文件的前 3行的内容
head -n 3 demo.txt

# 输出示例
1
2
3

# 查看 demo.txt文件的从倒数第3行到行首的内容
head -n -3 demo.txt

# 输出示例
1
2

tail

一般用来查看文件尾部内容,比如要持续观察一个log输出的时候。

  • 参数
1
2
3
-c 数字:如果数字为正数(例如 -c +5),显示指定文件从行首第 xx 字节到最后的内容;如果数字为负数(例如 -c -5),显示指定文件从行尾第 xx 字节到最后内容。
-n 数字:如果数字为正数(例如 -c +3),显示指定文件从行首第 xx 行到最后的内容;如果数字为负数(例如 -c -3),显示指定文件从行尾第 xx 行到最后的内容。
-f :即时输出文件变化后增加的内容,也就是监视一个文件的内容变化(常用于监视日志输出),使用 Ctrl+C 终止

案例

1
2
3
4
5
6
7
# 创建一个文件,里面的内容如下
$ touch demo.txt #在编辑内容添加数据
1
2
3
4
5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 查看 demo.txt文件的全部内容
tail demo.txt

# 查看 demo.txt文件从行首 第6字节到最后的内容
tail -c +25 demo.txt

# 输出示例

4
5

# 查看 demo.txt文件从行尾 第2字节到最前面的内容
tail -c -2 demo.txt

# 输出示例
5

# 查看 demo.txt文件的从第2行到最后一行的内容
tail -n +2 log.txt

# 输出示例
doubi2
doubi3
doubi4
doubi5

# 查看 demo.txt文件的后 2行的内容
tail -n -2 demo.txt

# 输出示例
4
5

# 持续查看(监视) log.txt文件的变化内容(新增加的内容),使用 Ctrl+C 终止
tail -f demo.txt

tar gz zip

这几个是用来解压文件的,在源码安装或者是解压的时候需要用到。

案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 解压后缀为 .tar 的压缩包
tar -xf log.tar
————————————————————————————————————————————————————————————————————————————
# 解压后缀为 .tar.xz 的压缩包
tar -xJf log.tar.xz
————————————————————————————————————————————————————————————————————————————
# 解压后缀为 .tar.gz 的压缩包,有两个方法
tar -xzf log.tar.gz
————————————————————————————————————————————————————————————————————————————
# 解压后缀为 .gz 的压缩包,有两个方法,如提示命令不存在,请安装 yum install gzip -y / apt-get install gzip -y
gzip -d log.gz
gunzip log.gz
————————————————————————————————————————————————————————————————————————————
# 解压后缀为 .bz / .bz2 / tar.bz2 的压缩包,有两个方法
bzip2 -d log.bz
bunzip2 log.bz
tar -jxf log.tar.bz

bzip2 -d log.bz2
bunzip2 log.bz2
tar -jxf log.tar.bz2
————————————————————————————————————————————————————————————————————————————
# 解压后缀为 .Z / tar.Z 的压缩包,有两个方法
uncompress log.Z log.txt
uncompress log.Z log
————————————————————————————————————————————————————————————————————————————
tar xZf log.tar.Z log.txt
tar xZf log.tar.Z log
————————————————————————————————————————————————————————————————————————————
# 解压后缀为 .rar 的压缩包,如提示命令不存在,请安装 yum install unrar -y / apt-get install unrar -y ,注意 rar 和 unrar 是分开的
unrar x log.rar
————————————————————————————————————————————————————————————————————————————
# 解压后缀为 .zip 的压缩包,如提示命令不存在,请安装 yum install unzip -y / apt-get install unzip -y,注意 zip 和 unzip 是分开的
unzip log.zip