# 常见命令

## Linux 中的帮助文档

* **man**
* **info**:GNU 项目推荐的新一代文档格式，功能更强
  * m 显示菜单
  * f 跟随交叉引用，l 返回
* **--help或 -h** ：查看大部分程序自带的帮助文档

## 磁盘与文件统计

* df 查看磁盘空间占用
* du 统计文件占用空间
* fdisk 分区管理
* mkfs.ext3 磁盘格式
* mount 磁盘挂载
* umount 磁盘卸载

## 查找文件

### **find ：功能最丰富的文件查找命令**

**基本用法示例：**

```
find / -name test -print
```

查找 / 目录下 名字为 test 的文件，然后打印出文件名

**常用格式：**

```
find [路径] [选项] [查找规则] [动作]
```

* \[路径]可以有多个，以空格分隔
* \[选项]常用的有：
  * -depth 先找目录内容，再找目录自身，即先深入查找.
  * -follow 跟随符号链接，将软连接解为实际文件.
  * -maxdepth N 设置目录查找深度
  * -mount (或 -xdev) 不查找其他挂载的文件系统，如NFS等
* 基于文件名的\[查找规则]：
  * 例1： `find . -name “*.php”`找本目录下所有后缀名为 .php  的文件
  * 例2： `find . -iname “x[abc]”`查找本目录下所有文件名为 xa、xb或xc 的文件，且不区分大小写。
  * 例3： `find . -regex ".*b.*3"` 查找本目录下文件完整路径及名称匹配该正则的。
* 基于时间的\[查找规则]：
  * 例1： `find . -mmin -60` 查找本目录下修改时间为最近60分钟内的
  * 例2： f`ind . -mmin +5` 查找本目录下修改时间为5分钟之前的
  * 例3： `find /tmp -atime -1` 查找/tmp目录下最近1天（24小时）内被访问过的文件
  * > 总结:
    >
    > find . -atime N
    >
    > 其中 -atime 的位置也可以使用如下参数：\
    > -atime, -mtime, -ctime, -amin, -mmin, -cmin N
    >
    > time: 天(24小时)，min: minute,分钟
    >
    > +N N时间前，-N N时间内的，n 等于N的
* 基于文件类型的\[查找规则]：
  * 例1： `find . -type f`查找本目录下所有的“文件”
  * 例2： `find . -type d`查找本目录下所有的“目录”
* 其他\[查找规则]：
  * 例1： `find . -user root`查找本目录下所有root用户的文件
  * 例2： `find . -perm 600` 查找本目录下所有权限为600的文件
* \[查找规则]的组合：
  * `find . \( -name “_*“ -or -user root \) -type f`查找本目录下（以\_开头或root用户的）“文件”
  * > 逻辑运算符：\
    > -not\
    > -or\
    > -and
* 常用\[动作]：
  * -print 打印出找到的文件，以\n结束
  * -print0 打印出找到的文件，无换行
  * -exec command 对找到的文件执行命令
  * -ok 同 -exec， 但在执行前会询问用户
  * -ls 列出文件详情
  * > -exec 示例：
    >
    > ```
    > find ./ -name "*.tmp" -exec unlink {} \;
    > ```
    >
    > {} ：指代找到的文件
    >
    > \\; ：表示-exec指定的命令结束，必须。
    >
    > 安全起见也可以用 -ok

**其他查找文件命令：**

* which ：查找环境变量PATH下的可执行文件及别名（alias）
* whereis：查找系统常见目录中的可执行文件、文档、源代码、配置文件等
* locate：通过索引数据库查找文件

## Linux 中的文本工具

