📝 linux 命令行文档

This commit is contained in:
Zhang Peng 2018-02-27 17:29:23 +08:00
parent d864a87a5a
commit 4630576d76
20 changed files with 5898 additions and 1349 deletions

View File

@ -7,11 +7,17 @@
* [命令行的艺术(转载)](linux/the-art-of-command-line.md)
* [linux 目录](linux/linux-directory.md)
* [linux 常用命令](linux/commands/README.md)
* [linux 常用命令-系统设置](linux/commands/linux-cmd-system.md)
* [linux 常用命令-文件目录](linux/commands/linux-cmd-file-and-folder.md)
* [linux 常用命令-磁盘管理](linux/commands/linux-cmd-disk.md)
* [linux 常用命令-网络管理](linux/commands/linux-cmd-network.md)
* [linux 常用命令-压缩](linux/commands/linux-cmd-compress.md)
* [linux 常用命令-文件目录管理](linux/commands/文件目录管理/README.md)
* [linux 常用命令-文件内容查看](linux/commands/文件目录管理/文件内容查看.md)
* [linux 常用命令-文件压缩与解压](linux/commands/文件目录管理/文件压缩与解压.md)
* [linux 常用命令-文件处理](linux/commands/文件目录管理/文件处理.md)
* [linux 常用命令-文件编辑](linux/commands/文件目录管理/文件编辑.md)
* [linux 常用命令-文件权限属性设置](linux/commands/文件目录管理/文件权限属性设置.md)
* [linux 常用命令-文件查找和比较](linux/commands/文件目录管理/文件查找和比较.md)
* [linux 常用命令-目录基本操作](linux/commands/文件目录管理/目录基本操作.md)
* [linux 常用命令-网络管理](linux/commands/网络管理/README.md)
* [linux 常用命令-网络管理](linux/commands/网络管理/网络应用.md)
* [linux 常用命令-磁盘管理](linux/commands/磁盘管理.md)
* [yum 命令](linux/yum.md)
* [shell](shell/README.md)
* [shell 快速指南](shell/shell-quickstart.md)

Binary file not shown.

View File

@ -1,255 +0,0 @@
# Linux 常用命令-压缩
## zip
> zip 命令用于压缩文件。
>
> zip 是个使用广泛的压缩程序,文件经它压缩后会另外产生具有".zip"扩展名的压缩文件。
### 语法
```
zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时间>][-<压缩效率>][压缩文件][文件...][-i <范本样式>][-x <范本样式>]
```
**参数**
- -A 调整可执行的自动解压缩文件。
- -b<工作目录> 指定暂时存放文件的目录。
- -c 替每个被压缩的文件加上注释。
- -d 从压缩文件内删除指定的文件。
- -D 压缩文件内不建立目录名称。
- -f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
- -F 尝试修复已损坏的压缩文件。
- -g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。
- -h 在线帮助。
- -i<范本样式> 只压缩符合条件的文件。
- -j 只保存文件名称及其内容,而不存放任何目录名称。
- -J 删除压缩文件前面不必要的数据。
- -k 使用MS-DOS兼容格式的文件名称。
- -l 压缩文件时把LF字符置换成LF+CR字符。
- -ll 压缩文件时把LF+CR字符置换成LF字符。
- -L 显示版权信息。
- -m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
- -n<字尾字符串> 不压缩具有特定字尾字符串的文件。
- -o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。
- -q 不显示指令执行过程。
- -r 递归处理,将指定目录下的所有文件和子目录一并处理。
- -S 包含系统和隐藏文件。
- -t<日期时间> 把压缩文件的日期设成指定的日期。
- -T 检查备份文件内的每个文件是否正确无误。
- -u 更换较新的文件到压缩文件内。
- -v 显示指令执行过程或显示版本信息。
- -V 保存VMS操作系统的文件属性。
- -w 在文件名称里假如版本编号本参数仅在VMS操作系统下有效。
- -x<范本样式> 压缩时排除符合条件的文件。
- -X 不保存额外的文件属性。
- -y 直接保存符号连接而非该连接所指向的文件本参数仅在UNIX之类的系统下有效。
- -z 替压缩文件加上注释。
- -$ 保存第一个被压缩文件所在磁盘的卷册名称。
- -<压缩效率> 压缩效率是一个介于1-9的数值。
### 实例
将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip
```
zip -q -r html.zip /home/html
```
如果在我们在 /home/html 目录下,可以执行以下命令:
```
zip -q -r html.zip *
```
从压缩文件 cp.zip 中删除文件 a.c
```
zip -dv cp.zip a.c
```
## unzip
> unzip 命令用于解压缩 zip 文件
>
> unzip 为 .zip 压缩文件的解压缩程序。
### 语法
```
unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]
```
**参数**
- -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
- -f 更新现有的文件。
- -l 显示压缩文件内所包含的文件。
- -p 与-c参数类似会将解压缩的结果显示到屏幕上但不会执行任何的转换。
- -t 检查压缩文件是否正确。
- -u 与-f参数类似但是除了更新现有的文件外也会将压缩文件中的其他文件解压缩到目录中。
- -v 执行是时显示详细的信息。
- -z 仅显示压缩文件的备注文字。
- -a 对文本文件进行必要的字符转换。
- -b 不要对文本文件进行字符转换。
- -C 压缩文件中的文件名称区分大小写。
- -j 不处理压缩文件中原有的目录路径。
- -L 将压缩文件中的全部文件名改为小写。
- -M 将输出结果送到more程序处理。
- -n 解压缩时不要覆盖原有的文件。
- -o 不必先询问用户unzip执行后覆盖原有文件。
- -P<密码> 使用zip的密码选项。
- -q 执行时不显示任何信息。
- -s 将文件名中的空白字符转换为底线字符。
- -V 保留VMS的文件版本信息。
- -X 解压缩时同时回存文件原来的UID/GID。
- [.zip文件] 指定.zip压缩文件。
- [文件] 指定要处理.zip压缩文件中的哪些文件。
- -d<目录> 指定文件解压缩后所要存储的目录。
- -x<文件> 指定不要处理.zip压缩文件中的哪些文件。
- -Z unzip -Z等于执行zipinfo指令。
### 实例
查看压缩文件中包含的文件:
```
# unzip -l abc.zip
Archive: abc.zip
Length Date Time Name
-------- ---- ---- ----
94618 05-21-10 20:44 a11.jpg
202001 05-21-10 20:44 a22.jpg
16 05-22-10 15:01 11.txt
46468 05-23-10 10:30 w456.JPG
140085 03-14-10 21:49 my.asp
-------- -------
483188 5 files
```
-v 参数用于查看压缩文件目录信息,但是不解压该文件。
```
# unzip -v abc.zip
Archive: abc.zip
Length Method Size Ratio Date Time CRC-32 Name
-------- ------ ------- ----- ---- ---- ------ ----
94618 Defl:N 93353 1% 05-21-10 20:44 9e661437 a11.jpg
202001 Defl:N 201833 0% 05-21-10 20:44 1da462eb a22.jpg
16 Stored 16 0% 05-22-10 15:01 ae8a9910 ? +-|¥+-? (11).txt
46468 Defl:N 39997 14% 05-23-10 10:30 962861f2 w456.JPG
140085 Defl:N 36765 74% 03-14-10 21:49 836fcc3f my.asp
-------- ------- --- -------
483188 371964 23% 5 files
```
## tar
> tar 命令用于备份文件。
>
> tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
### 语法
```
tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Script文件>][-K <>][-L <>][-N <>][-T <>][-V <>][-X <>][-<><>][--after-date=<>][--atime-preserve][--backuup=<>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<>][--force-local][--group=<>][--help][--ignore-failed-read][--new-volume-script=<Script>][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<>][--recursive-unlink][--remove-files][--rsh-command=<>][--same-owner][--suffix=<>][--totals][--use-compress-program=<>][--version][--volno-file=<>][...]
```
**参数**
- -A或--catenate 新增文件到已存在的备份文件。
- -b<区块数目>或--blocking-factor=<区块数目> 设置每笔记录的区块数目每个区块大小为12Bytes。
- -B或--read-full-records 读取数据时重设区块大小。
- -c或--create 建立新的备份文件。
- -C<目的目录>或--directory=<目的目录> 切换到指定的目录。
- -d或--diff或--compare 对比备份文件内和文件系统上的文件的差异。
- -f<备份文件>或--file=<备份文件> 指定备份文件。
- -F<Script文件>--info-script=<Script> Script
- -g或--listed-incremental 处理GNU格式的大量备份。
- -G或--incremental 处理旧的GNU格式的大量备份。
- -h或--dereference 不建立符号连接,直接复制该连接所指向的原始文件。
- -i或--ignore-zeros 忽略备份文件中的0 Byte区块也就是EOF。
- -k或--keep-old-files 解开备份文件时,不覆盖已有的文件。
- -K<文件>或--starting-file=<文件> 从指定的文件开始还原。
- -l或--one-file-system 复制的文件或目录存放的文件系统必须与tar指令执行时所处的文件系统相同否则不予复制。
- -L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量单位以1024 Bytes计算。
- -m或--modification-time 还原文件时,不变更文件的更改时间。
- -M或--multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
- -N<日期格式>或--newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
- -o或--old-archive或--portability 将资料写入备份文件时使用V7格式。
- -O或--stdout 把从备份文件里还原的文件输出到标准输出设备。
- -p或--same-permissions 用原来的文件权限还原文件。
- -P或--absolute-names 文件名使用绝对名称,不移除文件名称前的"/"号。
- -r或--append 新增文件到已存在的备份文件的结尾部分。
- -R或--block-number 列出每个信息在备份文件中的区块编号。
- -s或--same-order 还原文件的顺序和备份文件内的存放顺序相同。
- -S或--sparse 倘若一个文件内含大量的连续0字节则将此文件存成稀疏文件。
- -t或--list 列出备份文件的内容。
- -T<范本文件>或--files-from=<范本文件> 指定范本文件其内含有一个或多个范本样式让tar解开或建立符合设置条件的文件。
- -u或--update 仅置换较备份文件内的文件更新的文件。
- -U或--unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
- -v或--verbose 显示指令执行过程。
- -V<卷册名称>或--label=<卷册名称> 建立使用指定的卷册名称的备份文件。
- -w或--interactive 遭遇问题时先询问用户。
- -W或--verify 写入备份文件后,确认文件正确无误。
- -x或--extract或--get 从备份文件中还原文件。
- -X<范本文件>或--exclude-from=<范本文件> 指定范本文件其内含有一个或多个范本样式让ar排除符合设置条件的文件。
- -z或--gzip或--ungzip 通过gzip指令处理备份文件。
- -Z或--compress或--uncompress 通过compress指令处理备份文件。
- -<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
- --after-date=<日期时间> 此参数的效果和指定"-N"参数相同。
- --atime-preserve 不变更文件的存取时间。
- --backup=<备份方式>或--backup 移除文件前先进行备份。
- --checkpoint 读取备份文件时列出目录名称。
- --concatenate 此参数的效果和指定"-A"参数相同。
- --confirmation 此参数的效果和指定"-w"参数相同。
- --delete 从备份文件中删除指定的文件。
- --exclude=<范本样式> 排除符合范本样式的问家。
- --group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
- --help 在线帮助。
- --ignore-failed-read 忽略数据读取错误,不中断程序的执行。
- --new-volume-script=<Script文件> "-F"
- --newer-mtime 只保存更改过的文件。
- --no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
- --null 从null设备读取文件名称。
- --numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
- --owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
- --posix 将数据写入备份文件时使用POSIX格式。
- --preserve 此参数的效果和指定"-ps"参数相同。
- --preserve-order 此参数的效果和指定"-A"参数相同。
- --preserve-permissions 此参数的效果和指定"-p"参数相同。
- --record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
- --recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
- --remove-files 文件加入备份文件后,就将其删除。
- --rsh-command=<执行指令> 设置要在远端主机上执行的指令以取代rsh指令。
- --same-owner 尝试以相同的文件拥有者还原问家你。
- --suffix=<备份字尾字符串> 移除文件前先行备份。
- --totals 备份文件建立后,列出文件大小。
- --use-compress-program=<执行指令> 通过指定的指令处理备份文件。
- --version 显示版本信息。
- --volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。
### 实例
压缩文件 非打包
```
# touch a.c
# tar -czvf test.tar.gz a.c //压缩 a.c文件为test.tar.gz
a.c
```
列出压缩文件内容
```
# tar -tzvf test.tar.gz
-rw-r--r-- root/root 0 2010-05-24 16:51:59 a.c
```
解压文件
```
# tar -xzvf test.tar.gz a.c
```

View File

