文中 --> 为开头的为命令行的输出.
涉及到的命令有,cat, tac, file, history, tree, more, less, tail, head, touch, cp, mv, rm,,tr,tee, wc, cut, sort, uniq
cat
cat – 连接文件(S),或标准输入,到标准输出。
#SYNOPSIS
cat [OPTION]... [FILE]...
## -A, --show-all 等价于 -vET
$
## -b, --number-nonblank 跟-n类似,只不过对于空白行不编号
$ cat -b /etc/passwd
--> 1 this is a test.
2 onew
3 tow.
## -e 等价于 -vE
$
## -E 显示结束符,显示$在每行的结尾
$ cat -E /etc/passwd
--> root:x:0:0:root:/root:/bin/bash$
bin:x:1:1:bin:/bin:/sbin/nologin$
daemon:x:2:2:daemon:/sbin:/sbin/nologin$
adm:x:3:4:adm:/var/adm:/sbin/nologin$
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin$
sync:x:5:0:sync:/sbin:/bin/sync$
## -n 显示行号
$ cat -n
--> 1 This is my new life.
2
3 one line.
4 The other line.
## -s, --squeeze-blank 压制显现重复的空白行,连续的空白行输出一行
$ cat -s test
--> This is my new life.
one line.
The other line.
## -t 参考 -vT
$
## -T, --show-tabs TAB显示为^I
$ cat -T test
--> This is my new life.
one^I line.
^Itab line.
The other line.
## -v, --show-nonprinting 显示非打印字符 use ^ and M- notation, except for LFD and TAB
$ cat -v test
tac
tac – 将每个指定文件按行倒置并写到标准输出。如果不指定文件,或文件为”-“,则从标准输入读取数据,不常用
#SYNOPSIS tac [OPTION]... [FILE]... ## -b, --before 在行前而非行尾添加分隔标志 $ ## -r, --regex 将分隔标志视作正则表达式来解析 $ ## -s, --separator=字符串 使用指定字符串代替换行作为分隔标志 $
file
file – 检查文件的类型
#SYNOPSIS file [-bchikLNnprsvz0] [--apple] [--mime-encoding] [--mime-type] [-e testname] [-F separator] [-f namefile] [-m magicfiles] file ... file -C [-m magicfiles] file [--help] @@OPTIONS ## -b --brief 简短模式, 不输出文件名 $ file -b test --> ASCII English text ## 待续...
history
history – 显示或操纵历史列表。
#SYNOPSIS
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
## -c 清空历史记录
$
## -a: 当缓冲区中的历史手动追加文件;
$
## n 数字,要列出最近的 n 笔命令列表
$ history 4
--> 849 history -n
850 history
851 history -n
852 history 4
## -r 将 histfiles 的内容读到目前这个 shell 的 history 记忆中
$
## -w 将目前的 history 记忆内容写入 histfiles
$
## -d #: 删除历史中指定的命令
## 执行history列表中命令的方法
## 调用过去执行过的命令:
## !#:调用历史中的第#条命令;
## !!: 重复执行上一条命令
## !string:调用历史中最近一个以string开头的命令;
## 调用过去执行过的命令的最后一个参数:
## !$:
## ESC, .
## Alt+.
tree
tree – 命令以树形结构显示文件目录结构
#SYNOPSIS
tree [-adfghilnopqrstuvxACDFNS] [-L level [-R]] [-H baseHREF] [-T title] [-o filename]
[--nolinks] [-P pattern] [-I pattern]
[--inodes] [--device] [--noreport] [--dirsfirst] [--version] [--help] [--filelimit #] [directory ...]
## -a 列出所有文件,默认情况下,不显示隐藏文件,还有当前目录(.)和上级目录(..)
$
## -d 仅列出文件夹
$ tree -d /tmp
--> ├── Desktop
├── Documents
├── Downloads
├── Music
├── Pictures
├── Public
├── Templates
└── Videos
## -f 在每个文件或目录之前,显示完整的相对路径名称。
$ tree -f
--> .
├── ./a123b
├── ./a3b
├── ./aab
├── ./ab
├── ./aMb
├── ./x
│ ├── ./x/m
│ └── ./x/n
└── ./y
├── ./y/m
└── ./y/n
## -i 不以阶梯状列出文件或目录名称。
$ tree -fi
--> .
./a123b
./a3b
./aab
./ab
./aMb
./x
./x/m
./x/n
./y
./y/m
./y/n
## -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
$ ls -l
--> -rw-r--r-- 1 root root 0 Nov 23 15:18 a123b
-rw-r--r-- 1 root root 0 Nov 23 15:18 a3b
-rw-r--r-- 1 root root 0 Nov 23 15:18 aab
-rw-r--r-- 1 root root 0 Nov 23 15:18 ab
-rw-r--r-- 1 root root 0 Nov 23 15:18 aMb
lrwxrwxrwx 1 root root 7 Nov 24 13:42 ls -> /bin/ls
lrwxrwxrwx 1 root root 3 Nov 24 13:43 lx -> ./x
drwxr-xr-x 4 root root 4096 Nov 24 13:44 x
drwxr-xr-x 4 root root 4096 Nov 23 14:40 y
$ tree -l
--> .
├── a123b
├── a3b
├── aab
├── ab
├── aMb
├── ls -> /bin/ls
├── lx -> ./x
│ ├── m
│ └── n
├── x
│ ├── m
│ └── n
└── y
├── m
└── n
## -P pattern 支持正则表达式过滤
$ tree -p ?
--> x
├── [drwxr-xr-x] m
└── [drwxr-xr-x] n
y
├── [drwxr-xr-x] m
└── [drwxr-xr-x] n
## -I 不列出匹配到的.
$
## -s 打印出每个文件的大小(byte)
$
## -h 打印出每个文件的大小,可读的(K,M,G,T,P,E)
$
## -u 打印每一个文件的属主
$
## -g 打印每一个文件的属组
$
## -D 打印每一个文件的最后一次修改时间
$
## -L 1显示几层目录
$
## --dirsfirst 文件夹显示在前面
$
more
more – 类似 cat ,不过会以一页一页的显示方便使用者逐页阅读
#SYNOPSIS more [-dlfpcsu] [-num] [+/pattern] [+linenum] [file ...] ## -d 有退出提示 $ ## Space: 向后一屏; ## Enter: 向后一行; ## b: 向前一屏;
less
less – 支持前后翻屏
#SYNOPSIS # # /字符串:向下搜索“字符串”的功能 # ?字符串:向上搜索“字符串”的功能 # n:重复前一个搜索(与 / 或 ? 有关) # N:反向重复前一个搜索(与 / 或 ? 有关) # b 向后翻一页 # d 向后翻半页 # h 显示帮助界面 # Q 退出less 命令 # u 向前滚动半页 # y,k 向前滚动一行 # 空格键 滚动一页 # 回车键,j 滚动一行 # [pagedown]: 向下翻动一页 # [pageup]: 向上翻动一页 #
tail
tail – 输出文件的最后一部分到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件
#SYNOPSIS
tail [OPTION]... FILE
## -n # 显示#行,默认是10行
$ tail -n 4 /etc/passwd
--> pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
centos:x:500:500::/home/centos:/bin/bash
## -f follow 可用来监控日志
$
head
head – 输出文件的前一部分
#SYNOPSIS
head [OPTION]... [FILE]...
## -n 显示文件的前多少行,默认是10行
$ head -n 4 /etc/passwd
--> root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
## 其他选项不常用,略过.
touch
touch – 改变文件时间戳的工具
#SYNOPSIS
touch [OPTION]... FILE...
## 什么参数也不加,更新atime,mtime,ctime
## -m: 只更新mtime
## -a: 只更新atime
## -t STAMP: [[CC]YY]MMDDhhmm[.ss] 此处只会更改atime,mtime,(ctime更新为当前时间,而不是指定的时间).
## -c: 不创建空文件
$ touch -t 201403031122.33 test
--> File: 'test'
Size: 61 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 262146 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-03-03 11:22:33.000000000 +0800
Modify: 2014-03-03 11:22:33.000000000 +0800
Change: 2015-08-24 21:22:51.350499033 +0800(此处为系统当前的时间)
cp
cp – 复制文件或文件夹
#SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
cp SRC DEST:
SRC是文件:
如果DEST不存在:新建目标文件,并将SRC复制到目标文件;
如果DEST存在:
如果DEST是文件:用SRC的内容覆盖至DEST文件中;
如果DEST是目录:在DEST目录中新一个与原文件同名的文件,将将SRC内容复制到新建的同名的目标文件中;
cp SRC... DEST:
如果DEST不存在:
是错误的;
如果DEST存在:
如果DEST是文件:错误;
如果DEST是目录:
常用选项:
-r, -R: 递归复制;
-d: 不跟踪符号链接;
--preserve[=ATTR_LIST]:
mode, ownership, timestamps
context, links, xattr, all
-a: -dR --preseve=all
-i: interactive
-f: force
-v: 显示过程
## 下面演示加 -d 与不加的区别, 加-d会把符号链接复制过来,不加-d直接拷贝实际路径
$ ll ls
--> lrwxrwxrwx 1 root root 7 Aug 24 21:42 ls -> /bin/ls
$ cp ls{,_bak}
--> lrwxrwxrwx 1 root root 7 Aug 24 21:42 ls -> /bin/ls
-rwxr-xr-x 1 root root 117024 Aug 24 22:33 ls_bak
$ cp -d ls{,_bak_a}
--> lrwxrwxrwx 1 root root 7 Aug 24 21:42 ls -> /bin/ls
-rwxr-xr-x 1 root root 117024 Aug 24 22:33 ls_bak
lrwxrwxrwx 1 root root 7 Aug 24 22:35 ls_bak_a -> /bin/ls
mv
mv – 移动或重命名文件
#SYNOPSIS mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE... ## -i 交互的方式 ## -f 强制移动
rm
rm – 删除文件和目录,默认情况下,它是不会删除目录的.
#SYNOPSIS rm [OPTION]... FILE... ## -r -R 递归删除 ## -f 强制删除 ## -i 交互式删除
tr
tr – 转换,压缩,删除字符从标准输入,并输出到标准输出.
#SYNOPSIS tr [OPTION]... SET1 [SET2] ## -c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII. 没明白? $ ## -d, --delete 删除字符串1中所有输入字符。 $ echo "aaaabbccvc" | tr -d "a" --> bbccvc ## -s, --squeeze-repeats 删除所有连续重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。 $ echo "aaaabbccvc" | tr -s '[a-z]' --> abcvc ## -t, --truncate-set1 将set1的字符依次替换成set2中的字符,如果set1的长度超过了set2的长度,则超出的部分不做转换. $ echo 'This is your new life.' | tr -t 'your' 'my' --> This is myur new life. ## 区别-t $ echo 'This is your new life.' | tr 'your' 'my' --> This is myyy new life.
tee
tee – 读取标准输入的数据,并将其内容输x到标准输出或文件。
#SYNOPSIS tee [OPTION]... [FILE]... ## 不加任何参数是覆盖 ## -a, --append 追加到给定文件的末尾,并非覆盖 $ echo 'new line' | tee -a a b #把newline追加到a文件,b文件. ## -i, --ignore-interrupts 忽略中断信号。 $
wc
wc – 统计指定文件中的字节数、字数、行数,并将统计结果显示输出
#SYNOPSIS wc [OPTION]... [FILE]... wc [OPTION]... --files0-from=F ## -w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。 $ ## -l 统计行数 $ ## -c 统计字节数。 $ ## -m 统计字符数。这个标志不能与 -c 标志一起使用。 $ ## -L 打印最长行的长度。
cut
cut – 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一.
#SYNOPSIS
cut OPTION... [FILE]...
## -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
## -c :以字符为单位进行分割。
## -d :自定义分隔符,默认为制表符。
## -f :与-d一起使用,指定显示哪个区域。
#:
#-#:1-3
#,#: 1,3,7
sort
sort – 排序指定文件中的行.
#SYNOPSIS sort [OPTION]... [FILE]... sort [OPTION]... --files0-from=F ## -b: 忽略每行前面开始出的空格字符。 ## -c: 检查文件是否已经按照顺序排序。 ## -r: 逆序 ## -f: 忽略字符大小写 ## -u: 排序后去重 ## -t CHAR: 指明分隔符 ## -k #: 字段,选择那个区间进行排序 ## -n: 表示以数值大小排序 ## -o <输出文件> 将排序后的结果存入指定的文件。
uniq
uniq – 报告或删除文件中重复的行。
#SYNOPSIS uniq [OPTION]... [INPUT [OUTPUT]] ## -c: 显示每行重复的次数; ## -d: 只显示重复过的行; ## -u: 只显示不曾重复的行; ## -i: 忽略大小写;