* cat —查看文件内容
* head —查看文件头部
* tail —查看文件尾部
* more—分页查看文件内容
* less—更强的分页查看文件内容
* cut—按列查看文件内容，默认以 TAB 分隔
* sort—对文件内容排序
* uniq—对文件内容排重, -c 可统计连续重复行数量,资料:[实例解说Linux命令行uniq](http://os.51cto.com/art/201107/274991.htm)
* diff—对比文件内容
* grep—查找文件内容
* split—按行、字节等切分并输出文件
* wc—字节、单词、行计算

### **cut ：选择每一行中特定的列（字段），然后输出**

**示例:**

查看系统中所有用户

```
cut -d: -f1 /etc/passwd
```

* -d 指定分隔符
* -f 指定输出的字段

### **sort ：对文件中的行排序，默认以ASCII顺序排列**

**示例:**

按passwd文件中的第三列数字排序，以“:”分隔每一列

```
sort -n -k3 -t: /etc/passwd
```

* -n 按数字而不是ascii排序
* -t 指定列的分隔符
* -k 指定按第几列排序
* -r 倒序排列

**示例:**

按第6列倒序排列，第3列正序排列

```
sort -t: -k6nr -k3n  /etc/passwd
```

### **grep ：输出文本中匹配所指定正则表达式的行**

**命令格式：**

```
grep [选项] 正则表达式 [文件]
```

**常用\[选项]：**

* -c 输出匹配到的行数
* -E 启用更强大的正则表达式
* -H 输出匹配到的行及所属的文件名
* -i 不区分大小写匹配
* -l 在文件中找到第一个匹配后，显示文件名，停止后续查找
* -v 输出不匹配的行
* \--color 高亮显示匹配到的内容

**例：**

```
grep -cP 'bot|spider' ./access.log
```

显示 access.log 文件中出现 bot 或 spider 关键词的行数

### **split—按行、字节等切分并输出文件**

**命令格式：**

```
split [选项] [文件] [文件名前缀]
```

**常用\[选项]：**

* -b：值为每一输出档案的大小，单位为 byte。
* -C：每一输出档中，单行的最大 byte 数。&#x20;
* -d：使用数字作为后缀。&#x20;
* -l：值为每一输出档的行数大小。
* -a：后缀长度

## 通过管道组合使用工具

> 管道
>
> Linux 中有三个系统文件描述符： 0：标准输入； 1：标准输出； 2：标准错误输出。
>
> 标准输出、标准错误输出通常默认为当前屏幕。
>
> 管道是Linux进程间通信的方式之一
>
> 管道像一根供数据流通的单向管道
>
> 所有Linux程序的标准输出都可以通过管道传递给另一个程序作为标准输入
>
> ![](https://1303647163-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT30woYyQ9bJF96Hh%2F-LfnTB5KYnkOx0V3e4EY%2F-LfnTHl_b3eozK6EIpWs%2FLinux%E7%AE%A1%E9%81%93.png?generation=1558862973370390\&alt=media)

需求：分析如下网站访问日志文件，找出访问量最大的前10个IP地址，降序排列

```
123.151.47.117 - - [16/Feb/2014:00:00:02 +0800] "GET / HTTP/1.1"
220.171.166.19 - - [16/Feb/2014:00:00:06 +0800] "GET /search/mp3
```

**找出IP，每行一个**

```
cut -d " " -f1 ./access.log
```

去重并计数

```
uniq -c
```

排序(-n 按数字而不是ascii排序, -r 倒序排列)

```
sort -n -r
```

取前10行

```
head -10
```

最终命令

```
$ cut -d " " -f1 ./access.log | sort | uniq -c | sort -n -r | head -10
```

上面的结果如何保存下来?

## 输入/输出重定向

> Linux 中有三个系统文件描述符： 0：标准输入； 1：标准输出； 2：标准错误输出。

`>`符号可重定向输出位置。

`ls -l > ls_output.log`将标准输出重定向到 `ls_output.log`文件

`ls -l >> ls_append.log`将标准输出重定向\*追加\*到 `ls_output.log`文件

```
ls -l 1> ls_output.log 2> ls_error.log
```

将 标准输出 重定向到 ls\_output.log 文件，标准错误输出重定向到 ls\_error.log 文件

```
ls -l 1> ls_out.log 2>&1
```

将标准输出重定向到 ls\_out.log 文件，然后将标准错误输出重定向到和标准输出同样的地方。

`more < xxx.txt`输入重定向

上面操作的最终命令进行报错结果

```
$ cut -d " " -f1 ./access.log | sort | uniq -c | sort -n -r | head -10 > ip.log
```

> 将结果丢弃,也不输出
>
> $ xxxxxxx > /dev/null

## 系统管理

### **ps 命令：显示当前进程**

* ps -ef  显示带启动命令行的进程信息
* ps -u root 显示某用户的进程
* ps -A 显示全部进程
* ps -ejH 显示进程树

### **kill 命令：向进程发送信号，常用于终止某进程**

* `kill -s PID` : -s 指定信号
* `kill -9 PID` 可用于强制某进程退出
* `killall`可用于通过进程名称发送信号

### **fg 命令： 将后台任务调到前台**

命令后加 & ，或Ctrl + Z 可将任务转到后台执行

后台执行中的任务，可以通过 “fg %任务序号”调到前台

### **crontab：让命令自动定时运行**

crontab: 定时执行任务

**基本格式 :**

```
*　　*　　*　　*　　*　　command
分　 时　 日　 月　 周
```

分（0-59） 时（0-23） 日（1-31） 月（1-12） 周（0-6）//0代表周日

每个 \* 的位置除数字取值外，还可以有如下格式：

* \* 代表所有的取值范围内的数字；
* / 代表“每”的意思,如 "\*/5"表示每5个单位；
* * 代表范围，从某个数字到某个数字；
* , 用于指定多个值。

**常用命令：**

```
service crond start 启动 crond 服务

crontab -l #列出cron服务的详细内容
crontab -u xxx -e #设定xxx用户的cron服务
crontab -u xxx -r #删除xxx用户的所有cron服务
```

**注意事项**

1. crontab 中的各任务尽量使用绝对路径&#x20;
2. crontab 执行是以实际时间计算的，而不是以启动时间计算，因此如果系统有大量crontab任务，最好不要集中定在同一个时间启动。

**示例：**

每天早上6时0分

```
0 6 * * * echo "Good morning." >> /tmp/test.txt
```

每两个小时

```
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
```

晚上11点到早上7点之间每两个小时，早上八点

```
0 23-7/2,8 * * * echo "Good dream：）" >> /tmp/test.txt
```

### **netstat： 查看网络状态**

* netstat -anpl 查看所有网络连接状态，带进程名称

### **Ifconfig ： 查看网卡配置、ip地址信息**

### **iptables: Linux 防火墙**

* `service iptables start`#启动服务
* `iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP`#所有来自 1.2.3.4 的80端口访问全部屏蔽
* `service iptables save`#保存规则，否则重启失效
* `iptables -L -n --line-numbers` #列出当前配置及规则号
* `iptables -D  INPUT 4` 删除INPUT类第4号规则
* `iptables -F`清除所有规则

### **top 命令**

常用操作：

* P：按CPU使用量排列，
* M：按内存使用量排列，
* h：显示帮助 ，
* q：退出
* 1： 多 CPU 显示，
* k：杀死进程，
* r：设置进程Nice级别

```
load average: 0.00, 0.03, 0.05
```

平均负载：最近1分钟，最近5分钟，最近15分钟

![](https://1303647163-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT30woYyQ9bJF96Hh%2F-LfnTB5KYnkOx0V3e4EY%2F-LfnTHlgrbj-64Ab-ZDx%2Flinux_top_load_average.png?generation=1558862978442814\&alt=media)

```
%Cpu0  :  0.3 us,  1.0 sy,  0.0 ni, 98.3 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
```

![](https://1303647163-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT30woYyQ9bJF96Hh%2F-LfnTB5KYnkOx0V3e4EY%2F-LfnTHlj69EVzhgIschl%2Flinux_top_cpu.png?generation=1558862978874236\&alt=media)

## 查看系统运行状态

```
$ uname -a                   # 查看内核/操作系统/CPU信息
$ cat /etc/issue             # 查看操作系统版本
$ cat /proc/version          # 查看内核
$ cat /proc/cpuinfo          # 查看CPU信息
$ cat /proc/meminfo          # 查看内存信息
$ cat /proc/loadavg       #查看负载信息
$ free -m                    # 查看内存使用量和交换区使用量
$ hostname                   # 查看计算机名
```

## 软件安装

* yum 安装(search install update remove)
* rpm安装(-i –e -qa)
* Apt安装(search install update  remove)
* 源码编译安装

## 压缩与解压缩

### zip压缩与解压

**zip压缩**

```
zip -r test.zip ./*
```

* -d 删除压缩包内文件
* -m删除源文件

**unzip解压缩**

```
unzip test.zip
```

### rar压缩与解压

**rar压缩**

```
rar a test.rar ./*
```

**rar解压缩**

```
unrar e test.rar
```

### tar压缩与解压

**tar压缩**

```
tar –cvf a.tar a 
tar –czf a.tar.gz a 
tar –cjf a.tar.bz2 a 
tar –cf a.tar a 
tar -cvzf  a.tar.gz a --remove-files
```

**tar解压缩**

```
tar -xvf file.tar
tar -xzvf file.tar.gz
tar -xjvf file.tar.bz2
tar -xZvf file.tar.Z
```

其他命令：

gzip

bzip2

Uncompress
