Linux Tools Quick Tutorial

Linux基础

原文地址在上面,此处是我复习Linux 命令的.

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
# 简要说明命令的作用
[root@caoxl ~]# whatis ls
ls (1) - list directory contents

# 详细的说明文档
[root@caoxl ~]# info ls
...

# 查询命令的说明文档
[root@caoxl ~]# man ls
...

# 显示命令的参数
[root@caoxl ~]# ls --help
...

# 查看程序的binary文件所在路径:
[root@caoxl ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls

# 查看程序的搜索路径:
[root@caoxl ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

总结

whatis info man which whereis

文件及目录管理

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# 创建目录
[root@caoxl ~]# mkdir dir

# 删除目录
[root@caoxl ~]# rm -rf dir/

# 移动
[root@caoxl dir]# mv 1.log ../11.log

# 复制文件
[root@caoxl ~]# cp 11.log ./dir/1.log

# 复制目录
[root@caoxl ~]# cp -r dir ./dir2

# 显示当前路径
[root@caoxl ~]# pwd
/root

# 创建空文件
[root@caoxl ~]# touch 1.log
[root@caoxl ~]# touch 2.log
[root@caoxl ~]# touch 3.log
[root@caoxl ~]# ls
1.log 2.log 3.log

# 删除日志
[root@caoxl ~]# rm *log
rm: remove regular empty file ‘1.log’? y
rm: remove regular empty file ‘2.log’? y
rm: remove regular empty file ‘3.log’? y
[root@caoxl ~]# ls

# 查看当前目录下文件个数
[root@caoxl dir]# find ./ | wc -l
4

# 搜寻文件或目录
[root@caoxl ~]# find ./ -name "dir*" | xargs file
./dir2: directory
./dir2/dir: directory
./dir: directory

# 查找目标文件夹中是否有.log文件
[root@caoxl ~]# find ./ -name "*.log"
./dir/2.log
./dir/1.log
./dir/3.log

# 递归当前目录及子目录删除所有.log文件:
[root@caoxl dir]# find ./ -name "*.log" -exec rm {} \;

# 显示内容同时显示行号
[root@caoxl ~]# cat -n dir.txt

# 按页显示列表内容
[root@caoxl ~]# ls -al | more

# 显示前面几行(默认10行)
[root@caoxl ~]# head dir.txt

# 显示后面几行(默认10行)
[root@caoxl ~]# tail dir.txt

# 查看两个文件间的差别
[root@caoxl ~]# diff dir.txt dir2.txt

# 动态显示文本最新信息
[root@caoxl ~]# tail -f caoxl.log

# 文件与目录权限修改
[root@caoxl ~]# ll
total 0
-rw-r--r-- 1 root root 0 May 6 11:28 test.php
[root@caoxl ~]# chown www:www test.php
[root@caoxl ~]# ll
total 0
-rw-r--r-- 1 www www 0 May 6 11:28 test.php

# 增加脚本可执行权限
[root@caoxl ~]# chmod a+x test.php
[root@caoxl ~]# ll
total 0
-rwxr-xr-x 1 www www 0 May 6 11:28 test.php

# 修改脚本可执行权限
[root@caoxl ~]# chmod -R 777 test.php
[root@caoxl ~]# ll
total 0
-rwxrwxrwx 1 www www 0 May 6 11:28 test.php

# 批处理命令连接执行,使用 |
[root@caoxl ~]# ls /var && echo suss! || echo failed.
adm crash empty gopher lib lock mail opt run tmp yp
cache db games kerberos local log nis preserve spool www
suss!

# 重定向
[root@caoxl ~]# cat test.php
<?php

echo 1024;
[root@caoxl ~]# echo hello >> test.php
[root@caoxl ~]# cat test.php
<?php

echo 1024;
hello

# 查找test.php中包含1024,但不包含hello的记录的总数
[root@caoxl ~]# cat -v test.php | grep 1024 | grep -v hello | wc -l
1

总结

文件管理,目录的创建、删除、查询、管理: mkdir rm mv cp

文件的查询和检索: find locate

查看文件内容: cat vi head tail more diff

文件所有者、权限: chown chmod

管道和重定向: | && >

文本处理

  • find 文件查找
1
2
# 查找txt和pdf文件
[root@caoxl ~]# find . \( -name "*.txt" -o -name "*.pdf" \) -print
  • grep 文本搜索
1
2
[root@caoxl ~]# ps -ef | grep mysql
root 1437 32022 0 14:44 pts/1 00:00:00 grep --color=auto mysql
  • xargs 命令行参数转换
1
2
[root@caoxl ~]# cat test.php | xargs
<?php echo 1024; hello
  • sort 排序

  • uniq 消除重复行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@caoxl ~]# cat test.php 
<?php

echo 1024;
hello
hello

# 消除重复行
[root@caoxl ~]# sort test.php | uniq

echo 1024;
hello
<?php

# 找出重复行
[root@caoxl ~]# sort test.php | uniq -d
hello
  • wc 统计行和字符的工具
1
2
3
4
5
6
7
8
9
10
11
# 统计行数
[root@caoxl ~]# wc -l test.php
5 test.php

# 统计单词数
[root@caoxl ~]# wc -w test.php
5 test.php

# 统计字符数
[root@caoxl ~]# wc -c test.php
30 test.php

总结

find grep xargs sort uniq wc

磁盘管理

  • 查看磁盘空间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看磁盘空间利用大小
[root@caoxl ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 7.7G 30G 21% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 488K 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 379M 0 379M 0% /run/user/0

[root@caoxl ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 40G 7.7G 30G 21% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 488K 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs tmpfs 379M 0 379M 0% /run/user/0

# 查看当前目录所占空间大小
[root@caoxl ~]# du -sh *
8.0K test

-h: human缩写,以易读的方式显示结果(即带单位:比如M/G,如果不加这个参数,显示的数字以B为单位)
-s 递归整个目录的大小

  • 打包/解包 && 压缩/解压缩
1
2
3
4
5
6
7
8
9
10
11
# 仅打包 不压缩
[root@caoxl test]# tar -cvf test.tar ./*

# 压缩
[root@caoxl test]# gzip test.tar

# 解包
[root@caoxl test]# tar -xvf test.tar

# 解压缩
[root@caoxl test]# gunzip test.tar.gz

总结

查看磁盘空间: df -Th

查看目录大小: du -sh

打包/解包&&压缩/解压缩: tar -cvf tar -xvf gzip gunzip bzip

进程管理

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
47
48
49
50
51
52
53
54
55
56
57
$ 查询进程
[root@caoxl ~]# ps -ef | grep php
root 900 1 0 Jan28 ? 00:05:12 php-fpm: master process (/usr/local/php/php56/etc/php-fpm.conf)
www 903 900 0 Jan28 ? 00:00:00 php-fpm: pool www
www 904 900 0 Jan28 ? 00:00:00 php-fpm: pool www
root 2936 32022 0 15:14 pts/1 00:00:00 grep --color=auto php

# 查看进程名中含有ssh的进程(适合只记得部分进程字段)
[root@caoxl ~]# pgrep -l ssh
2563 sshd
19320 sshd
32019 sshd

# 以完整的格式显示所有的进程
[root@caoxl ~]# ps -ajx
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 1 1 1 ? -1 Ss 0 7:30 /usr/lib/systemd/systemd --swit
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
2 3 0 0 ? -1 S 0 0:05 [ksoftirqd/0]
2 5 0 0 ? -1 S< 0 0:00 [kworker/0:0H]
2 7 0 0 ? -1 S 0 0:07 [migration/0]

# 显示进程信息,并实时更新
[root@caoxl ~]# top
top - 15:20:40 up 98 days, 4:24, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 81 total, 1 running, 80 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3880936 total, 2290276 free, 178560 used, 1412100 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 3397572 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 51728 3484 2192 S 0.0 0.1 7:30.73 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:05.38 ksoftirqd/0

# 查看端口占用的进程状态
[root@caoxl ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 3947 mysql 21u IPv6 2088379 0t0 TCP *:mysql (LISTEN)

# 查看用户root的进程所打开的文件
[root@caoxl ~]# lsof -u root

# 杀死进程
[root@caoxl ~]# kill -9 3306

# 分析线程堆栈
[root@caoxl ~]# ps -ef | grep redis
root 4325 32022 0 15:37 pts/1 00:00:00 grep --color=auto redis
[root@caoxl ~]# pmap 32022
32022: -bash
0000000000400000 884K r-x-- bash
00000000006dd000 4K r---- bash
00000000006de000 36K rw--- bash
00000000006e7000 24K rw--- [ anon ]
000000000110e000 2576K rw--- [ anon ]
...

总结

ps top lsof kill pmap

性能监控

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 查看CPU使用率
[root@caoxl ~]# sar -u
Linux 3.10.0-862.14.4.el7.x86_64 (caoxl) 05/06/2019 _x86_64_ (2 CPU)

12:00:01 AM CPU %user %nice %system %iowait %steal %idle
12:10:01 AM all 0.01 0.00 0.01 0.00 0.00 99.97
12:20:01 AM all 0.01 0.02 0.01 0.00 0.00 99.95
12:30:01 AM all 0.01 0.00 0.01 0.00 0.00 99.98

# 查看CPU平均负载 (表示每秒采样一次,总共采样2次;)
[root@caoxl ~]# sar -q 1 2
Linux 3.10.0-862.14.4.el7.x86_64 (caoxl) 05/06/2019 _x86_64_ (2 CPU)

03:40:06 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
03:40:07 PM 0 126 0.00 0.01 0.05 0
03:40:08 PM 0 126 0.00 0.01 0.05 0
Average: 0 126 0.00 0.01 0.05 0

# 查询内存
[root@caoxl ~]# sar -r 1 2
Linux 3.10.0-862.14.4.el7.x86_64 (caoxl) 05/06/2019 _x86_64_ (2 CPU)

03:42:14 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
03:42:15 PM 2192724 1688212 43.50 334600 702232 1055296 17.65 726812 530364 0
03:42:16 PM 2192724 1688212 43.50 334600 702232 1055296 17.65 726812 530364 0
Average: 2192724 1688212 43.50 334600 702232 1055296 17.65 726812 530364 0

# 查看内存使用量
[root@caoxl ~]# free -m
total used free shared buff/cache available
Mem: 3789 263 2141 0 1384 3228
Swap: 2047 0 2047

# 查询页面交换
[root@caoxl ~]# sar -W 1 3
Linux 3.10.0-862.14.4.el7.x86_64 (caoxl) 05/06/2019 _x86_64_ (2 CPU)

03:44:38 PM pswpin/s pswpout/s
03:44:39 PM 0.00 0.00
03:44:40 PM 0.00 0.00
03:44:41 PM 0.00 0.00
Average: 0.00 0.00

# 查询磁盘使用
[root@caoxl ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 7.8G 30G 21% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 488K 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 379M 0 379M 0% /run/user/0

# 查看cpu、内存、使用情况: vmstat n mn 为监控频率、m为监控次数)
[root@caoxl ~]# vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 2192772 334600 1083488 0 0 0 4 2 1 2 1 98 0 0
0 0 0 2192748 334600 1083520 0 0 0 0 91 87 0 0 100 0 0
0 0 0 2192748 334600 1083520 0 0 0 0 88 90 0 0 100 0 0

# 操作redis时,监控内存变化:
[root@caoxl ~]# watch -d -n 1 './redis-cli info | grep memory'

总结

sar top free df -h watch

网络工具

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
# 列出所有端口(包括监听和未监听的)
[root@caoxl ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN
...

# 使用netstat工具查询端口
[root@caoxl ~]# netstat -antp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 3947/mysqld

# 查看路由状态
[root@caoxl ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.18.63.253 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.18.48.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0

# 下载文件
[root@caoxl ~]# wget http://caoxl.com/imgs/we-min.jpg
--2019-05-06 15:56:44-- http://caoxl.com/imgs/we-min.jpg
Resolving caoxl.com (caoxl.com)... 47.107.169.233
Connecting to caoxl.com (caoxl.com)|47.107.169.233|:80... connected.
HTTP request sent, awaiting response... 200 OK
...

# ftp sftp lftp ssh
# SSH登陆
[root@caoxl ~]# ssh root@47.107.169.233

# ftp/sftp文件传输
[root@caoxl ~]# sftp root@47.107.169.233

# 网络复制
[root@caoxl ~]# scp localpath ID@host:path

总结

netstat lsof route ping wget ssh sftp scp

用户管理工具

  • 用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 添加用户
[root@caoxl ~]# useradd -m caoxl

# 设置密码
[root@caoxl ~]# passwd caoxl
Changing password for user caoxl.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

# 删除用户
[root@caoxl ~]# userdel -r caoxl

# 账号切换
[root@caoxl ~]# su caoxl
su: user caoxl does not exist
  • 用户的组
1
2
3
4
5
# 查看所有用户及权限
[root@caoxl ~]# more /etc/passwd

# 查看所有的用户组及权限
[root@caoxl ~]# more /etc/group
  • 更改读写权限
  1. 字母方式
1
chmod userMark(+|-)PermissionsMark
  • userMark取值:

    • u: 用户
    • g: 组
    • o: 其它用户
    • a: 所有用户
  • PermissionsMark取值:

    • r: 读
    • w: 写
    • x: 执行
1
2
3
4
5
6
7
8
9
10
[root@caoxl ~]# ll
total 0
-rw-r--r-- 1 root root 0 May 6 16:07 test1.php
-rw-r--r-- 1 root root 0 May 6 16:07 test2.php
[root@caoxl ~]# chmod a+x test1.php # 对所有用户给文件test1.php增加可执行权限
[root@caoxl ~]# chmod g+w test2.php # 对组用户给文件test2.php增加可写权限
[root@caoxl ~]# ll
total 0
-rwxr-xr-x 1 root root 0 May 6 16:07 test1.php
-rw-rw-r-- 1 root root 0 May 6 16:07 test2.php
  1. 数字方式

使用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。

1
2
3
4
5
[root@caoxl ~]# chmod 777 test2.php
[root@caoxl ~]# ll
total 0
-rwxr-xr-x 1 root root 0 May 6 16:07 test1.php
-rwxrwxrwx 1 root root 0 May 6 16:07 test2.php
  • 更改文件或目录的拥有者
1
2
3
4
5
6
[root@caoxl ~]# chown www test1.php
[root@caoxl ~]# chown -R www test2.php # 使用-R选项递归更改该目录下所有文件的拥有者
[root@caoxl ~]# ll
total 0
-rwxr-xr-x 1 www root 0 May 6 16:07 test1.php
-rwxrwxrwx 1 www root 0 May 6 16:07 test2.php

总结

useradd passwd userdel usermod chmod chown

系统管理及IPC资源管理

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
# 查看Linux系统版本
[root@caoxl ~]# uname -a
Linux caoxl 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

[root@caoxl ~]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.5.1804 (Core)
Release: 7.5.1804
Codename: Core

# 查看硬件信息 查询CPU信息
[root@caoxl ~]# cat /proc/cpuinfo

# 查询CPU是几核的
[root@caoxl ~]# cat /proc/cpuinfo | grep processor | wc -l
2

# 查看内存信息
[root@caoxl ~]# cat /proc/meminfo
MemTotal: 3880936 kB
MemFree: 2194292 kB
MemAvailable: 3311360 kB
...

# 显示架构
[root@caoxl ~]# arch
x86_64

# 显示系统时间
[root@caoxl ~]# date
Mon May 6 16:17:04 CST 2019

# 查看系统使用的IPC资源
[root@caoxl ~]# ipcs

------ Message Queues --------
key msqid owner perms used-bytes messages

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status

------ Semaphore Arrays --------
key semid owner perms nsems

总结

uname sar arch date ipcs

Linux 工具进阶

程序调试

程序优化

Linux 工具参考篇

  • gdb 调试利器

  • ldd 查看程序依赖库

  • lsof 一切皆文件

  • ps 进程查看其

  • pstack 跟踪进程栈

  • strace 跟踪进程中的系统调用

  • ipcs 查询进程间通信状态

  • top linux下的任务管理器

  • free 查询可用内存

  • vmstat 监视内存使用情况

  • iostat 监视I/O子系统

  • sar 找出系统瓶颈的利器

  • readelf elf 文件格式分析

  • objdump 二进制文件分析

  • nm 目标文件格式分析

  • size 查看程序内存映象大小

  • wget 文件下载

  • scp 跨机远程拷贝

  • crontab 定时任务

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2021 Keep It Simple And Stupid All Rights Reserved.

访客数 : | 访问量 :