@ -1,234 +0,0 @@
# Linux 常用命令-磁盘管理
## cd
> **功能:切换目录。**
>
> cd 命令用于切换当前工作目录至 dirName(目录参数)。
>
> 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home 目录 (也就是刚 login 时所在的目录)。
### 语法
```
cd [dirName]
```
- dirName要切换的目标目录。
### 实例
跳到 /usr/bin/ :
```
cd /usr/bin
```
跳到自己的 home 目录 :
```
cd ~
```
跳到目前目录的上上两层 :
```
cd ../..
```
## pwd
> **功能:显示当前目录**
>
> pwd 命令用于显示工作目录。
>
> 执行 pwd 指令可立刻得知您目前所在的工作目录的绝对路径名称。
### 语法
```
pwd [--help][--version]
```
**参数说明:**
- --help 在线帮助。
- --version 显示版本信息。
### 实例
查看当前所在目录:
```
# pwd
/root/test #输出结果
```
## ls
> **功能:显示目录内容。**
>
> ls 命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
### 语法
```
ls [-alrtAFR] [name...]
```
**参数 **:
- -a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)
- -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
- -r 将文件以相反次序显示(原定依英文字母次序)
- -t 将文件依建立时间之先后次序列出
- -A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
- -F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
- -R 若目录下有文件,则以下之文件亦皆依序列出
### 实例
列出根目录(\)下的所有目录:
```
# ls /
bin dev lib media net root srv upload www
boot etc lib64 misc opt sbin sys usr
home lost+found mnt proc selinux tmp var
```
列出目前工作目录下所有名称是 s 开头的文件,越新的排越后面 :
```
ls -ltr s*
```
将 /bin 目录以下所有目录及文件详细资料列出 :
```
ls -lR /bin
```
列出目前工作目录下所有文件及目录;目录于名称后加 "/", 可执行档于名称后加 "*" :
```
ls -AF
```
## mkdir
> **功能:创建目录。**
>
> mkdir 命令用于建立名称为 dirName 之子目录。
### 语法
```
mkdir [-p] dirName
```
**参数说明**
- -p 确保目录名称存在,不存在的就建一个。
### 实例
在工作目录下,建立一个名为 AAA 的子目录 :
```
mkdir AAA
```
在工作目录下的 BBB 目录中,建立一个名为 Test 的子目录。 若 BBB 目录原本不存在,则建立一个。(注:本例若不加 -p且原本 BBB目录不存在则产生错误。
```
mkdir -p BBB/Test
```
## stat
> stat 命令用于显示文件/文件系统的详细信息。
### 语法
```
stat [文件或目录]
```
### 实例
查看 testfile 文件的inode内容内容可以用以下命令
```
# stat testfile #输入命令
File: `testfile'
Size: 102 Blocks: 8 IO Block: 4096 regular file
Device: 807h/2055d Inode: 1265161 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-08-13 14:07:20.000000000 +0800
Modify: 2014-08-13 14:07:07.000000000 +0800
Change: 2014-08-13 14:07:07.000000000 +0800
```
## mount
> **功能:挂载文件到一个虚拟盘或虚拟文件夹中。**
>
> mount 命令是经常会使用到的命令,它用于挂载 Linux 系统外的文件。
### 语法
```
mount [-hV]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
```
**参数说明:**
- -V显示程序版本
- -h显示辅助讯息
- -v显示较讯息通常和 -f 用来除错。
- -a将 /etc/fstab 中定义的所有档案系统挂上。
- -F这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。
- -f通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
- -n一般而言mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
- -s-r等于 -o ro
- -w等于 -o rw
- -L将含有特定标签的硬盘分割挂上。
- -U将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。
- -t指定档案系统的型态通常不必指定。mount 会自动选择正确的型态。
- -o async打开非同步模式所有的档案读写动作都会用非同步模式执行。
- -o sync在同步模式下执行。
- -o atime、-o noatime当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。
- -o auto、-o noauto打开/关闭自动挂上模式。
- -o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.
- -o dev、-o nodev-o exec、-o noexec允许执行档被执行。
- -o suid、-o nosuid
- 允许执行档在 root 权限下执行。
- -o user、-o nouser使用者可以执行 mount/umount 的动作。
- -o remount将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统现在用可读写的模式重新挂上。
- -o ro用唯读模式挂上。
- -o rw用可读写模式挂上。
- -o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。
### 实例
将 /dev/hda1 挂在 /mnt 之下。
```
#mount /dev/hda1 /mnt
```
将 /dev/hda1 用唯读模式挂在 /mnt 之下。
```
#mount -o ro /dev/hda1 /mnt
```
将 /tmp/image.iso 这个光碟的 image 档使用 loop 模式挂在 /mnt/cdrom之下。用这种方法可以将一般网络上可以找到的 Linux 光 碟 ISO 档在不烧录成光碟的情况下检视其内容。
```
#mount -o loop /tmp/image.iso /mnt/cdrom
```

View File

@ -1,375 +0,0 @@
# Linux 常用命令-文件目录
## chmod
Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用。
**使用权限** : 所有使用者
### 语法
```
chmod [-cfvR] [--help] [--version] mode file...
```
**参数说明**
mode : 权限设定字串,格式如下 :
```
[ugoa...][[+-=][rwxX]...][,...]
```
其中:
- u 表示该文件的拥有者g 表示与该文件的拥有者属于同一个群体(group)者o 表示其他以外的人a 表示这三者皆是。
- \+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取w 表示可写入x 表示可执行X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:
- -c : 若该文件权限确实已经更改,才显示其更改动作
- -f : 若该文件权限无法被更改也不要显示错误讯息
- -v : 显示权限变更的详细资料
- -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
- --help : 显示辅助说明
- --version : 显示版本
### 实例
将文件 file1.txt 设为所有人皆可读取 :
```
chmod ugo+r file1.txt
```
将文件 file1.txt 设为所有人皆可读取 :
```
chmod a+r file1.txt
```
将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
```
chmod ug+w,o-w file1.txt file2.txt
```
将 ex1.py 设定为只有该文件拥有者可以执行 :
```
chmod u+x ex1.py
```
将目前目录下的所有文件与子目录皆设为任何人可读取 :
```
chmod -R a+r *
```
此外chmod也可以用数字来表示权限如 :
```
chmod 777 file
```
语法为:
```
chmod abc file
```
其中a,b,c各为一个数字分别表示User、Group、及Other的权限。
r=4w=2x=1
- 若要rwx属性则4+2+1=7
- 若要rw-属性则4+2=6
- 若要r-x属性则4+1=5。
```
chmod a=rwx file
```
```
chmod 777 file
```
效果相同
```
chmod ug=rwx,o=x file
```
```
chmod 771 file
```
效果相同
若用chmod 4755 filename可使此程序具有root的权限
## more
more 命令类似 cat 不过会以一页一页的形式显示更方便使用者逐页阅读而最基本的指令就是按空白键space就往下一页显示按 b 键就会往回back一页显示而且还有搜寻字串的功能与 vi 相似),使用中的说明文件,请按 h 。
### 语法
```
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
```
**参数**
- -num 一次显示的行数
- -d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '哔' 声
- -l 取消遇见特殊字元 ^L送纸字元时会暂停的功能
- -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
- -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
- -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
- -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
- -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
- +/pattern 在每个文档显示前搜寻该字串pattern然后从该字串之后开始显示
- +num 从第 num 行开始显示
- fileNames 欲显示内容的文档,可为复数个数
### 实例
逐页显示 testfile 文档内容,如有连续两行以上空白行则以一行空白行显示。
```
more -s testfile
```
从第 20 行开始显示 testfile 之文档内容。
```
more +20 testfile
```
## less
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
### 语法
```
less [参数] 文件
```
**参数说明**
- -b <缓冲区大小> 设置缓冲区的大小
- -e 当文件显示结束后,自动离开
- -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
- -g 只标志最后搜索的关键词
- -i 忽略搜索时的大小写
- -m 显示类似more命令的百分比
- -N 显示每行的行号
- -o <文件名> 将less 输出的内容在指定文件中保存起来
- -Q 不使用警告音
- -s 显示连续空行为一行
- -S 行过长时间将超出部分舍弃
- -x <数字> 将"tab"键显示为规定的数字空格
- /字符串:向下搜索"字符串"的功能
- ?字符串:向上搜索"字符串"的功能
- n重复前一个搜索与 / 或 ? 有关)
- N反向重复前一个搜索与 / 或 ? 有关)
- b 向后翻一页
- d 向后翻半页
- h 显示帮助界面
- Q 退出less 命令
- u 向前滚动半页
- y 向前滚动一行
- 空格键 滚动一行
- 回车键 滚动一页
- [pagedown] 向下翻动一页
- [pageup] 向上翻动一页
### 实例
1、查看文件
```
less log2013.log
```
2、ps查看进程信息并通过less分页显示
```
ps -ef |less
```
3、查看命令历史使用记录并通过less分页显示
```
[root@localhost test]# history | less
22 scp -r tomcat6.0.32 root@192.168.120.203:/opt/soft
23 cd ..
24 scp -r web root@192.168.120.203:/opt/
25 cd soft
26 ls
……省略……
```
4、浏览多个文件
```
less log2013.log log2014.log
```
说明:
输入 n后切换到 log2014.log
输入 p 后切换到log2013.log
## cp
> cp 命令主要用于复制文件或目录。
### 语法
```
cp [options] source dest
```
```
cp [options] source... directory
```
**参数说明**
- -a此选项通常在复制目录时使用它保留链接、文件属性并复制目录下的所有内容。其作用等于dpR参数组合。
- -d复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
- -f覆盖已经存在的目标文件而不给出提示。
- -i与-f选项相反在覆盖目标文件之前给出提示要求用户确认是否覆盖回答"y"时目标文件将被覆盖。
- -p除复制文件的内容外还把修改时间和访问权限也复制到新文件中。
- -r若给出的源文件是一个目录文件此时将复制该目录下所有的子目录和文件。
- -l不复制文件只是生成链接文件。
### 实例
使用指令"cp"将当前目录"test/"下的所有文件复制到新目录"newtest"下,输入如下命令:
```
$ cp r test/ newtest
```
注意:用户使用该指令复制目录时,必须使用参数"-r"或者"-R"。
## mv
> mv 命令用来为文件或目录改名、或将文件或目录移入其它位置。
### 语法
```
mv [options] source dest
mv [options] source... directory
```
**参数说明**
- -i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
- -f: 在mv操作要覆盖某已有的目标文件时不给任何指示;
mv参数设置与运行结果
| 命令格式 | 运行结果 |
| ---------- | ------------------------------ |
| mv 文件名 文件名 | 将源文件名改为目标文件名 |
| mv 文件名 目录名 | 将文件移动到目标目录 |
| mv 目录名 目录名 | 目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名 |
| mv 目录名 文件名 | 出错 |
### 实例
将文件 aaa 更名为 bbb :
```
mv aaa bbb
```
将info目录放入logs目录中。注意如果logs目录不存在则该命令将info改名为logs。
```
mv info/ logs
```
再如将/usr/student下的所有文件和目录移到当前目录下命令行为
```
$ mv /usr/student/*
```
## rm
rm 命令用于删除一个文件或者目录。
### 语法
```
rm [options] name...
```
**参数**
- -i 删除前逐一询问确认。
- -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
- -r 将目录及以下之档案亦逐一删除。
### 实例
删除文件可以直接使用rm命令若删除目录则必须配合选项"-r",例如:
```
# rm test.txt
rm是否删除 一般文件 "test.txt"? y
# rm homework
rm: 无法删除目录"homework": 是一个目录
# rm -r homework
rm是否删除 目录 "homework"? y
```
删除当前目录下的所有文件及目录,命令行为:
```
rm -r *
```
文件一旦通过rm命令删除则无法恢复所以必须格外小心地使用该命令。
## mkdir
mkdir 命令用于建立名称为 dirName 之子目录。
### 语法
```
mkdir [-p] dirName
```
**参数说明**
- -p 确保目录名称存在,不存在的就建一个。
### 实例
在工作目录下,建立一个名为 AAA 的子目录 :
```
mkdir AAA
```
在工作目录下的 BBB 目录中,建立一个名为 Test 的子目录。 若 BBB 目录原本不存在,则建立一个。(注:本例若不加 -p且原本 BBB目录不存在则产生错误。
```
mkdir -p BBB/Test
```

View File

@ -1,480 +0,0 @@
## ifconfig
> ifconfig 命令用于显示或设置网络设备。
>
> ifconfig 可设置网络设备的状态,或是显示目前的设置。
### 语法
```
ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]
```
**参数说明**
- add<地址> 设置网络设备IPv6的IP地址。
- del<地址> 删除网络设备IPv6的IP地址。
- down 关闭指定的网络设备。
- <hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
- io_addr<I/O地址> 设置网络设备的I/O地址。
- irq<IRQ地址> 设置网络设备的IRQ。
- media<网络媒介类型> 设置网络设备的媒介类型。
- mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。
- metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。
- mtu<字节> 设置网络设备的MTU。
- netmask<子网掩码> 设置网络设备的子网掩码。
- tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
- up 启动指定的网络设备。
- -broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。
- -pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。
- -promisc 关闭或启动指定网络设备的promiscuous模式。
- [IP地址] 指定网络设备的IP地址。
- [网络设备] 指定网络设备的名称。
### 实例
显示网络设备信息
```
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:172220 errors:0 dropped:0 overruns:0 frame:0
TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB)
Interrupt:185 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2022 errors:0 dropped:0 overruns:0 frame:0
TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2459063 (2.3 MiB) TX bytes:2459063 (2.3 MiB)
```
启动关闭指定网卡
```
# ifconfig eth0 down
# ifconfig eth0 up
```
为网卡配置和删除IPv6地址
```
# ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡诶之IPv6地址
# ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址
```
用ifconfig修改MAC地址
```
# ifconfig eth0 down //关闭网卡
# ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
# ifconfig eth0 up //启动网卡
# ifconfig eth1 hw ether 00:1D:1C:1D:1E //关闭网卡并修改MAC地址
# ifconfig eth1 up //启动网卡
```
配置IP地址
```
# ifconfig eth0 192.168.1.56
//给eth0网卡配置IP地址
# ifconfig eth0 192.168.1.56 netmask 255.255.255.0
// 给eth0网卡配置IP地址,并加上子掩码
# ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255
// 给eth0网卡配置IP地址,加上子掩码,加上个广播地址
```
启用和关闭ARP协议
```
# ifconfig eth0 arp //开启
# ifconfig eth0 -arp //关闭
```
设置最大传输单元
```
# ifconfig eth0 mtu 1500
//设置能通过的最大数据包大小为 1500 bytes
```
## ping
> ping 命令用于检测主机。
>
> 执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
### 语法
```
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]
```
**参数说明**
- -d 使用Socket的SO_DEBUG功能。
- -c<完成次数> 设置完成要求回应的次数。
- -f 极限检测。
- -i<间隔秒数> 指定收发信息的间隔时间。
- -I<网络界面> 使用指定的网络界面送出数据包。
- -l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
- -n 只输出数值。
- -p<范本样式> 设置填满数据包的范本样式。
- -q 不显示指令执行过程,开头和结尾的相关信息除外。
- -r 忽略普通的Routing Table直接将数据包送到远端主机上。
- -R 记录路由过程。
- -s<数据包大小> 设置数据包的大小。
- -t<存活数值> 设置存活数值TTL的大小。
- -v 详细显示指令的执行过程。
### 实例
检测是否与主机连通
```
# ping www.w3cschool.cc //ping主机
PING aries.m.alikunlun.com (114.80.174.110) 56(84) bytes of data.
64 bytes from 114.80.174.110: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from 114.80.174.110: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 114.80.174.110: icmp_seq=3 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=4 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=5 ttl=64 time=0.028 ms
64 bytes from 114.80.174.110: icmp_seq=6 ttl=64 time=0.028 ms
64 bytes from 114.80.174.110: icmp_seq=7 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=8 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=9 ttl=64 time=0.036 ms
64 bytes from 114.80.174.110: icmp_seq=10 ttl=64 time=0.041 ms
--- aries.m.alikunlun.com ping statistics ---
10 packets transmitted, 30 received, 0% packet loss, time 29246ms
rtt min/avg/max/mdev = 0.021/0.035/0.078/0.011 ms
//需要手动终止Ctrl+C
```
指定接收包的次数
```
# ping -c 2 www.w3cschool.cc
PING aries.m.alikunlun.com (114.80.174.120) 56(84) bytes of data.
64 bytes from 114.80.174.120: icmp_seq=1 ttl=54 time=6.18 ms
64 bytes from 114.80.174.120: icmp_seq=2 ttl=54 time=15.4 ms
--- aries.m.alikunlun.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1016ms
rtt min/avg/max/mdev = 6.185/10.824/15.464/4.640 ms
//收到两次包后,自动退出
```
多参数使用
```
# ping -i 3 -s 1024 -t 255 g.cn //ping主机
PING g.cn (203.208.37.104) 1024(1052) bytes of data.
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=0 ttl=243 time=62.5 ms
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=1 ttl=243 time=63.9 ms
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=2 ttl=243 time=61.9 ms
--- g.cn ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 6001ms
rtt min/avg/max/mdev = 61.959/62.843/63.984/0.894 ms, pipe 2
[root@linux ~]#
//-i 3 发送周期为 3秒 -s 设置发送包的大小 -t 设置TTL值为 255
```
## netstat
> netstat 命令用于显示网络状态。
>
> 利用 netstat 指令可让你得知整个Linux系统的网络情况。
### 语法
```
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
```
**参数说明**
- -a或--all 显示所有连线中的Socket。
- -A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。
- -c或--continuous 持续列出网络状态。
- -C或--cache 显示路由器配置的快取信息。
- -e或--extend 显示网络其他相关信息。
- -F或--fib 显示FIB。
- -g或--groups 显示多重广播功能群组组员名单。
- -h或--help 在线帮助。
- -i或--interfaces 显示网络界面信息表单。
- -l或--listening 显示监控中的服务器的Socket。
- -M或--masquerade 显示伪装的网络连线。
- -n或--numeric 直接使用IP地址而不通过域名服务器。
- -N或--netlink或--symbolic 显示网络硬件外围设备的符号连接名称。
- -o或--timers 显示计时器。
- -p或--programs 显示正在使用Socket的程序识别码和程序名称。
- -r或--route 显示Routing Table。
- -s或--statistice 显示网络工作信息统计表。
- -t或--tcp 显示TCP传输协议的连线状况。
- -u或--udp 显示UDP传输协议的连线状况。
- -v或--verbose 显示指令执行过程。
- -V或--version 显示版本信息。
- -w或--raw 显示RAW传输协议的连线状况。
- -x或--unix 此参数的效果和指定"-A unix"参数相同。
- --ip或--inet 此参数的效果和指定"-A inet"参数相同。
### 实例
显示详细的网络状况
```
# netstat -a
```
显示当前户籍UDP连接状况
```
# netstat -nu
```
显示UDP端口号的使用情况
```
# netstat -apu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 *:32768 *:* -
udp 0 0 *:nfs *:* -
udp 0 0 *:641 *:* 3006/rpc.statd
udp 0 0 192.168.0.3:netbios-ns *:* 3537/nmbd
udp 0 0 *:netbios-ns *:* 3537/nmbd
udp 0 0 192.168.0.3:netbios-dgm *:* 3537/nmbd
udp 0 0 *:netbios-dgm *:* 3537/nmbd
udp 0 0 *:tftp *:* 3346/xinetd
udp 0 0 *:999 *:* 3366/rpc.rquotad
udp 0 0 *:sunrpc *:* 2986/portmap
udp 0 0 *:ipp *:* 6938/cupsd
udp 0 0 *:1022 *:* 3392/rpc.mountd
udp 0 0 *:638 *:* 3006/rpc.statd
```
显示网卡列表
```
# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 181864 0 0 0 141278 0 0 0 BMRU
lo 16436 0 3362 0 0 0 3362 0 0 0 LRU
```
显示组播组的关系
```
# netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 ALL-SYSTEMS.MCAST.NET
eth0 1 ALL-SYSTEMS.MCAST.NET
lo 1 ff02::1
eth0 1 ff02::1:ff0a:b0c
eth0 1 ff02::1
```
显示网络统计信息
```
# netstat -s
Ip:
184695 total packets received
0 forwarded
0 incoming packets discarded
184687 incoming packets delivered
143917 requests sent out
32 outgoing packets dropped
30 dropped because of missing route
Icmp:
676 ICMP messages received
5 input ICMP message failed.
ICMP input histogram:
destination unreachable: 44
echo requests: 287
echo replies: 345
304 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 17
echo replies: 287
Tcp:
473 active connections openings
28 passive connection openings
4 failed connection attempts
11 connection resets received
1 connections established
178253 segments received
137936 segments send out
29 segments retransmited
0 bad segments received.
336 resets sent
Udp:
5714 packets received
8 packets to unknown port received.
0 packet receive errors
5419 packets sent
TcpExt:
1 resets received for embryonic SYN_RECV sockets
ArpFilter: 0
12 TCP sockets finished time wait in fast timer
572 delayed acks sent
3 delayed acks further delayed because of locked socket
13766 packets directly queued to recvmsg prequeue.
1101482 packets directly received from backlog
19599861 packets directly received from prequeue
46860 packets header predicted
14541 packets header predicted and directly queued to user
TCPPureAcks: 12259
TCPHPAcks: 9119
TCPRenoRecovery: 0
TCPSackRecovery: 0
TCPSACKReneging: 0
TCPFACKReorder: 0
TCPSACKReorder: 0
TCPRenoReorder: 0
TCPTSReorder: 0
TCPFullUndo: 0
TCPPartialUndo: 0
TCPDSACKUndo: 0
TCPLossUndo: 0
TCPLoss: 0
TCPLostRetransmit: 0
TCPRenoFailures: 0
TCPSackFailures: 0
TCPLossFailures: 0
TCPFastRetrans: 0
TCPForwardRetrans: 0
TCPSlowStartRetrans: 0
TCPTimeouts: 29
TCPRenoRecoveryFail: 0
TCPSackRecoveryFail: 0
TCPSchedulerFailed: 0
TCPRcvCollapsed: 0
TCPDSACKOldSent: 0
TCPDSACKOfoSent: 0
TCPDSACKRecv: 0
TCPDSACKOfoRecv: 0
TCPAbortOnSyn: 0
TCPAbortOnData: 1
TCPAbortOnClose: 0
TCPAbortOnMemory: 0
TCPAbortOnTimeout: 3
TCPAbortOnLinger: 0
TCPAbortFailed: 3
TCPMemoryPressures: 0
```
显示监听的套接口
```
# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:32769 *:* LISTEN
tcp 0 0 *:nfs *:* LISTEN
tcp 0 0 *:644 *:* LISTEN
tcp 0 0 *:1002 *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 vm-dev:ipp *:* LISTEN
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 *:601 *:* LISTEN
tcp 0 0 *:microsoft-ds *:* LISTEN
tcp 0 0 *:http *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:https *:* LISTEN
udp 0 0 *:32768 *:*
udp 0 0 *:nfs *:*
udp 0 0 *:641 *:*
udp 0 0 192.168.0.3:netbios-ns *:*
udp 0 0 *:netbios-ns *:*
udp 0 0 192.168.0.3:netbios-dgm *:*
udp 0 0 *:netbios-dgm *:*
udp 0 0 *:tftp *:*
udp 0 0 *:999 *:*
udp 0 0 *:sunrpc *:*
udp 0 0 *:ipp *:*
udp 0 0 *:1022 *:*
udp 0 0 *:638 *:*
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 10621 @/tmp/fam-root-
unix 2 [ ACC ] STREAM LISTENING 7096 /var/run/acpid.socket
unix 2 [ ACC ] STREAM LISTENING 9792 /tmp/.gdm_socket
unix 2 [ ACC ] STREAM LISTENING 9927 /tmp/.X11-unix/X0
unix 2 [ ACC ] STREAM LISTENING 10489 /tmp/ssh-lbUnUf4552/agent.4552
unix 2 [ ACC ] STREAM LISTENING 10558 /tmp/ksocket-root/kdeinit__0
unix 2 [ ACC ] STREAM LISTENING 10560 /tmp/ksocket-root/kdeinit-:0
unix 2 [ ACC ] STREAM LISTENING 10570 /tmp/.ICE-unix/dcop4664-1270815442
unix 2 [ ACC ] STREAM LISTENING 10843 /tmp/.ICE-unix/4735
unix 2 [ ACC ] STREAM LISTENING 10591 /tmp/ksocket-root/klauncherah3arc.slave-socket
unix 2 [ ACC ] STREAM LISTENING 7763 /var/run/iiim/.iiimp-unix/9010
unix 2 [ ACC ] STREAM LISTENING 11047 /tmp/orbit-root/linc-1291-0-1e92c8082411
unix 2 [ ACC ] STREAM LISTENING 11053 /tmp/orbit-root/linc-128e-0-dc070659cbb3
unix 2 [ ACC ] STREAM LISTENING 8020 /var/run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 58927 /tmp/mcop-root/vm-dev-2c28-4beba75f
unix 2 [ ACC ] STREAM LISTENING 7860 /tmp/.font-unix/fs7100
unix 2 [ ACC ] STREAM LISTENING 7658 /dev/gpmctl
unix 2 [ ACC ] STREAM LISTENING 10498 @/tmp/dbus-s2MLJGO5Ci
```
## telnet
> telnet 命令用于远端登入。
>
> 执行telnet指令开启终端机阶段作业并登入远端主机。
### 语法
```
telnet [-8acdEfFKLrx][-b<主机别名>][-e<脱离字符>][-k<域名>][-l<用户名称>][-n<记录文件>][-S<服务类型>][-X<认证形态>][主机名称或IP地址<通信端口>]
```
**参数说明**
- -8 允许使用8位字符资料包括输入与输出。
- -a 尝试自动登入远端系统。
- -b<主机别名> 使用别名指定远端主机名称。
- -c 不读取用户专属目录里的.telnetrc文件。
- -d 启动排错模式。
- -e<脱离字符> 设置脱离字符。
- -E 滤除脱离字符。
- -f 此参数的效果和指定"-F"参数相同。
- -F 使用Kerberos V5认证时加上此参数可把本地主机的认证数据上传到远端主机。
- -k<域名> 使用Kerberos认证时加上此参数让远端主机采用指定的领域名而非该主机的域名。
- -K 不自动登入远端主机。
- -l<用户名称> 指定要登入远端主机的用户名称。
- -L 允许输出8位字符资料。
- -n<记录文件> 指定文件记录相关信息。
- -r 使用类似rlogin指令的用户界面。
- -S<服务类型> 设置telnet连线所需的IP TOS信息。
- -x 假设主机有支持数据加密的功能,就使用它。
- -X<认证形态> 关闭指定的认证形态。
### 实例
登录远程主机
```
# telnet 192.168.0.5
//登录IP为 192.168.0.5 的远程主机
```

View File

@ -0,0 +1,9 @@
# linux 常用命令-文件目录管理
* [linux 常用命令-文件内容查看](文件内容查看.md)
* [linux 常用命令-文件压缩与解压](文件压缩与解压.md)
* [linux 常用命令-文件处理](文件处理.md)
* [linux 常用命令-文件编辑](文件编辑.md)
* [linux 常用命令-文件权限属性设置](文件权限属性设置.md)
* [linux 常用命令-文件查找和比较](文件查找和比较.md)
* [linux 常用命令-目录基本操作](目录基本操作.md)

View File

@ -0,0 +1,366 @@
---
title: linux 常用命令-文件内容查看
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-文件内容查看](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E6%9F%A5%E7%9C%8B)
- [cut](#cut)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [指定字段的字符或者字节范围](#%E6%8C%87%E5%AE%9A%E5%AD%97%E6%AE%B5%E7%9A%84%E5%AD%97%E7%AC%A6%E6%88%96%E8%80%85%E5%AD%97%E8%8A%82%E8%8C%83%E5%9B%B4)
- [head](#head)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [tail](#tail)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [more](#more)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [less](#less)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-文件内容查看
## cut
连接文件并打印到标准输出设备上
### 补充说明
**cut命令** 用来显示行中的指定部分删除文件中指定字段。cut经常用来显示文件的内容类似于下的type命令。
说明该命令有两项功能其一是用来显示文件的内容它依次读取由参数file所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如`cut fl f2 > f3`将把文件fl和几的内容合并起来然后通过输出重定向符“>”的作用将它们放入文件f3中。
当文件较大时文本在屏幕上迅速闪过滚屏用户往往看不清所显示的内容。因此一般用more等命令分屏显示。为了控制滚屏可以按Ctrl+S键停止滚屏按Ctrl+Q键可以恢复滚屏。按Ctrl+C中断键可以终止该命令的执行并且返回Shell提示符状态。
### 语法
```
cut(选项)(参数)
```
### 选项
```
-b仅显示行中指定直接范围的内容
-c仅显示行中指定范围的字符
-d指定字段的分隔符默认的字段分隔符为“TAB”
-f显示指定字段的内容
-n与“-b”选项连用不分割多字节字符
--complement补足被选择的字节、字符或字段
--out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
--help显示指令的帮助信息
--version显示指令的版本信息。
```
### 参数
文件:指定要进行内容过滤的文件。
### 实例
例如有一个学生报表信息包含No、Name、Mark、Percent
```
[root@localhost text]# cat test.txt
No Name Mark Percent
01 tom 69 91
02 jack 71 87
03 alex 68 98
```
使用 **-f** 选项提取指定字段:
```
[root@localhost text]# cut -f 1 test.txt
No
01
02
03
```
```
[root@localhost text]# cut -f2,3 test.txt
Name Mark
tom 69
jack 71
alex 68
```
**--complement** 选项提取指定字段之外的列(打印除了第二列之外的列):
```
[root@localhost text]# cut -f2 --complement test.txt
No Mark Percent
01 69 91
02 71 87
03 68 98
```
使用 **-d** 选项指定字段分隔符:
```
[root@localhost text]# cat test2.txt
No;Name;Mark;Percent
01;tom;69;91
02;jack;71;87
03;alex;68;98
```
```
[root@localhost text]# cut -f2 -d";" test2.txt
Name
tom
jack
alex
```
### 指定字段的字符或者字节范围
cut命令可以将一串字符作为列来显示字符字段的记法
* **N-** 从第N个字节、字符、字段到结尾
* **N-M** 从第N个字节、字符、字段到第M个包括M在内字节、字符、字段
* **-M** 从第1个字节、字符、字段到第M个包括M在内字节、字符、字段。
上面是记法,结合下面选项将摸个范围的字节、字符指定为字段:
* **-b** 表示字节;
* **-c** 表示字符;
* **-f** 表示定义字段。
**示例**
```
[root@localhost text]# cat test.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
```
打印第1个到第3个字符
```
[root@localhost text]# cut -c1-3 test.txt
abc
abc
abc
abc
abc
```
打印前2个字符
```
[root@localhost text]# cut -c-2 test.txt
ab
ab
ab
ab
ab
```
打印从第5个字符开始到结尾
```
[root@localhost text]# cut -c5- test.txt
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
```
## head
在屏幕上显示指定文件的开头若干行
### 补充说明
**head命令** 用于显示文件的开头的内容。在默认情况下head命令显示文件的头10行内容。
### 语法
```
head(选项)(参数)
```
### 选项
```
-n<数字>:指定显示头部内容的行数;
-c<字符数>:指定显示头部内容的字符数;
-v总是显示文件名的头信息
-q不显示文件名的头信息。
```
### 参数
文件列表:指定显示头部内容的文件列表。
## tail
在屏幕上显示指定文件的末尾若干行
### 补充说明
**tail命令** 用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。
注意如果表示字节或行数的N值之前有一个”+”号则从文件开头的第N项开始显示而不是显示文件的最后N项。N值后面可以有后缀b表示512k表示1024m表示1 048576(1M)。
### 语法
```
tail(选项)(参数)
```
### 选项
```
--retry即是在tail命令启动时文件不可访问或者文件稍后变得不可访问都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用
-c<N>或——bytes=<N>输出文件尾部的NN为整数个字节内容
-f<name/descriptor>或;--follow<nameldescript>显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效
-F与选项“-follow=name”和“--retry"连用时功能相同;
-n<N>或——line=<N>输出文件的尾部NN位数字行内容。
--pid=<进程号>:与“-f”选项连用当指定的进程号的进程终止后自动退出tail命令
-q或——quiet或——silent当有多个文件参数时不输出各个文件名
-s<秒数>或——sleep-interal=<秒数>:与“-f”选项连用指定监视文件变化时间隔的秒数
-v或——verbose当有多个文件参数时总是输出各个文件名
--help显示指令的帮助信息
--version显示指令的版本信息。
```
### 参数
文件列表:指定要显示尾部内容的文件列表。
### 实例
```
tail file 显示文件file的最后10行
tail -n +20 file 显示文件file的内容从第20行至文件末尾
tail -c 10 file 显示文件file的最后10个字符
```
## more
显示文件内容,每次显示一屏
### 补充说明
**more命令** 是一个基于vi编辑器文本过滤器它以全屏幕的方式按页显示文本文件的内容支持vi中的关键字定位操作。more名单中内置了若干快捷键常用的有H获得帮助信息Enter向下翻滚一行空格向下滚动一屏Q退出命令
该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:--More--XX%)可以用下列不同的方法对提示做出回答:
* 按Space键显示文本的下一屏内容。
* 按Enier键只显示文本的下一行内容。
* 按斜线符`|`:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
* 按H键显示帮助屏该屏上有相关的帮助信息。
* 按B键显示上一屏内容。
* 按Q键退出rnore命令。
### 语法
```
more(语法)(参数)
```
### 选项
```
-<数字>:指定每屏显示的行数;
-d显示“[press space to continue,'q' to quit.]”和“[Press 'h' for instructions]”;
-c不进行滚屏操作。每次刷新这个屏幕
-s将多个空行压缩成一行显示
-u禁止下划线
+<数字>:从指定数字的行开始显示。
```
### 参数
文件:指定分页显示内容的文件。
### 实例
显示文件file的内容但在显示之前先清屏并且在屏幕的最下方显示完核的百分比。
```
more -dc file
```
显示文件file的内容每10行显示一次而且在显示之前先清屏。
```
more -c -10 file
```
## less
分屏上下翻页浏览文件内容
### 补充说明
**less命令** 的作用与more十分相似都可以用来浏览文字档案的内容不同的是less命令允许用户向前或向后浏览文件而more命令只能向前浏览。用less命令显示文件时用PageUp键向上翻页用PageDown键向下翻页。要退出less程序应按Q键。
### 语法
```
less(选项)(参数)
```
### 选项
```
-e文件内容显示完毕后自动退出
-f强制显示文件
-g不加亮显示搜索到的所有关键词仅显示当前显示的关键字以提高显示速度
-l搜索时忽略大小写的差异
-N每一行行首显示行号
-s将连续多个空行压缩成一行显示
-S在单行显示较长的内容而不换行显示
-x<数字>将TAB字符显示为指定个数的空格字符。
```
### 参数
文件:指定要分屏显示内容的文件。
## 实例
```bash
sudo less /var/log/shadowsocks.log
```

View File

@ -0,0 +1,530 @@
---
title: linux 常用命令-文件压缩与解压
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-文件压缩与解压](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E6%96%87%E4%BB%B6%E5%8E%8B%E7%BC%A9%E4%B8%8E%E8%A7%A3%E5%8E%8B)
- [tar](#tar)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [zip格式](#zip%E6%A0%BC%E5%BC%8F)
- [tar格式该格式仅仅打包不压缩](#tar%E6%A0%BC%E5%BC%8F%EF%BC%88%E8%AF%A5%E6%A0%BC%E5%BC%8F%E4%BB%85%E4%BB%85%E6%89%93%E5%8C%85%EF%BC%8C%E4%B8%8D%E5%8E%8B%E7%BC%A9%EF%BC%89)
- [tar.gz格式](#targz%E6%A0%BC%E5%BC%8F)
- [tar.bz2格式](#tarbz2%E6%A0%BC%E5%BC%8F)
- [tar.xz格式](#tarxz%E6%A0%BC%E5%BC%8F)
- [tar.Z格式已过时](#tarz%E6%A0%BC%E5%BC%8F%EF%BC%88%E5%B7%B2%E8%BF%87%E6%97%B6%EF%BC%89)
- [jar格式](#jar%E6%A0%BC%E5%BC%8F)
- [7z格式](#7z%E6%A0%BC%E5%BC%8F)
- [其它例子](#%E5%85%B6%E5%AE%83%E4%BE%8B%E5%AD%90)
- [zip](#zip)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [问题解决](#%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3)
- [unzip](#unzip)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [gzip](#gzip)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-文件压缩与解压
## tar
Linux下的归档使用工具用来打包和备份。
### 补充说明
**tar命令** 可以为linux的文件和目录创建档案。利用tar可以为某一特定文件创建档案备份文件也可以在档案中改变文件或者向档案中加入新的文件。tar最初被用来在磁带上创建档案现在用户可以在任何设备上创建档案。利用tar命令可以把一大堆的文件和目录全部打包成一个文件这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢这源于Linux中很多压缩程序只能针对一个文件进行压缩这样当你想要压缩一大堆文件时你得先将这一大堆文件先打成一个包tar命令然后再用压缩程序进行压缩gzip bzip2命令
### 语法
```
tar(选项)(参数)
```
### 选项
```
-A或--catenate新增文件到以存在的备份文件
-B设置区块大小
-c或--create建立新的备份文件
-C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
-d记录文件的差别
-x或--extract或--get从备份文件中还原文件
-t或--list列出备份文件的内容
-z或--gzip或--ungzip通过gzip指令处理备份文件
-Z或--compress或--uncompress通过compress指令处理备份文件
-f<备份文件>或--file=<备份文件>:指定备份文件;
-v或--verbose显示指令执行过程
-r添加文件到已经压缩的文件
-u添加改变了和现有的文件到已经存在的压缩文件
-j支持bzip2解压文件
-v显示操作过程
-l文件系统边界设置
-k保留原有文件不覆盖
-m保留文件不被覆盖
-w确认压缩文件的正确性
-p或--same-permissions用原来的文件权限还原文件
-P或--absolute-names文件名使用绝对名称不移除文件名称前的“/”号;
-N <日期格式> 或 --newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里;
--exclude=<范本样式>:排除符合范本样式的文件。
```
### 参数
文件或目录:指定要打包的文件或目录列表。
### 实例
```bash
- z有gzip属性的
- j有bz2属性的
- Z有compress属性的
- v显示所有过程
- O将文件解开到标准输出
```
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
```bash
tar -cf all.tar *.jpg
# 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包-f指定包的文件名。
tar -rf all.tar *.gif
# 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
tar -uf all.tar logo.gif
# 这条命令是更新原来tar包all.tar中logo.gif文件-u是表示更新文件的意思。
tar -tf all.tar
# 这条命令是列出all.tar包中所有文件-t是列出文件的意思
```
```bash
tar -cfv archive.tar foo bar # 从文件foo和bar创建archive.tar。
tar -tvf archive.tar # 详细列出archive.tar中的所有文件。
tar -xf archive.tar # 从archive.tar提取所有文件。
```
#### zip格式
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
注:-r参数代表递归
#### tar格式该格式仅仅打包不压缩
打包tar -cvf [目标文件名].tar [原文件名/目录名]
解包tar -xvf [原文件名].tar
c参数代表create创建x参数代表extract解包v参数代表verbose详细信息f参数代表filename文件名所以f后必须接文件名。
#### tar.gz格式
方式一利用前面已经打包好的tar文件直接用压缩命令。
压缩gzip [原文件名].tar
解压gunzip [原文件名].tar.gz
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -zcvf [目标文件名].tar.gz [原文件名/目录名]
解压并解包: tar -zxvf [原文件名].tar.gz
z代表用gzip算法来压缩/解压。
#### tar.bz2格式
方式一利用已经打包好的tar文件直接执行压缩命令
压缩bzip2 [原文件名].tar
解压bunzip2 [原文件名].tar.bz2
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -jcvf [目标文件名].tar.bz2 [原文件名/目录名]
解压并解包: tar -jxvf [原文件名].tar.bz2
小写j代表用bzip2算法来压缩/解压。
#### tar.xz格式
方式一利用已经打包好的tar文件直接用压缩命令
压缩xz [原文件名].tar
解压unxz [原文件名].tar.xz
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Jcvf [目标文件名].tar.xz [原文件名/目录名]
解压并解包: tar -Jxvf [原文件名].tar.xz
大写J代表用xz算法来压缩/解压。
#### tar.Z格式已过时
方式一利用已经打包好的tar文件直接用压缩命令
压缩compress [原文件名].tar
解压uncompress [原文件名].tar.Z
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Zcvf [目标文件名].tar.Z [原文件名/目录名]
解压并解包: tar -Zxvf [原文件名].tar.Z
大写Z代表用ncompress算法来压缩/解压。另ncompress是早期Unix系统的压缩格式但由于ncompress的压缩率太低现已过时。
#### jar格式
压缩jar -cvf [目标文件名].jar [原文件名/目录名]
解压jar -xvf [原文件名].jar
如果是打包的是Java类库并且该类库中存在主类那么需要写一个META-INF/MANIFEST.MF配置文件内容如下
Manifest-Version: 1.0
Created-By: 1.6.0_27 (Sun Microsystems Inc.)
Main-class: the_name_of_the_main_class_should_be_put_here
然后用如下命令打包:
jar -cvfm [目标文件名].jar META-INF/MANIFEST.MF [原文件名/目录名]
这样以后就能用“java -jar [文件名].jar”命令直接运行主类中的public static void main方法了。
#### 7z格式
压缩7z a [目标文件名].7z [原文件名/目录名]
解压7z x [原文件名].7z
这个7z解压命令支持rar格式
7z x [原文件名].rar
#### 其它例子
**将文件全部打包成tar包**
```
tar -cvf log.tar log2012.log 仅打包,不压缩!
tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩
```
在选项`f`之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加`z`选项,则以.tar.gz或.tgz来代表gzip压缩过的tar包如果加`j`选项,则以.tar.bz2来作为tar包名。
**查阅上述tar包内有哪些文件**
```
tar -ztvf log.tar.gz
```
由于我们使用 gzip 压缩的log.tar.gz所以要查阅log.tar.gz包内的文件时就得要加上`z`这个选项了。
**将tar包解压缩**
```
tar -zxvf /opt/soft/test/log.tar.gz
```
在预设的情况下,我们可以将压缩档在任何地方解开的
**只将tar内的部分文件解压出来**
```
tar -zxvf /opt/soft/test/log30.tar.gz log2013.log
```
我可以透过`tar -ztvf`来查阅 tar 包内的文件名称如果单只要一个文件就可以透过这个方式来解压部分文件
**文件备份下来,并且保存其权限**
```
tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log
```
这个`-p`的属性是很重要的,尤其是当您要保留原本文件的属性时。
**在文件夹当中,比某个日期新的文件才备份**
```
tar -N "2012/11/13" -zcvf log17.tar.gz test
```
**备份文件夹内容是排除部分文件:**
```
tar --exclude scf/service -zcvf scf.tar.gz scf/*
```
**其实最简单的使用 tar 就只要记忆底下的方式即可:**
```
 tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
 tar -jtv -f filename.tar.bz2
解压缩tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
```
## zip
可以用来解压缩文件
### 补充说明
**zip命令** 可以用来解压缩文件或者对文件进行打包操作。zip是个使用广泛的压缩程序文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件。
### 语法
```
zip(选项)(参数)
```
### 选项
```
-A调整可执行的自动解压缩文件
-b<工作目录>:指定暂时存放文件的目录;
-c替每个被压缩的文件加上注释
-d从压缩文件内删除指定的文件
-D压缩文件内不建立目录名称
-f此参数的效果和指定“-u”参数类似但不仅更新既有文件如果某些文件原本不存在于压缩文件内使用本参数会一并将其加入压缩文件中
-F尝试修复已损坏的压缩文件
-g将文件压缩后附加在已有的压缩文件之后而非另行建立新的压缩文件
-h在线帮助
-i<范本样式>:只压缩符合条件的文件;
-j只保存文件名称及其内容而不存放任何目录名称
-J删除压缩文件前面不必要的数据
-k使用MS-DOS兼容格式的文件名称
-l压缩文件时把LF字符置换成LF+CR字符
-ll压缩文件时把LF+cp字符置换成LF字符
-L显示版权信息
-m将文件压缩并加入压缩文件后删除原始文件即把文件移到压缩文件中
-n<字尾字符串>:不压缩具有特定字尾字符串的文件;
-o以压缩文件内拥有最新更改时间的文件为准将压缩文件的更改时间设成和该文件相同
-q不显示指令执行过程
-r递归处理将指定目录下的所有文件和子目录一并处理
-S包含系统和隐藏文件
-t<日期时间>:把压缩文件的日期设成指定的日期;
-T检查备份文件内的每个文件是否正确无误
-u更换较新的文件到压缩文件内
-v显示指令执行过程或显示版本信息
-V保存VMS操作系统的文件属性
-w在文件名称里假如版本编号本参数仅在VMS操作系统下有效
-x<范本样式>:压缩时排除符合条件的文件;
-X不保存额外的文件属性
-y直接保存符号连接而非该链接所指向的文件本参数仅在UNIX之类的系统下有效
-z替压缩文件加上注释
-$:保存第一个被压缩文件所在磁盘的卷册名称;
-<压缩效率>压缩效率是一个介于1~9的数值。
```
### 参数
* zip压缩包指定要创建的zip压缩包
* 文件列表:指定要压缩的文件列表。
### 实例
将`/home/Blinux/html/`这个目录下所有文件和文件夹打包为当前目录下的html.zip
```
zip -q -r html.zip /home/Blinux/html
```
上面的命令操作是将绝对地址的文件及文件夹进行压缩以下给出压缩相对路径目录比如目前在Bliux这个目录下执行以下操作可以达到以上同样的效果
```
zip -q -r html.zip html
```
比如现在我的html目录下我操作的zip压缩命令是
```
zip -q -r html.zip *
```
### 问题解决
CentOS7中命令找不到
```
-Bash: Unzip: Command Not Found
```
解决方法
```bash
yum install -y unzip zip
```
## unzip
用于解压缩由zip命令压缩的压缩包
### 补充说明
**unzip命令** 用于解压缩由zip命令压缩的“.zip”压缩包。
### 语法
```
unzip(选项)(参数)
```
### 选项
```
-c将解压缩的结果显示到屏幕上并对字符做适当的转换
-f更新现有的文件
-l显示压缩文件内所包含的文件
-p与-c参数类似会将解压缩的结果显示到屏幕上但不会执行任何的转换
-t检查压缩文件是否正确
-u与-f参数类似但是除了更新现有的文件外也会将压缩文件中的其他文件解压缩到目录中
-v执行时显示详细的信息
-z仅显示压缩文件的备注文字
-a对文本文件进行必要的字符转换
-b不要对文本文件进行字符转换
-C压缩文件中的文件名称区分大小写
-j不处理压缩文件中原有的目录路径
-L将压缩文件中的全部文件名改为小写
-M将输出结果送到more程序处理
-n解压缩时不要覆盖原有的文件
-o不必先询问用户unzip执行后覆盖原有的文件
-P<密码>使用zip的密码选项
-q执行时不显示任何信息
-s将文件名中的空白字符转换为底线字符
-V保留VMS的文件版本信息
-X解压缩时同时回存文件原来的UID/GID
-d<目录>:指定文件解压缩后所要存储的目录;
-x<文件>:指定不要处理.zip压缩文件中的哪些文件
-Zunzip-Z等于执行zipinfo指令。
```
### 参数
压缩包:指定要解压的“.zip”压缩包。
### 实例
将压缩文件text.zip在当前目录下解压缩。
```
unzip test.zip
```
将压缩文件text.zip在指定目录`/tmp`下解压缩如果已有相同的文件存在要求unzip命令不覆盖原先的文件。
```
unzip -n test.zip -d /tmp
```
查看压缩文件目录,但不解压。
```
unzip -v test.zip
```
将压缩文件test.zip在指定目录`/tmp`下解压缩如果已有相同的文件存在要求unzip命令覆盖原先的文件。
```
unzip -o test.zip -d tmp/
```
## gzip
用来压缩文件
### 补充说明
**gzip命令** 用来压缩文件。gzip是个使用广泛的压缩程序文件经它压缩过后其名称后面会多处“.gz”扩展名。
gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计gzip命令对文本文件有60%70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。
### 语法
```
gzip(选项)(参数)
```
### 选项
```
-a或——ascii使用ASCII文字模式
-d或--decompress或----uncompress解开压缩文件
-f或——force强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接
-h或——help在线帮助
-l或——list列出压缩文件的相关信息
-L或——license显示版本与版权信息
-n或--no-name压缩文件时不保存原来的文件名称及时间戳记
-N或——name压缩文件时保存原来的文件名称及时间戳记
-q或——quiet不显示警告信息
-r或——recursive递归处理将指定目录下的所有文件及子目录一并处理
-S或<压缩字尾字符串>或----suffix<压缩字尾字符串>:更改压缩字尾字符串;
-t或——test测试压缩文件是否正确无误
-v或——verbose显示指令执行过程
-V或——version显示版本信息
-<压缩效率>压缩效率是一个介于1~9的数值预设值为“6”指定愈大的数值压缩效率就会愈高
--best此参数的效果和指定“-9”参数相同
--fast此参数的效果和指定“-1”参数相同。
-num 用指定的数字num调整压缩的速度-1或--fast表示最快压缩方法低压缩比-9或--best表示最慢压缩方法高压缩比。系统缺省值为6。
```
### 参数
文件列表:指定要压缩的文件列表。
### 实例
把test6目录下的每个文件压缩成.gz文件
```
gzip *
```
把上例中每个压缩的文件解压,并列出详细的信息
```
gzip -dv *
```
详细显示例1中每个压缩的文件的信息并不解压
```
gzip -l *
```
压缩一个tar备份文件此时压缩文件的扩展名为.tar.gz
```
gzip -r log.tar
```
递归的压缩目录
```
gzip -rv test6
```
这样所有test下面的文件都变成了*.gz目录依然存在只是目录里面的文件相应变成了*.gz.这就是压缩,和打包不同。因为是对目录操作,所以需要加上-r选项这样也可以对子目录进行递归了。
递归地解压目录
```
gzip -dr test6
```

View File

@ -0,0 +1,307 @@
---
title: linux 常用命令-文件处理
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-文件处理](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E6%96%87%E4%BB%B6%E5%A4%84%E7%90%86)
- [touch](#touch)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [ln](#ln)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [扩展知识](#%E6%89%A9%E5%B1%95%E7%9F%A5%E8%AF%86)
- [硬链接](#%E7%A1%AC%E9%93%BE%E6%8E%A5)
- [符号链接](#%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5)
- [cat](#cat)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [rename](#rename)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-文件处理
## touch
创建新的空文件
### 补充说明
**touch命令** 有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。
### 语法
```
touch(选项)(参数)
```
### 选项
```
-a或--time=atime或--time=access或--time=use 只更改存取时间;
-c或--no-create 不建立任何文件;
-d<时间日期> 使用指定的日期时间,而非现在的时间;
-f此参数将忽略不予处理仅负责解决BSD版本touch指令的兼容性问题
-m或--time=mtime或--time=modify 只更该变动时间;
-r<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t<日期时间> 使用指定的日期时间,而非现在的时间;
--help在线帮助
--version显示版本信息。
```
### 参数
文件:指定要设置时间属性的文件列表。
### 实例
```
touch ex2
```
在当前目录下建立一个空文件ex2然后利用`ls -l`命令可以发现文件ex2的大小为0表示它是空文件。
## ln
用来为文件创件连接
### 补充说明
**ln命令** 用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。
注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
### 语法
```
ln [选项]... [-T] 目标 链接名 (第一种格式)
 ln [选项]... 目标 (第二种格式)
 ln [选项]... 目标... 目录 (第三种格式)
 ln [选项]... -t 目录 目标... (第四种格式)
```
### 选项
```
--backup[=CONTROL] 为每个已存在的目标文件创建备份文件
-b 类似--backup但不接受任何参数
-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)
-f, --force 强行删除任何已存在的目标文件
-i, --interactive 覆盖既有文件之前先询问用户;
-L, --logical 取消引用作为符号链接的目标
-n, --no-dereference 把符号连接的目的目录视为一般文件;
-P, --physical 直接将硬链接到符号链接
-r, --relative 创建相对于链接位置的符号链接
-s, --symbolic 对源文件建立符号连接,而非硬连接;
-S, --suffix=SUFFIX 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它
-t, --target-directory=DIRECTORY 指定要在其中创建链接的DIRECTORY
-T, --no-target-directory 将“LINK_NAME”视为常规文件
-v, --verbose 打印每个链接文件的名称
--help 显示此帮助信息并退出
--version 显示版本信息并退出
```
### 参数
* 源文件:指定连接的源文件。如果使用`-s`选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件;
* 目标文件:指定源文件的目标连接文件。
```bash
none, off # 不进行备份(即使使用了--backup 选项)
numbered, t # 备份文件加上数字进行排序
existing, nil # 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never # 永远使用普通方式备份
```
### 实例
将目录`/usr/mengqc/mub1`下的文件m2.c链接到目录`/usr/liu`下的文件a2.c
```
cd /usr/mengqc
ln /mub1/m2.c /usr/liu/a2.c
```
在执行ln命令之前目录`/usr/liu`中不存在a2.c文件。执行ln之后在`/usr/liu`目录中才有a2.c这一项表明m2.c和a2.c链接起来注意二者在物理上是同一文件利用`ls -l`命令可以看到链接数的变化。
在目录`/usr/liu`下建立一个符号链接文件abc使它指向目录`/usr/mengqc/mub1`
```
ln -s /usr/mengqc/mub1 /usr/liu/abc
```
执行该命令后,`/usr/mengqc/mub1`代表的路径将存放在名为`/usr/liu/abc`的文件中。
### 扩展知识
Linux具有为一个文件起多个名字的功能称为链接。被链接的文件可以存放在相同的目录下但是必须有不同的文件名而不用在硬盘上为同样的数据重复备份。另外被链接的文件也可以有相同的文件名但是存放在不同的目录下这样只要对一个目录下的该文件进行修改就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件我们可以给它们指定不同的存取权限以控制对信息的共享和增强安全性。
文件链接有两种形式,即硬链接和符号链接。
### 硬链接
建立硬链接时在另外的目录或本目录中增加目标文件的一个目录项这样一个文件就登记在多个目录中。如图所示的m2.c文件就在目录mub1和liu中都建立了目录项。
创建硬链接后己经存在的文件的I节点号Inode会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到无额外链接的文件的链接数为l。
在默认情况下ln命令创建硬链接。ln命令会增加链接数rm命令会减少链接数。一个文件除非链接数为0否则不会从文件系统中被物理地删除。
对硬链接有如下限制:
* 不能对目录文件做硬链接。
* 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。
### 符号链接
符号链接也称为软链接是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上它只是一个文本文件如图中的abc文件其中包含它提供链接的另一个文件的路径名如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时将沿着链接方向前进来访问实际的文件。
!符号连接
与硬链接不同的是符号链接确实是一个新文件当然它具有不同的I节点号而硬链接并没有建立新文件。
符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。
用`ln -s`命令建立符号链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行符号链接。而当源文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所在路径不同,就不能进行链接。
符号链接保持了链接与源文件或目录之间的区别:
* 删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据。
* 在目录长列表中符号链接作为一种特殊的文件类型显示出来其第一个字母是l。
* 符号链接的大小是其链接文件的路径名中的字节数。
* 当用`ln -s`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如`lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file`其中表示“文件大小”的数字“14”恰好说明源文件名`original_file`由14个字符构成。
## cat
连接文件并打印到标准输出设备上
### 补充说明
**cat命令** 连接文件并打印到标准输出设备上cat经常用来显示文件的内容类似于下的type命令。
注意当文件较大时文本在屏幕上迅速闪过滚屏用户往往看不清所显示的内容。因此一般用more等命令分屏显示。为了控制滚屏可以按Ctrl+S键停止滚屏按Ctrl+Q键可以恢复滚屏。按Ctrl+C中断键可以终止该命令的执行并且返回Shell提示符状态。
### 语法
```
cat(选项)(参数)
```
### 选项
```
-n或-number有1开始对所有输出的行数编号
-b或--number-nonblank和-n相似只不过对于空白行不编号
-s或--squeeze-blank当遇到有连续两行以上的空白行就代换为一行的空白行
-A显示不可打印字符行尾显示“$”;
-e等价于"-vE"选项;
-t等价于"-vT"选项;
```
### 参数
文件列表:指定要连接的文件列表。
### 实例
设ml和m2是当前目录下的两个文件
```
cat m1 在屏幕上显示文件ml的内容
cat m1 m2 同时显示文件ml和m2的内容
cat m1 m2 > file 将文件ml和m2合并后放入文件file中
```
## rename
用字符串替换的方式批量改变文件名
### 补充说明
**rename命令** 用字符串替换的方式批量改变文件名。
### 语法
```
rename(参数)
```
### 参数
```
原字符串:将文件名需要替换的字符串;
目标字符串:将文件名中含有的原字符替换成目标字符串;
文件:指定要改变文件名的文件列表。
```
### 实例
将main1.c重命名为main.c
```
rename main1.c main.c main1.c
```
**rename支持通配符**
```
? 可替代单个字符
* 可替代多个字符
[charset] 可替代charset集中的任意单个字符
```
文件夹中有这些文件foo1, ..., foo9, foo10, ..., foo278
如果使用`rename foo foo0 foo?`会把foo1到foo9的文件重命名为foo01到foo09重命名的文件只是有4个字符长度名称的文件文件名中的foo被替换为foo0。
如果使用`rename foo foo0 foo??`foo01到foo99的所有文件都被重命名为foo001到foo099只重命名5个字符长度名称的文件文件名中的foo被替换为foo0。
如果使用`rename foo foo0 foo*`foo001到foo278的所有文件都被重命名为foo0001到foo0278所有以foo开头的文件都被重命名。
如果使用`rename foo0 foo foo0[2]*`从foo0200到foo0278的所有文件都被重命名为foo200到foo278文件名中的foo0被替换为foo。
**rename支持正则表达式**
字母的替换
```
rename "s/AA/aa/" * //把文件名中的AA替换成aa
```
修改文件的后缀
```
rename "s//.html//.php/" * //把.html 后缀的改成 .php后缀
```
批量添加文件后缀
```
rename "s/$//.txt/" * //把所有的文件名都以txt结尾
```
批量删除文件名
```
rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删掉
```

View File

@ -0,0 +1,321 @@
---
title: linux 常用命令-文件权限属性设置
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 命令-文件权限属性设置](#linux-%E5%91%BD%E4%BB%A4-%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90%E5%B1%9E%E6%80%A7%E8%AE%BE%E7%BD%AE)
- [chmod](#chmod)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [知识扩展和实例](#%E7%9F%A5%E8%AF%86%E6%89%A9%E5%B1%95%E5%92%8C%E5%AE%9E%E4%BE%8B)
- [chown](#chown)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [stat](#stat)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [file](#file)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-文件权限属性设置
## chmod
用来变更文件或目录的权限
### 补充说明
**chmod命令** 用来变更文件或目录的权限。在UNIX系统家族里文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限设置方式采用文字或数字代号皆可。符号连接的权限无法变更如果用户对符号连接修改权限其改变会作用在被连接的原始文件。
权限范围的表示法如下:
`u` User即文件或目录的拥有者
`g` Group即文件或目录的所属群组
`o` Other除了文件或目录拥有者或所属群组之外其他用户皆属于这个范围
`a` All即全部的用户包含拥有者所属群组以及其他用户
`r` 读取权限数字代号为“4”;
`w` 写入权限数字代号为“2”
`x` 执行或切换权限数字代号为“1”
`-` 不具任何权限数字代号为“0”
`s` 特殊功能说明:变更文件或目录的权限。
### 语法
```
chmod(选项)(参数)
```
### 选项
```bash
u # 操作对象简称用户user文件或目录的所有者。
g # 操作对象简称同组用户group文件或目录所属群组
o # 操作对象简称其它用户others
a # 操作对象简称所有用户all系统默认使用此项
+ # 权限操作符,添加某些权限
- # 权限操作符,取消某些权限
= # 权限操作符,设置文件的权限为给定的权限
r # 权限设定(英文),表示可读权限
w # 权限设定(英文),表示可写权限
x # 权限设定(英文),表示可执行权限
- # 权限设定(英文字符),表示没有权限
X # 权限设定,如果目标文件是可执行文件或目录,可给其设置可执行权限
s # 权限设定设置权限suid和sgid使用权限组合“u+s”设定文件的用户的ID位“g+s”设置组ID位
t # 权限设定,只有目录或文件的所有者才可以删除目录下的文件
-c或——changes # 效果类似“-v”参数但仅回报更改的部分如果文件权限已经改变显示其操作信息
-f或--quiet或——silent # 操作过程中不显示任何错误信息;
-R或——recursive # 递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose # 显示命令运行时的详细执行过程;
--reference=<参考文件或目录> # 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
<权限范围>+<权限设置> # 开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置> # 关闭权限范围的文件或目录的该选项权限设置;
<权限范围>=<权限设置> # 指定权限范围的文件或目录的该选项权限设置;
--help # 显示帮助信息
--version # 显示版本信息
```
### 参数
权限模式:指定文件的权限模式;
文件:要改变权限的文件。
### 知识扩展和实例
Linux用 户分为:拥有者、组群(Group)、其他otherLinux系统中预设的情況下系统中所有的帐号与一般身份使用者以及root的相关信 息, 都是记录在`/etc/passwd`文件中。每个人的密码则是记录在`/etc/shadow`文件下。 此外,所有的组群名称记录在`/etc/group`內!
linux文件的用户权限的分析图
```bash
-rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
# ↑╰┬╯╰┬╯╰┬╯
# ┆ ┆ ┆ ╰┈ 0 其他人
# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组
# ┆ ╰┈┈┈┈ u 属组
# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件
```
rwx rw- r--
r=读取属性  //值4
w=写入属性  //值2
x=执行属性  //值1
```bash
chmod u+x,g+w f01  # 为文件f01设置自己可以执行组员可以写入的权限
chmod u=rwx,g=rw,o=r f01
chmod 764 f01
chmod a+x f01   # 对文件f01的u,g,o都设置可执行属性
```
文件的属主和属组属性设置
```bash
chown user:market f01  # 把文件f01给uesr添加到market组
ll -d f1 查看目录f1的属性
```
将`/home/wwwroot/`里的所有文件和文件夹设置为`755`权限
(1)直接指定路径修改
```bash
chmod -R 755 /home/wwwroot/*
```
(2)手动进入该目录修改权限(并显示详细过程)
```bash
cd /home/wwwroot
chmod -Rv 755 * #注意:“*”表示通配符,指的是所有文件和文件
sudo chmod o+rw /shared #设置文件夹权限以保证其余用户可以访问它
```
## chown
用来变更文件或目录的拥有者或所属群组
### 补充说明
**chown命令** 改变某个文件或目录的所有者和所属的组该命令可以向某个用户授权使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D用户组可以是组名或组id。文件名可以使由空格分开的文件列表在文件名中可以包含通配符。
只有文件主和超级用户才可以便用该命令。
### 语法
```
chown(选项)(参数)
```
### 选项
```
-c或——changes效果类似“-v”参数但仅回报更改的部分
-f或--quite或——silent不显示错误信息
-h或--no-dereference只对符号连接的文件作修改而不更改其他任何相关文件
-R或——recursive递归处理将指定目录下的所有文件及子目录一并处理
-v或——version显示指令执行过程
--dereference效果和“-h”参数相同
--help在线帮助
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
--version显示版本信息。
```
### 参数
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件指定要改变所有者和工作组的文件列表。支持多个文件和目标支持shell通配符。
### 实例
将目录`/usr/meng`及其下面的所有文件、子目录的文件主改成 liu
```
chown -R liu /usr/meng
```
## stat
用于显示文件的状态信息
### 补充说明
**stat命令** 用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。
### 语法
```
stat(选项)(参数)
```
### 选项
```
-L支持符号连接
-f显示文件系统状态而非文件状态
-t以简洁方式输出信息
--help显示指令的帮助信息
--version显示指令的版本信息。
```
### 参数
文件:指定要显示信息的普通文件或者文件系统对应的设备文件名。
### 实例
```
[root@localhost ~]# ls -l myfile
-rw-r--r-- 1 root root 0 2010-10-09 myfile
[root@localhost ~]# stat myfile
file: “myfile”
Size: 0 Blocks: 8 IO Block: 4096 一般空文件
Device: fd00h/64768d Inode: 194805815 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2010-12-12 12:22:35.000000000 +0800
Modify: 2010-10-09 20:44:21.000000000 +0800
Change: 2010-10-09 20:44:21.000000000 +0800
[root@localhost ~]# stat -f myfile
File: "myfile"
id: 0 Namelen: 255 type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 241555461 free: 232910771 Available: 220442547
Inodes: Total: 249364480 Free: 249139691
[root@localhost ~]# stat -t myfile
myfile 0 8 81a4 0 0 fd00 194805815 1 0 0 1292127755 1286628261 1286628261 4096
```
## file
用来探测给定文件的类型。
### 补充说明
**file命令** 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。
### 语法
```
file(选项)(参数)
```
### 选项
```
-b列出辨识结果时不显示文件名称
-c详细显示指令执行过程便于排错或分析程序执行的情形
-f<名称文件>指定名称文件其内容有一个或多个文件名称时让file依序辨识这些文件格式为每列一个文件名称
-L直接显示符号连接所指向的文件类别
-m<魔法数字文件>:指定魔法数字文件;
-v显示版本信息
-z尝试去解读压缩文件的内容。
```
### 参数
文件要确定类型的文件列表多个文件之间使用空格分开可以使用shell通配符匹配多个文件。
### 实例
显示文件类型
```
[root@localhost ~]# file install.log
install.log: UTF-8 Unicode text
[root@localhost ~]# file -b install.log <== 不显示文件名称
UTF-8 Unicode text
[root@localhost ~]# file -i install.log <== 显示MIME类别。
install.log: text/plain; charset=utf-8
[root@localhost ~]# file -b -i install.log
text/plain; charset=utf-8
```
显示符号链接的文件类型
```
[root@localhost ~]# ls -l /var/mail
lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail
[root@localhost ~]# file /var/mail
/var/mail: symbolic link to `spool/mail'
[root@localhost ~]# file -L /var/mail
/var/mail: directory
[root@localhost ~]# file /var/spool/mail
/var/spool/mail: directory
[root@localhost ~]# file -L /var/spool/mail
/var/spool/mail: directory
```

View File

@ -0,0 +1,667 @@
---
title: linux 常用命令-文件查找和比较
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-文件查找和比较](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E6%96%87%E4%BB%B6%E6%9F%A5%E6%89%BE%E5%92%8C%E6%AF%94%E8%BE%83)
- [diff](#diff)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [locate](#locate)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [which](#which)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [find](#find)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [根据文件或者正则表达式进行匹配](#%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E6%88%96%E8%80%85%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%BF%9B%E8%A1%8C%E5%8C%B9%E9%85%8D)
- [否定参数](#%E5%90%A6%E5%AE%9A%E5%8F%82%E6%95%B0)
- [根据文件类型进行搜索](#%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B%E8%BF%9B%E8%A1%8C%E6%90%9C%E7%B4%A2)
- [基于目录深度搜索](#%E5%9F%BA%E4%BA%8E%E7%9B%AE%E5%BD%95%E6%B7%B1%E5%BA%A6%E6%90%9C%E7%B4%A2)
- [根据文件时间戳进行搜索](#%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E6%97%B6%E9%97%B4%E6%88%B3%E8%BF%9B%E8%A1%8C%E6%90%9C%E7%B4%A2)
- [根据文件大小进行匹配](#%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F%E8%BF%9B%E8%A1%8C%E5%8C%B9%E9%85%8D)
- [删除匹配文件](#%E5%88%A0%E9%99%A4%E5%8C%B9%E9%85%8D%E6%96%87%E4%BB%B6)
- [根据文件权限/所有权进行匹配](#%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90%E6%89%80%E6%9C%89%E6%9D%83%E8%BF%9B%E8%A1%8C%E5%8C%B9%E9%85%8D)
- [借助`-exec`选项与其他命令结合使用](#%E5%80%9F%E5%8A%A9-exec%E9%80%89%E9%A1%B9%E4%B8%8E%E5%85%B6%E4%BB%96%E5%91%BD%E4%BB%A4%E7%BB%93%E5%90%88%E4%BD%BF%E7%94%A8)
- [搜索但跳出指定的目录](#%E6%90%9C%E7%B4%A2%E4%BD%86%E8%B7%B3%E5%87%BA%E6%8C%87%E5%AE%9A%E7%9A%84%E7%9B%AE%E5%BD%95)
- [find其他技巧收集](#find%E5%85%B6%E4%BB%96%E6%8A%80%E5%B7%A7%E6%94%B6%E9%9B%86)
- [whereis](#whereis)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-文件查找和比较
## diff
比较给定的两个文件的不同
### 补充说明
**diff命令** 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数则要比较的内容将来自标准输入。diff命令是以逐行的方式比较文本文件的异同处。如果该命令指定进行目录的比较则将会比较该目录中具有相同文件名的文件而不会对其子目录文件进行任何比较操作。
### 语法
```
diff(选项)(参数)
```
### 选项
```
-<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用
-a或——textdiff预设只会逐行比较文本文件
-b或--ignore-space-change不检查空格字符的不同
-B或--ignore-blank-lines不检查空白行
-c显示全部内容并标出不同之处
-C<行数>或--context<行数>:与执行“-c-<行数>”指令相同;
-d或——minimal使用不同的演算法以小的单位来做比较
-D<巨集名称>或ifdef<巨集名称>:此参数的输出格式可用于前置处理器巨集;
-e或——ed此参数的输出格式可用于ed的script文件
-f或-forward-ed输出的格式类似ed的script文件但按照原来文件的顺序来显示不同处
-H或--speed-large-files比较大文件时可加快速度
-l<字符或字符串>或--ignore-matching-lines<字符或字符串>:若两个文件在某几行有所不同,而之际航同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异;
-i或--ignore-case不检查大小写的不同
-l或——paginate将结果交由pr程序来分页
-n或——rcs将比较结果以RCS的格式来显示
-N或--new-file在比较目录时若文件A仅出现在某个目录中预设会显示Only in目录文件A 若使用-N参数则diff会将文件A 与一个空白的文件比较;
-p若比较的文件为C语言的程序码文件时显示差异所在的函数名称
-P或--unidirectional-new-file与-N类似但只有当第二个目录包含了第一个目录所没有的文件时才会将这个文件与空白的文件做比较
-q或--brief仅显示有无差异不显示详细的信息
-r或——recursive比较子目录中的文件
-s或--report-identical-files若没有发现任何差异仍然显示信息
-S<文件>或--starting-file<文件>:在比较目录时,从指定的文件开始比较;
-t或--expand-tabs在输出时将tab字符展开
-T或--initial-tab在每行前面加上tab字符以便对齐
-u-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同;
-v或——version显示版本信息
-w或--ignore-all-space忽略全部的空格字符
-W<宽度>或--width<宽度>:在使用-y参数时指定栏宽
-x<文件名或目录>或--exclude<文件名或目录>:不比较选项中所指定的文件或目录;
-X<文件>或--exclude-from<文件>;您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件;
-y或--side-by-side以并列的方式显示文件的异同之处
--help显示帮助
--left-column在使用-y参数时若两个文件某一行内容相同则仅在左侧的栏位显示该行内容
--suppress-common-lines在使用-y参数时仅显示不同之处。
```
### 参数
* 文件1指定要比较的第一个文件
* 文件2指定要比较的第二个文件。
### 实例
将目录`/usr/li`下的文件"test.txt"与当前目录下的文件"test.txt"进行比较,输入如下命令:
```
diff /usr/li test.txt #使用diff指令对文件进行比较
```
上面的命令执行后,会将比较后的不同之处以指定的形式列出,如下所示:
```
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
```
其中,字母"a"、"d"、"c"分别表示添加、删除及修改操作。而"n1"、"n2"表示在文件1中的行号"n3"、"n4"表示在文件2中的行号。
注意:以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响的若干行。其中,以<开始的行属于文件1>开始的行属于文件2。
## locate
Apache服务器的性能测试工具
### 补充说明
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。
locate命令可以在搜寻数据库时快速找到档案数据库由updatedb程序来更新updatedb是由cron daemon周期性建立的locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快但较差劲的是locate所找到的档案若是最近才建立或 刚更名的可能会找不到在内定值中updatedb每天会跑一次可以由修改crontab来更新设定值。(etc/crontab)
locate指定用在搜寻符合条件的档案它会去储存档案与目录名称的数据库内寻找合乎范本样式条件的档案或目录录可以使用特殊字元如”*” 或”?”等来指定范本样式如指定范本为kcpa*ner, locate 会找出所有起始字串为kcpa且结尾为ner的档案或目录如名称为kcpartner若目录录名称为kcpa_ner则会列出该目录下包括 子目录在内的所有档案。
locate指令和find找寻档案的功能类似但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库在 执行loacte时直接找该索引查询速度会较快索引数据库一般是由操作系统管理但也可以直接下达update强迫系统立即修改索引数据库。
### 语法
```
locate [选择参数] [样式]
```
### 选项
```
-e 将排除在寻找的范围之外。
-1 如果 是 1则启动安全模式。在安全模式下使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
-f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。
-q 安静模式,不会显示任何错误讯息。
-n 至多显示 n个输出。
-r 使用正规运算式 做寻找的条件。
-o 指定资料库存的名称。
-d 指定资料库的路径
-h 显示辅助讯息
-V 显示程式的版本讯息
```
### 实例
实例1查找和pwd相关的所有文件
```
root ~ # locate pwd
/bin/pwd
/etc/.pwd.lock
/sbin/unix_chkpwd
/usr/bin/pwdx
/usr/include/pwd.h
/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.py
/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.pyc
/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.py
/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.pyc
/usr/lib/syslinux/pwd.c32
/usr/share/help/C/empathy/irc-join-pwd.page
/usr/share/help/ca/empathy/irc-join-pwd.page
/usr/share/help/cs/empathy/irc-join-pwd.page
/usr/share/help/de/empathy/irc-join-pwd.page
/usr/share/help/el/empathy/irc-join-pwd.page
```
实例2 搜索etc目录下所有以sh开头的文件
```
root ~ # locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
```
实例3搜索etc目录下所有以m开头的文件
```
root ~ # locate /etc/m
/etc/magic
/etc/magic.mime
/etc/mailcap
/etc/mailcap.order
/etc/manpath.config
/etc/mate-settings-daemon
```
## which
查找并显示给定命令的绝对路径
### 补充说明
**which命令** 用于查找并显示给定命令的绝对路径环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说使用which命令就可以看到某个系统命令是否存在以及执行的到底是哪一个位置的命令。
### 语法
```
which(选项)(参数)
```
### 选项
```
-n<文件名长度>:制定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名;
-p<文件名长度>:与-n参数相同但此处的<文件名长度>包含了文件的路径;
-w指定输出时栏位的宽度
-V显示版本信息。
```
### 参数
指令名:指令名列表。
### 实例
查找文件、显示命令路径:
```
[root@localhost ~]# which pwd
/bin/pwd
[root@localhost ~]# which adduser
/usr/sbin/adduser
```
说明which是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的所以不同的 PATH 配置内容所找到的命令当然不一样的
用 which 去找出 cd
```
[root@localhost ~]# which cd
cd: shell built-in command
```
cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是bash 内建的命令! 但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的!
## find
在指定目录下查找文件
### 补充说明
**find命令** 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时不设置任何参数则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
### 语法
```
find(选项)(参数)
```
### 选项
```
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24小时数>查找在指定时间曾被存取过的文件或目录单位以24小时计算
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24小时数>查找在指定时间之时被更改的文件或目录单位以24小时计算
-daystart从本日开始计算时间
-depth从指定目录下最深层的子目录开始查找
-expty寻找文件大小为0 Byte的文件或目录下没有任何子目录或文件的空目录
-exec<执行指令>假设find指令的回传值为True就执行该指令
-false将find指令的回传值皆设为False
-fls<列表文件>:此参数的效果和指定“-ls”参数类似但会把结果保存为指定的列表文件
-follow排除符号连接
-fprint<列表文件>:此参数的效果和指定“-print”参数类似但会把结果保存成指定的列表文件
-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似但会把结果保存成指定的列表文件
-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似但会把结果保存成指定的列表文件
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
-help或——help在线帮助
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似但忽略字符大小写的差别
-iname<范本样式>:此参数的效果和指定“-name”参数类似但忽略字符大小写的差别
-inum<inode编号>查找符合指定的inode编号的文件或目录
-ipath<范本样式>:此参数的效果和指定“-path”参数类似但忽略字符大小写的差别
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似但忽略字符大小写的差别
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-ls假设find指令的回传值为Ture就将文件或目录名称列出到标准输出
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount此参数的效果和指定“-xdev”相同
-mtime<24小时数>查找在指定时间曾被更改过的文件或目录单位以24小时计算
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-nogroup找出不属于本地主机群组识别码的文件或目录
-noleaf不去考虑目录至少需拥有两个硬连接存在
-nouser找出不属于本地主机用户识别码的文件或目录
-ok<执行指令>:此参数的效果和指定“-exec”类似但在执行指令之前会先询问用户若回答“y”或“Y”则放弃执行命令
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-print假设find指令的回传值为Ture就将文件或目录名称列出到标准输出。格式为每列一个名称每个名称前皆有“./”字符串;
-print0假设find指令的回传值为Ture就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行
-printf<输出格式>假设find指令的回传值为Ture就将文件或目录名称列出到标准输出。格式可以自行指定
-prune不寻找字符串作为寻找文件或目录的范本样式;
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size<文件大小>:查找符合指定的文件大小的文件;
-true将find指令的回传值皆设为True
-typ<文件类型>:只寻找符合指定的文件类型的文件;
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-version或——version显示版本信息
-xdev将范围局限在先行的文件系统中
-xtype<文件类型>:此参数的效果和指定“-type”参数类似差别在于它针对符号连接检查。
```
### 参数
起始目录:查找文件的起始目录。
### 实例
```bash
# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容
find . -type f -name "*" | xargs grep "140.206.111.111"
```
#### 根据文件或者正则表达式进行匹配
列出当前目录及子目录下所有文件和文件夹
```
find .
```
在`/home`目录下查找以.txt结尾的文件名
```
find /home -name "*.txt"
```
同上,但忽略大小写
```
find /home -iname "*.txt"
```
当前目录及子目录下查找所有以.txt和.pdf结尾的文件
```
find . \( -name "*.txt" -o -name "*.pdf" \)
find . -name "*.txt" -o -name "*.pdf"
```
匹配文件路径或者文件
```
find /usr/ -path "*local*"
```
基于正则表达式匹配文件路径
```
find . -regex ".*\(\.txt\|\.pdf\)$"
```
同上,但忽略大小写
```
find . -iregex ".*\(\.txt\|\.pdf\)$"
```
#### 否定参数
找出/home下不是以.txt结尾的文件
```
find /home ! -name "*.txt"
```
#### 根据文件类型进行搜索
```
find . -type 类型参数
```
类型参数列表:
* **f** 普通文件
* **l** 符号连接
* **d** 目录
* **c** 字符设备
* **b** 块设备
* **s** 套接字
* **p** Fifo
#### 基于目录深度搜索
向下最大深度限制为3
```
find . -maxdepth 3 -type f
```
搜索出深度距离当前目录至少2个子目录的所有文件
```
find . -mindepth 2 -type f
```
#### 根据文件时间戳进行搜索
```
find . -type f 时间戳
```
UNIX/Linux文件系统每个文件都有三种时间戳
* **访问时间** -atime/天,-amin/分钟):用户最近一次访问时间。
* **修改时间** -mtime/天,-mmin/分钟):文件最后一次修改时间。
* **变化时间** -ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
搜索最近七天内被访问过的所有文件
```
find . -type f -atime -7
```
搜索恰好在七天前被访问过的所有文件
```
find . -type f -atime 7
```
搜索超过七天内被访问过的所有文件
```
find . -type f -atime +7
```
搜索访问时间超过10分钟的所有文件
```
find . -type f -amin +10
```
找出比file.log修改时间更长的所有文件
```
find . -type f -newer file.log
```
#### 根据文件大小进行匹配
```
find . -type f -size 文件大小单元
```
文件大小单元:
* **b** —— 块512字节
* **c** —— 字节
* **w** —— 字2字节
* **k** —— 千字节
* **M** —— 兆字节
* **G** —— 吉字节
搜索大于10KB的文件
```
find . -type f -size +10k
```
搜索小于10KB的文件
```
find . -type f -size -10k
```
搜索等于10KB的文件
```
find . -type f -size 10k
```
#### 删除匹配文件
删除当前目录下所有.txt文件
```
find . -type f -name "*.txt" -delete
```
#### 根据文件权限/所有权进行匹配
当前目录下搜索出权限为777的文件
```
find . -type f -perm 777
```
找出当前目录下权限不是644的php文件
```
find . -type f -name "*.php" ! -perm 644
```
找出当前目录用户tom拥有的所有文件
```
find . -type f -user tom
```
找出当前目录用户组sunk拥有的所有文件
```
find . -type f -group sunk
```
#### 借助`-exec`选项与其他命令结合使用
找出当前目录下所有root的文件并把所有权更改为用户tom
```
find .-type f -user root -exec chown tom {} \;
```
上例中, **{}** 用于与 **-exec** 选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
找出自己家目录下所有的.txt文件并删除
```
find $HOME/. -name "*.txt" -ok rm {} \;
```
上例中, **-ok** 和 **-exec** 行为一样,不过它会给出提示,是否执行相应的操作。
查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
```
find . -type f -name "*.txt" -exec cat {} \;> all.txt
```
将30天前的.log文件移动到old目录中
```
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
```
找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来
```
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
```
因为单行命令中-exec参数中无法使用多个命令以下方法可以实现在-exec之后接受多条命令
```
-exec ./text.sh {} \;
```
#### 搜索但跳出指定的目录
查找当前目录或者子目录下所有.txt文件但是跳过子目录sk
```
find . -path "./sk" -prune -o -name "*.txt" -print
```
#### find其他技巧收集
要列出所有长度为零的文件
```
find . -empty
```
## whereis
查找二进制程序、代码等相关文件路径
### 补充说明
**whereis命令** 用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。
whereis命令只能用于程序名的搜索而且只搜索二进制文件参数-b、man说明文件参数-m和源代码文件参数-s。如果省略参数则返回所有信息。
和find相比whereis查找的速度非常快这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中当使用whereis和下面即将介绍的locate时会从数据库中查找数据而不是像find命令那样 过遍历硬盘来查找效率自然会很高。 但是该数据库文件并不是实时更新默认情况下时一星期更新一次因此我们在用whereis和locate 查找文件时有时会找到已经被删除的数据或者刚刚建立文件却无法查找到原因就是因为数据库文件没有被更新。
### 语法
```
whereis(选项)(参数)
```
### 选项
```
-b只查找二进制文件
-B<目录>:只在设置的目录下查找二进制文件;
-f不显示文件名前的路径名称
-m只查找说明文件
-M<目录>:只在设置的目录下查找说明文件;
-s只查找原始代码文件
-S<目录>只在设置的目录下查找原始代码文件;
-u查找不包含指定类型的文件。
```
### 参数
指令名要查找的二进制程序、源文件和man手册页的指令名。
### 实例
将相关的文件都查找出来
```
[root@localhost ~]# whereis tomcat
tomcat:
[root@localhost ~]# whereis svn
svn: /usr/bin/svn /usr/local/svn /usr/share/man/man1/svn.1.gz
```
说明tomcat没安装找不出来svn安装找出了很多相关文件
只将二进制文件查找出来 
```
[root@localhost ~]# whereis -b svn
svn: /usr/bin/svn /usr/local/svn
[root@localhost ~]# whereis -m svn
svn: /usr/share/man/man1/svn.1.gz
[root@localhost ~]# whereis -s svn
svn:
```
说明:`whereis -m svn`查出说明文档路径,`whereis -s svn`找source源文件。

View File

@ -0,0 +1,549 @@
---
title: linux 常用命令-文件编辑
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-文件编辑](#linux-常用命令-文件编辑)
- [sed](#sed)
- [补充说明](#补充说明)
- [sed的选项、命令、替换标记](#sed的选项命令替换标记)
- [选项](#选项)
- [参数](#参数)
- [sed命令](#sed命令)
- [sed替换标记](#sed替换标记)
- [sed元字符集](#sed元字符集)
- [sed用法实例](#sed用法实例)
- [替换操作s命令](#替换操作s命令)
- [全面替换标记g](#全面替换标记g)
- [定界符](#定界符)
- [删除操作d命令](#删除操作d命令)
- [已匹配字符串标记&](#已匹配字符串标记)
- [子串匹配标记\1](#子串匹配标记\1)
- [组合多个表达式](#组合多个表达式)
- [引用](#引用)
- [选定行的范围:,(逗号)](#选定行的范围逗号)
- [多点编辑e命令](#多点编辑e命令)
- [从文件读入r命令](#从文件读入r命令)
- [写入文件w命令](#写入文件w命令)
- [追加行下a\命令](#追加行下a\命令)
- [插入行上i\命令](#插入行上i\命令)
- [下一个n命令](#下一个n命令)
- [变形y命令](#变形y命令)
- [退出q命令](#退出q命令)
- [保持和获取h命令和G命令](#保持和获取h命令和g命令)
- [保持和互换h命令和x命令](#保持和互换h命令和x命令)
- [脚本scriptfile](#脚本scriptfile)
- [打印奇数行或偶数行](#打印奇数行或偶数行)
- [打印匹配字符串的下一行](#打印匹配字符串的下一行)
- [vi](#vi)
- [补充说明](#补充说明-1)
- [语法](#语法)
- [选项](#选项-1)
- [参数](#参数-1)
- [知识扩展](#知识扩展)
<!-- /TOC -->
# linux 常用命令-文件编辑
## sed
功能强大的流式文本编辑器
### 补充说明
**sed** 是一种流编辑器它是文本处理中非常中的工具能够完美的配合正则表达式使用功能不同凡响。处理时把当前处理的行存储在临时缓冲区中称为“模式空间”pattern space接着用sed命令处理缓冲区中的内容处理完成后把缓冲区的内容送往屏幕。接着处理下一行这样不断重复直到文件末尾。文件内容并没有 改变除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件简化对文件的反复操作编写转换程序等。
### sed的选项、命令、替换标记
**命令格式**
```
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
```
### 选项
```
-e<script>--expression=<script>script
-f<script文件>--file=<script>script
-h或--help显示帮助
-n或--quiet或——silent仅显示script处理后的结果
-V或--version显示版本信息。
```
### 参数
文件:指定待处理的文本文件列表。
### sed命令
```
**a\** 在当前行下面插入文本。
**i\** 在当前行上面插入文本。
**c\** 把选定的行改为新的文本。
**d** 删除,删除选择的行。
**D** 删除模板块的第一行。
**s** 替换指定字符
**h** 拷贝模板块的内容到内存中的缓冲区。
**H** 追加模板块的内容到内存中的缓冲区。
**g** 获得内存缓冲区的内容,并替代当前模板块中的文本。
**G** 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
**l** 列表不能打印字符的清单。
**n** 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
**N** 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
**p** 打印模板块的行。
**P** (大写) 打印模板块的第一行。
**q** 退出Sed。
**b lable** 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
**r file** 从file中读行。
**t label** if分支从最后一行开始条件一旦满足或者Tt命令将导致分支到带有标号的命令处或者到脚本的末尾。
**T label** 错误分支从最后一行开始一旦发生错误或者Tt命令将导致分支到带有标号的命令处或者到脚本的末尾。
**w file** 写并追加模板块到file末尾。
**W file** 写并追加模板块的第一行到file末尾。
**!** 表示后面的命令对所有没有被选定的行发生作用。
**=** 打印当前行号码。
**#** 把注释扩展到下一个换行符以前。
```
### sed替换标记
```
**g** 表示行内全面替换。
**p** 表示打印行。
**w** 表示把行写入一个文件。
**x** 表示互换模板块中的文本和缓冲区中的文本。
**y** 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
**\1** 子串匹配标记
**&** 已匹配字符串标记
```
### sed元字符集
```
**^** 匹配行开始,如:/^sed/匹配所有以sed开头的行。
**$** 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
**.** 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符最后是d。
**** * 匹配0个或多个字符/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
**[]** 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
**[^]** 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头紧跟ed的行。
**\(..\)** 匹配子串保存匹配的字符如s/\(love\)able/\1rsloveable被替换成lovers。
**&** 保存搜索字符用来替换其他字符如s/love/ **&** /love这成 **love**
**\<** 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。
**\>** 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
**x\{m\}** 重复字符xm次/0\{5\}/匹配包含5个0的行。
**x\{m,\}** 重复字符x至少m次/0\{5,\}/匹配至少有5个0的行。
**x\{m,n\}** 重复字符x至少m次不多于n次/0\{5,10\}/匹配5~10个0的行。
```
### sed用法实例
#### 替换操作s命令
替换文本中的字符串:
```
sed 's/book/books/' file
```
**-n选项** 和 **p命令** 一起使用表示只打印那些发生替换的行:
sed -n 's/test/TEST/p' file
直接编辑文件 **选项-i** 会匹配file文件中每一行的第一个book替换为books
```
sed -i 's/book/books/g' file
```
#### 全面替换标记g
使用后缀 /g 标记会替换每一行中的所有匹配:
```
sed 's/book/books/g' file
```
当需要从第N处匹配开始替换时可以使用 /Ng
```
echo sksksksksksk | sed 's/sk/SK/2g'
skSKSKSKSKSK
echo sksksksksksk | sed 's/sk/SK/3g'
skskSKSKSKSK
echo sksksksksksk | sed 's/sk/SK/4g'
skskskSKSKSK
```
#### 定界符
以上命令中字符 / 在sed中作为定界符使用也可以使用任意的定界符
```
sed 's:test:TEXT:g'
sed 's|test|TEXT|g'
```
定界符出现在样式内部时,需要进行转义:
```
sed 's/\/bin/\/usr\/local\/bin/g'
```
#### 删除操作d命令
删除空白行:
```
sed '/^$/d' file
```
删除文件的第2行
```
sed '2d' file
```
删除文件的第2行到末尾所有行
```
sed '2,$d' file
```
删除文件最后一行:
```
sed '$d' file
```
删除文件中所有开头是test的行
```
sed '/^test/'d file
```
#### 已匹配字符串标记&
正则表达式 \w\+ 匹配每一个单词,使用 [&] 替换它,& 对应于之前所匹配到的单词:
```
echo this is a test line | sed 's/\w\+/[&]/g'
[this] [is] [a] [test] [line]
```
所有以192.168.0.1开头的行都会被替换成它自已加localhost
```
sed 's/^192.168.0.1/&localhost/' file
192.168.0.1localhost
```
#### 子串匹配标记\1
匹配给定样式的其中一部分:
```
echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/'
this is 7 in a number
```
命令中 digit 7被替换成了 7。样式匹配到的子串是 7\(..\) 用于匹配子串,对于匹配到的第一个子串就标记为 **\1** ,依此类推匹配到的第二个结果就是 **\2** ,例如:
```
echo aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
BBB aaa
```
love被标记为1所有loveable会被替换成lovers并打印出来
```
sed -n 's/\(love\)able/\1rs/p' file
```
#### 组合多个表达式
```
sed '表达式' | sed '表达式'
等价于:
sed '表达式; 表达式'
```
#### 引用
sed表达式可以使用单引号来引用但是如果表达式内部包含变量字符串就需要使用双引号。
```
test=hello
echo hello WORLD | sed "s/$test/HELLO"
HELLO WORLD
```
#### 选定行的范围:,(逗号)
所有在模板test和check所确定的范围内的行都被打印
```
sed -n '/test/,/check/p' file
```
打印从第5行开始到第一个包含以test开始的行之间的所有行
```
sed -n '5,/^test/p' file
```
对于模板test和west之间的行每行的末尾用字符串aaa bbb替换
```
sed '/test/,/west/s/$/aaa bbb/' file
```
#### 多点编辑e命令
-e选项允许在同一行里执行多条命令
```
sed -e '1,5d' -e 's/test/check/' file
```
上面sed表达式的第一条命令删除1至5行第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令那么第一个替换命令将影响第二个替换命令的结果。
和 -e 等价的命令是 --expression
```
sed --expression='s/test/check/' --expression='/love/d' file
```
#### 从文件读入r命令
file里的内容被读进来显示在与test匹配的行后面如果匹配多行则file的内容将显示在所有匹配行的下面
```
sed '/test/r file' filename
```
#### 写入文件w命令  
在example中所有包含test的行都被写入file里
```
sed -n '/test/w file' example
```
#### 追加行下a\命令
将 this is a test line 追加到 以test 开头的行后面:
```
sed '/^test/a\this is a test line' file
```
在 test.conf 文件第2行之后插入 this is a test line
```
sed -i '2a\this is a test line' test.conf
```
#### 插入行上i\命令
将 this is a test line 追加到以test开头的行前面
```
sed '/^test/i\this is a test line' file
```
在test.conf文件第5行之前插入this is a test line
```
sed -i '5i\this is a test line' test.conf
```
#### 下一个n命令
如果test被匹配则移动到匹配行的下一行替换这一行的aa变为bb并打印该行然后继续
```
sed '/test/{ n; s/aa/bb/; }' file
```
#### 变形y命令
把1~10行内所有abcde转变为大写注意正则表达式元字符不能使用这个命令
```
sed '1,10y/abcde/ABCDE/' file
```
#### 退出q命令
打印完第10行后退出sed
```
sed '10q' file
```
#### 保持和获取h命令和G命令
在sed处理文件的时候每一行都被保存在一个叫模式空间的临时缓冲区中除非行被删除或者输出被取消否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。
```
sed -e '/test/h' -e '$G' file
```
在这个例子里匹配test的行被找到后将存入模式空间h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。第二条语句的意思是当到达最后一行后G命令取出保持缓冲区的行然后把它放回模式空间中且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。简单来说任何包含test的行都被复制并追加到该文件的末尾。
#### 保持和互换h命令和x命令
互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换
```
sed -e '/test/h' -e '/check/x' file
```
#### 脚本scriptfile
sed脚本是一个sed的命令清单启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔在命令的末尾不能有任何空白或文本如果在一行中有多个命令要用分号分隔。以#开头的行为注释行,且不能跨行。
```
sed [options] -f scriptfile file(s)
```
#### 打印奇数行或偶数行
方法1
```
sed -n 'p;n' test.txt #奇数行
sed -n 'n;p' test.txt #偶数行
```
方法2
```
sed -n '1~2p' test.txt #奇数行
sed -n '2~2p' test.txt #偶数行
```
#### 打印匹配字符串的下一行
```
grep -A 1 SCC URFILE
sed -n '/SCC/{n;p}' URFILE
awk '/SCC/{getline; print}' URFILE
```
## vi
功能强大的纯文本编辑器
### 补充说明
**vi命令** 是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim它是vi的增强版vi Improved与vi编辑器完全兼容而且实现了很多增强功能。
vi编辑器支持编辑模式和命令模式编辑模式下可以完成文本的编辑功能命令模式下可以完成对文件的操作命令要正确使用vi编辑器就必须熟练掌握着两种模式的切换。默认情况下打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用“esc”键从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。
vi编辑器提供了丰富的内置命令有些内置命令使用键盘组合键即可完成有些内置命令则需要以冒号“”开头输入。常用内置命令如下
```
Ctrl+u向文件首翻半屏
Ctrl+d向文件尾翻半屏
Ctrl+f向文件尾翻一屏
Ctrl+b向文件首翻一屏
Esc从编辑模式切换到命令模式
ZZ命令模式下保存当前文件所做的修改后退出vi
:行号:光标跳转到指定行的行首;
:$:光标跳转到最后一行的行首;
x或X删除一个字符x删除光标后的而X删除光标前的
D删除从当前光标到光标所在行尾的全部字符
dd删除光标行正行内容
ndd删除当前行及其后n-1行
nyy将当前行及其下n行的内容保存到寄存器其中为一个字母n为一个数字
p粘贴文本操作用于将缓存区的内容粘贴到当前光标所在位置的下方
P粘贴文本操作用于将缓存区的内容粘贴到当前光标所在位置的上方
/字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;
name文本查找操作用于从当前光标所在位置开始向文件头部查找指定字符串的内容查找的字符串会被加亮显示
abs/F/T替换文本操作用于在第a行到第b行之间将F字符串换成T字符串。其中“s/”表示进行替换操作;
a在当前字符后添加文本
A在行末添加文本
i在当前字符前插入文本
I在行首插入文本
o在当前行后面插入一空行
O在当前行前面插入一空行
:wq在命令模式下执行存盘退出操作
:w在命令模式下执行存盘操作
:w在命令模式下执行强制存盘操作
:q在命令模式下执行退出vi操作
:q在命令模式下执行强制退出vi操作
:e文件名在命令模式下打开并编辑指定名称的文件
:n在命令模式下如果同时打开多个文件则继续编辑下一个文件
:f在命令模式下用于显示当前的文件名、光标所在行的行号以及显示比例
:set number在命令模式下用于在最左端显示行号
:set nonumber在命令模式下用于在最左端不显示行号
```
### 语法
```
vi(选项)(参数)
```
### 选项
```
+<行号>:从指定行号的行开始先是文本内容;
-b以二进制模式打开文件用于编辑二进制文件和可执行文件
-c<指令>:在完成对第一个文件编辑任务后,执行给出的指令;
-d以diff模式打开文件当多个文件编辑时显示文件差异部分
-l使用lisp模式打开“lisp”和“showmatch”
-m取消写文件功能重设“write”选项
-M关闭修改功能
-n不实用缓存功能
-o<文件数目>:指定同时打开指定数目的文件;
-R以只读方式打开文件
-s安静模式不现实指令的任何错误信息。
```
### 参数
文件列表:指定要编辑的文件列表。多个文件之间使用空格分隔开。
### 知识扩展
vi编辑器有三种工作方式命令方式、输入方式和ex转义方式。通过相应的命令或操作在这三种工作方式之间可以进行转换。
**命令方式**
在Shell提示符后输入命令vi进入vi编辑器并处于vi的命令方式。此时从键盘上输入的任何字符都被作为编辑命令来解释例如a(append表示附加命令i(insert表示插入命令x表示删除字符命令等。如果输入的字符不是vi的合法命令则机器发出“报警声”光标不移动。另外在命令方式下输入的字符即vi命令并不在屏幕上显示出来例如输入i屏幕上并无变化但通过执行i命令编辑器的工作方式却发生变化由命令方式变为输入方式。
**输入方式**
通过输入vi的插入命令i、附加命令a、打开命令o、替换命令s、修改命令(c或取代命令r可以从命令方式进入输入方式。在输入方式下从键盘上输入的所有字符都被插入到正在编辑的缓冲区中被当做该文件的正文。进入输入方式后输入的可见字符都在屏幕上显示出来而编辑命令不再起作用仅作为普通字母出现。例如在命令方式下输入字母i进到输入方式然后再输入i就在屏幕上相应光标处添加一个字母i。
由输入方式回到命令方式的办法是按下Esc键。如果已在命令方式下那么按下Esc键就会发出“嘟嘟”声。为了确保用户想执行的vi命令是在命令方式下输入的不妨多按几下Esc键听到嘟声后再输入命令。
**ex转义方式**
vi和ex编辑器的功能是相同的二者的主要区别是用户界面。在vi中命令通常是单个字母如a,x,r等。而在ex中命令是以Enter键结束的命令行。vi有一个专门的“转义”命令可访问很多面向行的ex命令。为使用ex转义方式可输入一个冒号:。作为ex命令提示符冒号出现在状态行通常在屏幕最下一行。按下中断键通常是Del键可终止正在执行的命令。多数文件管理命令都是在ex转义方式下执行的例如读取文件把编辑缓冲区的内容写到文件中等。转义命令执行后自动回到命令方式。例如
```
:1,$s/I/i/g 按Enter键
```
则从文件第一行至文件末尾($将大写I全部替换成小写i。vi编辑器的三种工作方式之间的转换如图所示。
![vi.jpg](http://man.linuxde.net/wp-content/uploads/2013/11/vi.jpg)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,188 @@
---
title: linux 常用命令-磁盘管理
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
# linux 常用命令-磁盘管理
## df
显示磁盘的相关信息
### 补充说明
**df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间目前还剩下多少空间等信息。
### 语法
```
df(选项)(参数)
```
### 选项
```
-a或--all包含全部的文件系统
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable以可读性较高的方式来显示信息
-H或--si与-h参数相同但在计算时是以1000 Bytes为换算单位而非1024 Bytes
-i或--inodes显示inode的信息
-k或--kilobytes指定区块大小为1024字节
-l或--local仅显示本地端的文件系统
-m或--megabytes指定区块大小为1048576字节
--no-sync在取得磁盘使用信息前不要执行sync指令此为预设值
-P或--portability使用POSIX的输出格式
--sync在取得磁盘使用信息前先执行sync指令
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;
-T或--print-type显示文件系统的类型
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;
--help显示帮助
--version显示版本信息。
```
### 参数
文件:指定文件系统上的文件。
### 实例
查看系统磁盘设备默认是KB为单位
```
[root@LinServ-1 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
```
使用`-h`选项以KB以上的单位来显示可读性高
```
[root@LinServ-1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 140G 27G 106G 21% /
/dev/sda1 996M 61M 884M 7% /boot
tmpfs 1009M 0 1009M 0% /dev/shm
/dev/sdb1 2.7T 209G 2.4T 8% /data1
```
查看全部文件系统:
```
[root@LinServ-1 ~]# df -a
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
none 0 0 0 - /proc/sys/fs/binfmt_misc
```
## du
显示每个文件和目录的磁盘使用空间
### 补充说明
**du命令** 也是查看使用空间的但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看还是和df命令有一些区别的。
### 语法
```
du [选项][文件]
```
### 选项
```
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以KMG为单位提高信息的可读性。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件><文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同但是KMG是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件。
```
### 实例
显示目录或者文件所占空间:
```
root@localhost [test]# du
608 ./test6
308 ./test4
4 ./scf/lib
4 ./scf/service/deploy/product
4 ./scf/service/deploy/info
12 ./scf/service/deploy
16 ./scf/service
4 ./scf/doc
4 ./scf/bin
32 ./scf
8 ./test3
1288 .
```
只显示当前目录下面的子目录的目录大小和当前目录的总的大小最下面的1288为当前目录的总大小
显示指定文件所占空间:
```
[root@localhost test]# du log2012.log
300 log2012.log
```
查看指定目录的所占空间:
```
[root@localhost test]# du scf
4 scf/lib
4 scf/service/deploy/product
4 scf/service/deploy/info
12 scf/service/deploy
16 scf/service
4 scf/doc
4 scf/bin
32 scf
```
显示多个文件所占空间:
```
[root@localhost test]# du log30.tar.gz log31.tar.gz
4 log30.tar.gz
4 log31.tar.gz
```
只显示总和的大小:
```
[root@localhost test]# du -s
1288 .
[root@localhost test]# du -s scf
32 scf
[root@localhost test]# cd ..
[root@localhost soft]# du -s test
1288 test
```

View File

@ -0,0 +1,2 @@
# linux 常用命令-系统管理

View File

@ -0,0 +1,426 @@
---
title: linux 常用命令-用户和工作组管理
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
# linux 常用命令-用户和工作组管理
## groupadd
用于创建一个新的工作组
### 补充说明
**groupadd命令** 用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。
### 语法
```
groupadd(选项)(参数)
```
### 选项
```
-g指定新建工作组的id
-r创建系统工作组系统工作组的组ID小于500
-K覆盖配置文件“/ect/login.defs”
-o允许添加组ID号不唯一的工作组。
```
### 参数
组名:指定新建工作组的组名。
### 实例
建立一个新组并设置组ID加入系统
```
groupadd -g 344 jsdigname
```
此时在`/etc/passwd`文件中产生一个组IDGID是344的项目。
## groupdel
用于删除指定的工作组
### 补充说明
**groupdel命令** 用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户则必须先删除这些用户后方能删除群组。
### 语法
```
groupdel(参数)
```
### 参数
组:要删除的工作组名。
### 实例
```
groupadd damon //创建damon工作组
groupdel damon //删除这个工作组
```
## groupmod
更改群组识别码或名称
### 补充说明
**groupmod命令** 更改群组识别码或名称。需要更改群组的识别码或名称时可用groupmod指令来完成这项工作。
### 语法
```
groupmod(选项)(参数)
```
### 选项
```
-g<群组识别码>:设置欲使用的群组识别码;
-o重复使用群组识别码
-n<新群组名称>:设置欲使用的群组名称。
```
### 参数
组名:指定要修改的工作的组名。
## useradd
创建的新的系统用户
### 补充说明
**useradd命令** 用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后再用passwd设定帐号的密码而可用userdel删除帐号。使用useradd指令所建立的帐号实际上是保存在`/etc/passwd`文本文件中。
在Slackware中adduser指令是个script程序利用交谈的方式取得输入的用户帐号资料然后再交由真正建立帐号的useradd命令建立新用户如此可方便管理员建立用户帐号。在Red Hat Linux中 **adduser命令** 则是useradd命令的符号连接两者实际上是同一个指令。
### 语法
```
useradd(选项)(参数)
```
### 选项
```
-c<备注>加上备注文字。备注文字会保存在passwd的备注栏位中
-d<登入目录>:指定用户登入时的启始目录;
-D变更预设值
-e<有效期限>:指定帐号的有效期限;
-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
-g<群组>:指定用户所属的群组;
-G<群组>:指定用户所属的附加群组;
-m自动建立用户的登入目录
-M不要自动建立用户的登入目录
-n取消建立以用户名称为名的群组
-r建立系统帐号
-s<shell>指定用户登入后所使用的shell
-u<uid>指定用户id。
```
### 参数
用户名:要创建的用户名。
### 实例
新建用户加入组:
```
useradd g sales jack G company,employees //-g加入主要组、-G加入次要组
```
建立一个新用户账户并设置ID
```
useradd caojh -u 544
```
需要说明的是设定ID值时尽量要大于500以免冲突。因为Linux安装后会建立一些特殊用户一般0到499之间的值留给bin、mail这样的系统账号。
## userdel
用于删除给定的用户以及与用户相关的文件
### 补充说明
**userdel命令** 用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。
### 语法
```
userdel(选项)(参数)
```
### 选项
```
-f强制删除用户即使用户当前已登录
-r删除用户的同时删除与用户相关的所有文件。
```
### 参数
用户名:要删除的用户名。
### 实例
userdel命令很简单比如我们现在有个用户linuxde其家目录位于`/var`目录中,现在我们来删除这个用户:
```
userdel linuxde //删除用户linuxde但不删除其家目录及文件
userdel -r linuxde //删除用户linuxde其家目录及文件一并删除
```
请不要轻易用`-r`选项;他会删除用户的同时删除用户所有的文件和目录,切记如果用户目录下有重要的文件,在删除前请备份。
其实也有最简单的办法,但这种办法有点不安全,也就是直接在`/etc/passwd`中删除您想要删除用户的记录;但最好不要这样做,`/etc/passwd`是极为重要的文件,可能您一不小心会操作失误。
## usermod
用于修改用户的基本信息
### 补充说明
**usermod命令** 用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的crontab档。也需手动更改使用者的at工作档。采用NIS server须在server上更动相关的NIS设定。
### 语法
```
usermod(选项)(参数)
```
### 选项
```
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L锁定用户密码使密码无效
-s<shell>修改用户登入后所使用的shell
-u<uid>修改用户ID
-U:解除密码锁定。
```
### 参数
登录名:指定要修改信息的用户登录名。
### 实例
将newuser2添加到组staff中
```
usermod -G staff newuser2
```
修改newuser的用户名为newuser1
```
usermod -l newuser1 newuser
```
锁定账号newuser1
```
usermod -L newuser1
```
解除对newuser1的锁定
```
usermod -U newuser1
```
## passwd
用于让用户可以更改自己的密码
### 补充说明
**passwd命令** 用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
### 语法
```
passwd(选项)(参数)
```
### 选项
```
-d删除密码仅有系统管理者才能使用
-f强制执行
-k设置只有在密码过期失效后方能更新
-l锁住密码
-s列出密码的相关信息仅有系统管理者才能使用
-u解开已上锁的帐号。
```
### 参数
用户名:需要设置密码的用户名。
### 知识扩展
与用户、组账户信息相关的文件
存放用户信息:
```
/etc/passwd
/etc/shadow
```
存放组信息:
```
/etc/group
/etc/gshadow
```
用户信息文件分析(每项用`:`隔开)
```
例如jack:X:503:504:::/home/jack/:/bin/bash
jack  //用户名
X  //口令、密码
503  //用户id0代表root、普通新建用户从500开始
504  //所在组
:  //描述
/home/jack/  //用户主目录
/bin/bash  //用户缺省Shell
```
组信息文件分析
```
例如jack:$!$:???:13801:0:99999:7:*:*:
jack  //组名
$!$  //被加密的口令
13801  //创建日期与今天相隔的天数
0  //口令最短位数
99999  //用户口令
7  //到7天时提醒
*  //禁用天数
*  //过期天数
```
### 实例
如果是普通用户执行passwd只能修改自己的密码。如果新建用户后要为新用户创建密码则用passwd用户名注意要以root用户的权限来创建。
```
[root@localhost ~]# passwd linuxde //更改或创建linuxde用户的密码
Changing password for user linuxde.
New UNIX password: //请输入新密码;
Retype new UNIX password: //再输入一次;
passwd: all authentication tokens updated successfully. //成功;
```
普通用户如果想更改自己的密码直接运行passwd即可比如当前操作的用户是linuxde。
```
[linuxde@localhost ~]$ passwd
Changing password for user linuxde. //更改linuxde用户的密码
(current) UNIX password: //请输入当前密码;
New UNIX password: //请输入新密码;
Retype new UNIX password: //确认新密码;
passwd: all authentication tokens updated successfully. //更改成功;
```
比如我们让某个用户不能修改密码,可以用`-l`选项来锁定:
```
[root@localhost ~]# passwd -l linuxde //锁定用户linuxde不能更改密码
Locking password for user linuxde.
passwd: Success //锁定成功;
[linuxde@localhost ~]# su linuxde //通过su切换到linuxde用户
[linuxde@localhost ~]$ passwd //linuxde来更改密码
Changing password for user linuxde.
Changing password for linuxde
(current) UNIX password: //输入linuxde的当前密码
passwd: Authentication token manipulation error //失败,不能更改密码;
```
再来一例:
```
[root@localhost ~]# passwd -d linuxde //清除linuxde用户密码
Removing password for user linuxde.
passwd: Success //清除成功;
[root@localhost ~]# passwd -S linuxde //查询linuxde用户密码状态
Empty password. //空密码,也就是没有密码;
```
注意:当我们清除一个用户的密码时,登录时就无需密码,这一点要加以注意。
## su
用于切换当前用户身份到其他用户身份
### 补充说明
**su命令** 用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
### 语法
```
su(选项)(参数)
```
### 选项
```
-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份;
-f或——fast适用于csh与tsch使shell不用去读取启动文件
-l或——login改变身份时也同时变更工作目录以及HOME,SHELL,USER,logname。此外也会变更PATH变量
-m,-p或--preserve-environment变更身份时不要变更环境变量
-s<shell>或--shell=<shell>指定要执行的shell
--help显示帮助
--version显示版本信息。
```
### 参数
用户:指定要切换身份的目标用户。
### 实例
变更帐号为root并在执行ls指令后退出变回原使用者
```
su -c ls root
```
变更帐号为root并传入`-f`选项给新执行的shell
```
su root -f
```
变更帐号为test并改变工作目录至test的家目录
```
su -test
```

View File

@ -0,0 +1,3 @@
# linux 常用命令-网络管理
* [linux 常用命令-网络应用](网络应用.md)

File diff suppressed because it is too large Load Diff

167
docs/linux/linux-monitor.md Normal file
View File

@ -0,0 +1,167 @@
---
title: linux 监控
date: 2018/02/27
categories:
- linux
tags:
- linux
---
<!-- TOC -->
- [linux 监控](#linux-%E7%9B%91%E6%8E%A7)
- [查看发行版本](#%E6%9F%A5%E7%9C%8B%E5%8F%91%E8%A1%8C%E7%89%88%E6%9C%AC)
- [查看 CPU](#%E6%9F%A5%E7%9C%8B-cpu)
- [CPU 监控](#cpu-%E7%9B%91%E6%8E%A7)
- [查看内存](#%E6%9F%A5%E7%9C%8B%E5%86%85%E5%AD%98)
- [查看硬盘](#%E6%9F%A5%E7%9C%8B%E7%A1%AC%E7%9B%98)
- [查看硬盘 IO](#%E6%9F%A5%E7%9C%8B%E7%A1%AC%E7%9B%98-io)
- [查看网络](#%E6%9F%A5%E7%9C%8B%E7%BD%91%E7%BB%9C)
<!-- /TOC -->
# linux 监控
## 查看发行版本
1查看 CentOS 版本号第一种方法
```
➜ bin cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
```
2查看 CentOS 版本号第二种方法
```
➜ bin lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.3.1611 (Core)
Release: 7.3.1611
Codename: Core
```
## 查看 CPU
* 查看 CPU 总体信息:`cat /proc/cpuinfo`
* 查看物理 CPU 个数:`cat /proc/cpuinfo | grep 'physical id' /proc/cpuinfo | sort -u | wc -l`
* 结果4
* 物理 CPU物理 CPU 也就是机器外面就能看到的一个个 CPU每个物理 CPU 还带有单独的风扇
* 查看每个物理 CPU 的核心数量:`cat /proc/cpuinfo | grep 'core id' /proc/cpuinfo | sort -u | wc -l`
* 结果6因为每个物理 CPU 是 6所有 4 个物理 CPU 的总核心数量应该是24
* 核心数:一个核心就是一个物理线程,英特尔有个超线程技术可以把一个物理线程模拟出两个线程来用,充分发挥 CPU 性能,意思是一个核心可以有多个线程。
* 查看 CPU 总的线程数(一般也叫做:逻辑 CPU 数量):`cat /proc/cpuinfo | grep 'processor' /proc/cpuinfo | sort -u | wc -l`
* 结果24正常情况下CPU 的总核心数量 == CPU 线程数,但是如果该 CPU 支持超线程那结果是CPU 的总核心数量 X 2 == CPU 线程数
* 线程数:线程数是一种逻辑的概念,简单地说,就是模拟出的 CPU 核心数。比如,可以通过一个 CPU 核心数模拟出 2 线程的 CPU也就是说这个单核心的 CPU 被模拟成了一个类似双核心 CPU 的功能。
### CPU 监控
- Linux 的 CPU 简单监控一般简单
- 常用命令就是 `top`
- 命令:`top -bn1`,可以完全显示所有进程出来,但是不能实时展示数据,只能暂时命令当时的数据。
- `top` 可以动态显示进程所占的系统资源,每隔 3 秒变一次,占用系统资源最高的进程放最前面。
- 在 `top` 命令状态下还可以按数字键 `1` 显示各个 CPU 线程使用状态
- 在 `top` 命令状态下按 `shfit` + `m` 可以按照 **内存使用** 大小排序
- 在 `top` 命令状态下按 `shfit` + `p` 可以按照 **CPU 使用** 大小排序
- 展示数据上,%CPU 表示进程占用的 CPU 百分比,%MEM 表示进程占用的内存百分比
## 查看内存
- Linux 的内存本质是虚拟内存,这样说是因为它的内存是:物理内存 + 交换分区。有一个内存模块来管理应用的内存使用。
- 如果所以你内存大,可以考虑把 swap 分区改得小点或者直接关掉。
- 但是,如果是用的云主机,一般是没交换分区的,`free -g` 中的 Swap 都是 0。
- 查看内存使用命令:
- 以 M 为容量单位展示数据:`free -m`
- 以 G 为容量单位展示数据:`free -g`
- CentOS 6 和 CentOS 7 展示出来的数据有差别CentOS 7 比较容易看,比如下面的数据格式是 CentOS 7 的 `free -g`
```
total used free shared buff/cache available
Mem: 11 0 10 0 0 10
Swap: 5 0 5
```
- 在以上结果中,其中可以用的内存是看 `available` 列。
- 对于 CentOS 6 的系统可以使用下面命令:
```
[root@bogon ~]# free -mlt
total used free shared buffers cached
Mem: 16080 15919 160 0 278 11934
Low: 16080 15919 160
High: 0 0 0
-/+ buffers/cache: 3706 12373
Swap: 0 0 0
Total: 16080 15919 160
```
- 以上的结果重点关注是:`-/+ buffers/cache`,这一行代表实际使用情况。
## 查看硬盘
- `df -h`:自动以合适的磁盘容量单位查看磁盘大小和使用空间
- `df -m`:以磁盘容量单位 M 为数值结果查看磁盘使用情况
- `du -sh /opt/tomcat6`查看tomcat6这个文件夹大小 (h的意思human-readable用人类可读性较好方式显示系统会自动调节单位显示合适大小的单位)
- `du /opt --max-depth=1 -h`:查看指定录入下包括子目录的各个文件大小情况
## 查看硬盘 IO
- 安装 iotop`yum install -y iotop`
- 查看命令:`iotop`
- 使用 dd 命令测量服务器延迟:`dd if=/dev/zero of=/opt/ioTest2.txt bs=512 count=1000 oflag=dsync`
- 使用 dd 命令来测量服务器的吞吐率(写速度)`dd if=/dev/zero of=/opt/ioTest1.txt bs=1G count=1 oflag=dsync`
- 该命令创建了一个 10M 大小的文件 ioTest1.txt其中参数解释
- if 代表输入文件。如果不指定 if默认就会从 stdin 中读取输入。
- of 代表输出文件。如果不指定 of默认就会将 stdout 作为默认输出。
- bs 代表字节为单位的块大小。
- count 代表被复制的块数。
- /dev/zero 是一个字符设备会不断返回0值字节\0
- oflag=dsync使用同步I/O。不要省略这个选项。这个选项能够帮助你去除 caching 的影响,以便呈现给你精准的结果。
- conv=fdatasyn: 这个选项和 oflag=dsync 含义一样。
- 该命令执行完成后展示的数据:
```
[root@youmeek ~]# dd if=/dev/zero of=/opt/ioTest1.txt bs=1G count=1 oflag=dsync
记录了1+0 的读入
记录了1+0 的写出
1073741824字节(1.1 GB)已复制5.43328 秒198 MB/秒
```
- 利用 hdparm 测试硬盘速度:`yum install -y hdparm`
- 查看硬盘分区情况:`df -h`,然后根据分区测试:
- 测试硬盘分区的读取速度:`hdparm -T /dev/sda`
- 测试硬盘分区缓存的读取速度:`hdparm -t /dev/sda`
- 也可以以上两个参数一起测试:`hdparm -Tt /dev/sda`,结果数据如下:
```
/dev/sda:
Timing cached reads: 3462 MB in 2.00 seconds = 1731.24 MB/sec
Timing buffered disk reads: 806 MB in 3.00 seconds = 268.52 MB/sec
```
## 查看网络
- 安装 iftop需要有 EPEL 源):
```
yum install -y iftop
```
- 如果没有 EPEL 源:`yum install -y epel-release`
- 常用命令:
- `iftop`:默认是监控第一块网卡的流量
- `iftop -i eth1`监控eth1
- `iftop -n`直接显示IP, 不进行DNS反解析
- `iftop -N`:直接显示连接埠编号, 不显示服务名称
- `iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0`:显示某个网段进出封包流量