# 快速教程：常用命令


## 基本格式

命令 [选项] [参数]

## 目录操作命令

- `ls`: 常用 
  - `ls -l(ll)`
  - `ls -a`
- `cd`: 目录切换
  - `cd -:`上次所在目录
  - `cd .`:当前目录
  - `cd ..`:上级目录
  - `cd ~`:用户家目录
  - `pwd`:当前所在目录
  - `mkdir`:创建空目录
    - `mkdir -p` 递归创建所有目录
  - `rmdir`:只能删除空目录
    - `rmdir -p` 递归删除

## 文件操作命令

- `touch`: 创建空文件
- `stat`: 查看文详细信息,最近访问时间,修改时间等
- `cat`: 查看文件内容
  - `-A`: 相当于-VET,列出所有隐藏符号
  - `-E`: 列出每行结尾的回车符$
  - `-n`: 显示行号
  - `-v`: 列出特殊字符
- `more`:分屏显示
- `less`:同more,分行显示
- `head`:显示文件开头
  - `-n`:行数
  - `-v`:显示文件名
- `tail`:显示文件结尾
  - `-n`:行数
  - `-f`:监听文件新增内容
- `ln`:建立链接 `ln [选项] 源文件 目标文件`
  - `-s`:建立软链,不加则建立 硬链
  - `-f`:强制,如果目标文件已存在,则覆盖
  - 硬链:拥有相同inode,block;修改任意一个,另一个改变;删除任意一个,另一个都能用;不能链接目录;不能跨分区;
  - 软链:与硬链相反;不论源多大,软链大小不变;

## 目录和文件通用

- rm:rm [选项] 文件或目录
  - -f:强制删除
  - -i:交互删除
  - -r:递归删除
- cp:cp [选项] 源文件 目标文件
  - -a: 相当于-dpr集合
  - -d: 如果源为软链,则复制出的也是软链
  - -i: 询问是否覆盖
  - -p: 复制后目录文件保留源文件属性
  - -r: 递归复制
- mv:mv [选项] 源文件 目标文件
  - -f: 强制覆盖
  - -i: 询问
  - -v: 显示详细信息

## 基本权限管理

- 例:-rw-r--r--(共10位): 

  - 1位:文件类型: -普通文件;b块设备;c字符设备;d目录文件;l软链;p管道符;s套接字;
  - 2-4:所有者权限:r读;w写;x执行;
  - 5-7:所属组权限
  - 8-10:其他人权限

- 权限命令:

  - chmod: chmod [选项] 权限模式 文件名

    - 权限模式: [ugoa][+-=][perms] 即[用户身份][赋予方式][权限]
      用户身份:u所有者; g所属组; o代表其他人; a代表全部身份;
      赋予方式:+加入权限; -减去权限; =设置权限
    - 数字权限: r=4; w=2; x=1;
    - 常用权限: 644(所有者读写;所属组织和其他人只读); 755;777;

  - chown: 修改文件和目录的所有者和所属组的命令(普通用户无法修改) 

    `chown [选项] 所有者:所属组 文件或目录`

  - chgrp: 修改文件和目录的所属组的命令

  - umask: 查看系统默认权限

    对文件:新建时最大666
    对目录:新建最大777

## 帮助命令

- man: 显示联机帮助手册 man[选项] 命令
  - -f:查看拥有哪个级别
  - -k:查看所有帮助
- info: 一套完整的资料
- help: 只能读取shell内置命令
- --help:常用 

## 搜索命令

- whereis: 搜索系统命令的命令,不能搜普通文件

- which: 同whereis, 但which可以找到别名命令

- locate: 按照文件名搜索普通文件命令(搜索快, 但只能通过文件名搜索) 需在/etc/updatedb.conf中配置生效

- find: 
  ```shell
  按文件名: find 搜索路径 [选项] 搜索内容
  			-name:按文件名
  			-iname:按文件名,不区分大小写
  			-inum:按inode号
  按文件大小: find 搜索路径 [选项] 搜索内容
    -size [+|-]大小
  按修改时间搜索: find 搜索路径 [选项] 搜索内容
    -atime [+|-]时间: 按文件访问时间搜索
    -mtime [+|-]时间: 按文件修改时间搜索
    -ctime [+|-]时间: 按文件状态修改时间搜索
    例: -5代表5天内修改; 5代表5-6天那一天修改; +5代表6天前修改
  按照权限搜索: find 搜索路径 [选项] 搜索内容
    -perm 权限模式: 等于权限模式的文件
    -perm -权限模式: 全部包含权限模式的文件
    -perm +权限模式: 包含权限模式的任意一个权限的文件
  按照所有者和所属组:
    -uid 用户id
    -gid 组id
    -user 用户名
    -group 组名
    -nouser
  按照文件类型搜索: 
    -type d: 查找目录
    -type f: 查找普通文件
    -type l: 查找软链
  逻辑运算符:
    -a: and逻辑与
    -o: or
    -not: not
  -exec: find 搜索路径 [选项] 搜索内容 -exec 命令2 {} \; 即将结果交给命令2处理
  -ok: 同-exec,只是会询问
  ```

- grep: 提取和匹配符合条件的字符串行 grep [选项] "搜索内容" 文件名
  ```shell
  -i:忽略大小写
  -n:输出行号
  -v:反向查找 
  --color=auto: 关键字用颜色显示
  ```

- find与grep区别: 
  ```shell
  find:搜索符合条件的文件名,如需要模糊,则使用通配符完全匹配
  grep:搜索符合条件的字符串,如需模糊,使用正则包含匹配
  			通配符:匹配文件名,完全匹配
  				?:  匹配一个任意字符
  				*:  匹配0或多个任意字符
  				[]: 匹配括号中的任意一个字符
          [-]:匹配括号中的任意一个字符,但~代表范围, 如[a-z]
  				[^]:与上相反, 如[^0-9]
  			正则: 匹配字符串,包含匹配
  				?:  匹配前1个字符重复0次或1次
  				*:  匹配前1个字符重复0次或任意多次
  				[]: 匹配括号中的任意一个字符
  				[-]:匹配括号中的任意一个字符,但~代表范围, 如[a-z]
  				[^]:与上相反, 如[^0-9]	
  				^:  匹配行首
  				$:  匹配行尾
  ```

- `|`:管道符 命令1|命令2(命令1的正确输出作为命令2的操作对象) 

  例1: `ll -a /etc/ | more 例2: netstat -an | grep 'established' | wc -l`

- 命令别名设置: alias 别名='命令名'

- 常用快捷键: 
  ```shell
  tab: 补全
  ctrl + a: 光标移动到开头
  ctrl + e: 行尾
  ctrl + c: 强制终止当前命令
  ctrl + l: 清屏,相当于clear
  ctrl + u: 删除或剪切光标之前的命令
  ctrl + y: 粘贴剪切的内容
  ```

## 压缩和解压缩

- .zip: 
  ```shell
  zip: zip [选项] 压缩包名 源文件或源目录
  			-r:压缩目录
  unzip: unzip [选项] 压缩包名
    -d: 指定解压缩位置
  ```

- .gz:
  ```shell
  gzip: gzip [选项] 源文件
  			-c:将压缩数据输出到标准输出,可以用于保留源文件
  			-d:解压缩
  			-r:压缩目录
  gunzip: 同gzip -d
  ```

- .bz2: 
  ```shell
  bzip2 [选项] 源文件	
  			-d: 解压缩
  			-k: 压缩时, 保留源文件
  			-v: 显示压缩详细信息
  bunzip2: 同bzip2 -d
  ```

- .tar
  ```shell	
  tar: tar [选项] [-f 压缩包名] 源文件
    -c: 打包
    -f: 指定压缩包的文件名
    -v: 显示打包文件过程 
  tar: tar [选项] 压缩包
    -x:解打包
    -f:指定压缩包文件包
    -v:显示解打包过程 
    -t:测试,不解包,只看包中文件
  ```

- .tar.gz/.tar.bz2:
  ```shell
  压缩: tar -zcvf/jcvf 压缩包 源文件
  解压: tar -zxvf/jxvf 压缩包
  ```

## 关机和重启

- sync:刷新文件系统缓冲区

- shutdown: shutdown [选项] 时间 [警告信息]
  ```shell
  -c: 取消已经执行的shutdown命令
  -h: 关机
  -r: 重启
  ```

- reboot: 重启

- halt/poweroff: 关机,不建议使用

- init: 修改运行级别, init 0

## 常用网络命令

- 配置ip地址: setup工具 或 vim /etc/sysconfig/network-scripts/ifcfg-eth0 (手动配置)

- 重启网络服务: service network restart

- ifconfig:查看ip

- ping:通过icmp协议进行网络探测 如: ping -b -c 3 192.168.1.255
  		-b:对整个网段进行探测
    		-c:指定ping的次数
    		-s:指定探测包大小

- netstat:网络状态查看命令,查看本机开启端口和网络连接
  ```shell
  -a: 列出所有网络状态
  -c 秒: 每隔几秒刷新一次网络状态
  -n: 使用ip和port显示
  -p: 显示Pid和程序名
  -t: 显示tcp协议端口使用状况
  -u: 显示Udp协议端口使用状况
  -l: 仅显示监听状态连接
  -r: 显示路由表
  
  State常见状态: 
    LISTEN:监听状态,只有TCP需要监听
    ESTABLISHED:建立连接状态
    SYN_SENT:发起包,主动发起连接数据包
    SYN_RECV:接收到主动发起包
    FIN_WAIT1:正在中断
    FIN_WAIT2:已经断开
    TIME_WAIT:连接中断,但套接字依然等待结束
    CLOSED:套接字没有被使用
  ```

- write:向其他用户发送信息

- wall:向所有用户发送信息

- mail:发送邮件

## 系统痕迹命令

- w:显示登录的用户,和正在做什么	
- who:和w类似,显示内容更加简单	
- last:查看所有登录过的用户,查看的是/var/log/wtmp日志文件	
- lastlog:查看系统中所有用户最后一次登录的时间和命令
- lastb:查看错误登录的信息

## 挂载命令

```shell
mount:
		-l:查看已经挂载的设备
		-a:依据/etc/fstab内容,自动挂载
```

