# Linux 常用命令

# 文件和目录

# cd

  • 切换当前目录。
# 进入"home"目录
cd ~

# 进入上一次工作路径
cd -

# 把上个命令的参数作为cd参数使用。
cd !$
1
2
3
4
5
6
7
8

# pwd

  • 用于查看当前工作目录路径。
# 查看当前路径
pwd

# 查看软链接的实际路径
pwd -P
1
2
3
4
5

# ls

  • 就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。
ls -a 列出目录所有文件,包含以.开始的隐藏文件
ls -A 列出除.及..的其它文件
ls -r 反序排列
ls -t 以文件修改时间排序
ls -S 以文件大小排序
ls -h 以易读大小显示
ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来

# 列出当前目录中所有以"t"开头的目录的详细内容
ls -l t*
1
2
3
4
5
6
7
8
9
10

# mkdir

  • 创建文件夹。
【可用选项】   
-m:对新建目录设置存取权限,也可以用 chmod 命令设置;   
-p:可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不在的目录,即一次可以建立多个目录。
1
2
3
# 当前工作目录下创建名为 t 的文件夹
mkdir t

# 在 data 目录下创建路径为 a/b/c 的目录,若不存在,则创建:
mkdir -p /data/a/b/c
1
2
3
4
5

# rm

  • 删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。
# 删除任何 .log 文件,删除前逐一询问确认:
rm -i *.log

# 删除 test 子目录及子目录中所有档案删除,并且不用一一确认:
rm -rf test

# 删除以 f 开头的文件
rm -rf f*
1
2
3
4
5
6
7
8

# mv

  • 移动文件或修改文件名。
# 将文件 test.log 重命名为 test1.txt
mv test.log test1.txt

# 将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中
mv log1.txt log2.txt log3.txt /test3

# 将文件 file1 改名为 file2,如果 file2 已经存在,则询问是否覆盖
mv -i log1.txt log2.txt

# 移动当前文件夹下的所有文件到上一级目录
mv * ../
1
2
3
4
5
6
7
8
9
10
11

# cp

  • 将源文件复制至目标文件,或将多个源文件复制至目标目录。
  • 注意:命令行复制,如果目标文件已经存在会提示是否覆盖,而在 shell 脚本中,如果不加 -i 参数,则不会提示,而是直接覆盖!
-i 提示   
-r 复制目录及目录内所有项目   
-a 复制的文件与原文件时间一样  
1
2
3
# 复制 a.txt 到 test 目录下,保持原文件时间,如果原文件存在提示是否覆盖。
cp -ai a.txt test

# 为 a.txt 建立一个链接(快捷方式)
cp -s a.txt link_a.txt

# 将当前目录 test1/ 下的所有文件复制到新目录 test2 下
cp –r test/. test2/  

# 将目录 test1 复制到新目录 test2 下
cp -r test1 test2
1
2
3
4
5
6
7
8
9
10
11

# find

  • 用于在文件树中查找文件,并作出相应的处理。
命令格式:   
find pathname -options [-print -exec -ok ...]   

命令参数:   
pathname:  find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。   
-print:   find命令将匹配的文件输出到标准输出。   
-exec:    find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;,注意{   }和\;之间的空格。   
-ok:      和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。   
   
命令选项:   
-name   按照文件名查找文件   
-perm   按文件权限查找文件   
-user   按文件属主查找文件   
-group  按照文件所属的组来查找文件。   
-type   查找某一类型的文件,诸如:   
   b - 块设备文件   
   d - 目录   
   c - 字符设备文件   
   l - 符号链接文件   
   p - 管道文件   
   f - 普通文件   
   
-size n :[c] 查找文件长度为n块文件,带有c时表文件字节大小   
-amin n   查找系统中最后N分钟访问的文件   
-atime n  查找系统中最后n*24小时访问的文件   
-cmin n   查找系统中最后N分钟被改变文件状态的文件   
-ctime n  查找系统中最后n*24小时被改变文件状态的文件   
-mmin n   查找系统中最后N分钟被改变文件数据的文件   
-mtime n  查找系统中最后n*24小时被改变文件数据的文件   
(用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件)   
-maxdepth n 最大查找目录深度   
-prune 选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略   
-newer 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 查找 48 小时内修改过的文件
find -atime -2

# 在当前目录查找 以 .log 结尾的文件
find ./ -name '*.log'

# 查找 /opt 目录下 权限为 777 的文件
find /opt -perm 777

# 查找大于 1K 的文件
find -size +1000c

# 查找等于 1000 字符的文件
find -size 1000c


-exec 参数后面跟的是 command 命令,它的终止是以 ; 为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{} 花括号代表前面find查找出来的文件名。

# 在当前目录中查找更改时间在10日以前的文件并删除它们(无提醒)
find . -type f -mtime +10 -exec rm -f {} \;

# 当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 按y键删除文件,按n键不删除
find . -name '*.log' mtime +5 -ok -exec rm {} \;

# 当前目录下查找文件名以 passwd 开头,内容包含 "pkg" 字符的文件
find . -type f -name 'passwd*' -exec grep "pkg" {} \;

# 用 exec 选项执行 cp 命令
find . -name '*.log' -exec cp {} test3 \;


-xargs find 命令把匹配到的文件传递给 xargs 命令,而 xargs 命令每次只获取一部分文件而不是全部,不像 -exec 选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

# 查找当前目录下每个普通文件,然后使用 xargs 来判断文件类型
find . -type f -print | xargs file

# 查找当前目录下所有以 js 结尾的并且其中包含 'editor' 字符的普通文件
find . -type f -name "*.js" -exec grep 'ueditor' {} \;
find . -type f -name '*.js' | xargs grep 'editor'

# 利用 xargs 执行 mv 命令
find . -name "*.log" | xargs -i mv {} test4

# 用 grep 命令在当前目录下的log文件中搜索 hostnames 这个词,并标出文件名及所在行:
find . -type f -name '*.log' -print | xargs grep -n 'hostnames'

# 查找当前目录中以一个小写字母开头,最后是 4 到 9 加上 .log 结束的文件:
find . -name '[a-z]*[4-9].log' -print

# 在 test 目录查找不在 test4 子目录查找
find test -path 'test/test4' -prune -o -print

# 实例1:查找更改时间比文件 log2012.log新但比文件 log2017.log 旧的文件
find -newer log2012.log ! -newer log2017.log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

# ln

  • 功能是为文件在另外一个位置建立一个同步的链接
链接分类:软件链接及硬链接   
   
软链接:   
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式   
2.软链接可以 跨文件系统 ,硬链接不可以   
3.软链接可以对一个不存在的文件名进行链接   
4.软链接可以对目录进行链接   
   
硬链接:   
1.硬链接,以文件副本的形式存在。但不占用实际空间   
2.不允许给目录创建硬链接   
3.硬链接只有在同一个文件系统中才能创建   
   
需要注意:   
第一:ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;   
第二:ln的链接又分软链接和硬链接两种,软链接就是ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接 ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。   
第三:ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。   
   
常用参数:   
-b 删除,覆盖以前建立的链接   
-s 软链接(符号链接)   
-v 显示详细处理过程   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 给文件创建软链接,并显示操作信息
ln -sv source.log link.log

#给文件创建硬链接,并显示操作信息
ln -v source.log link1.log

# 给目录创建软链接
ln -sv /opt/soft/test/test3 /opt/soft/test/test5
1
2
3
4
5
6
7
8

# 进程

# ps

  • process status,用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top
linux上进程有5种状态:   
1. 运行(正在运行或在运行队列中等待)   
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)   
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)   
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)   
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)   
   
ps 工具标识进程的5种状态码:   
D 不可中断 uninterruptible sleep (usually IO)   
R 运行 runnable (on run queue)   
S 中断 sleeping   
T 停止 traced or stopped   
Z 僵死 a defunct ("zombie") process   
   
命令参数:   
-A     显示所有进程   
a      显示所有进程   
-a     显示同一终端下所有进程   
c      显示进程真实名称   
e      显示环境变量   
f      显示进程间的关系   
r      显示当前终端运行的进程   
-aux   显示所有包含其它使用的进程   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 显示当前所有进程环境变量及进程间关系
ps -ef

# 显示当前所有进程
ps -A

# 与grep联用查找某进程
ps -aux | grep java

# 找出与 cron 与 syslog 这两个服务有关的 PID 号码
ps aux | grep '(cron|syslog)'
1
2
3
4
5
6
7
8
9
10
11

# kill

  • 发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用"-KILL" 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。
常用参数:   
-l  信号,如果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称   
-a  当处理当前进程时,不限制命令名和进程号的对应关系   
-p  指定kill 命令只打印相关进程的进程号,而不发送任何信号   
-s  指定发送信号   
-u  指定用户   
1
2
3
4
5
6
# 先使用ps查找进程pro1,然后用kill杀掉
kill -9 $(ps -ef | grep pro1)
1
2

# 日期时间

# date

  • 显示或设定系统的日期与时间。
命令参数:   
-d <字符串>  显示字符串所指的日期与时间。字符串前后必须加上双引号。   
-s <字符串>  根据字符串来设置日期与时间。字符串前后必须加上双引号。   
-u           显示GMT。   
%H            小时(00-23)   
%I            小时(00-12)   
%M            分钟(以00-59来表示)   
%s            总秒数。起算时间为1970-01-01 00:00:00 UTC。   
%S            秒(以本地的惯用法来表示)   
%a            星期的缩写。   
%A            星期的完整名称。   
%d            日期(以01-31来表示)。   
%D            日期(含年月日)。   
%m            月份(以01-12来表示)。   
%y            年份(以00-99来表示)。   
%Y            年份(以四位数来表示)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 显示下一天
date +%Y-%m-%d --date="+1 day"
或:date +%Y-%m-%d -d "+1 day"
或:date +%Y-%m-%d -d "1 day"

# 显示前一天
date +%Y-%m-%d --date="-1 day"
或:date +%Y-%m-%d -d "-1 day"
或:date +%Y-%m-%d -d "1 day ago"

# -d参数使用
# 今年的 11 月 22 日是星期三
date -d "nov 22"
# 2周后的日期
date -d '2 weeks'
# 下周一的日期
date -d 'next monday'
# 明天的日期
date -d next-day +%Y%m%d
或:date -d tomorrow +%Y%m%d
# 昨天的日期
date -d last-day +%Y%m%d
或:date -d yesterday +%Y%m%d
# 上个月是几月
date -d last-month +%Y%m
# 下个月是几月
date -d next-month +%Y%m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# cal

  • 可以用户显示公历(阳历)日历
常用参数:   
-3       显示前一月,当前月,后一月三个月的日历   
-m       显示星期一为第一列   
-j       显示在当前年第几天   
-y       【year】显示当前年【year】份的日历
1
2
3
4
5
# 显示指定年月日期
cal 9 2012

# 显示2013年每个月日历
cal -y 2013

# 将星期一做为第一列,显示前中后三月
cal -3m
1
2
3
4
5
6
7
8

# CPU、磁盘空间

# df

  • 显示磁盘空间使用情况
-a 全部文件系统列表   
-h 以方便阅读的方式显示信息   
-i 显示inode信息   
-k 区块为1024字节   
-l 只显示本地磁盘   
-T 列出文件系统类型
1
2
3
4
5
6
# 显示磁盘空间使用情况
df -h
1
2

# du

  • du 命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看:
命令格式:
du 【选项】 【文件】

常用参数:
-a               显示目录中所有文件大小
-k               以KB为单位显示文件大小
-m               以MB为单位显示文件大小
-g               以GB为单位显示文件大小
-h               以易读方式显示文件大小
-s               仅显示总计
-c 或 --total    除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和
1
2
3
4
5
6
7
8
9
10
11
# 以易读方式显示文件夹内及子文件夹大小
du -h /home/hweiyu/

# 以易读方式显示文件夹内所有文件大小
du -ah /home/hweiyu/

# 显示几个文件或目录各自占用磁盘空间的大小,还统计它们的总和
du -hc test1/ test2/

# 显示当前目录下所有文件及目录的大小
du -sh *
1
2
3
4
5
6
7
8
9
10
11

# free

  • 显示系统内存使用情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。
命令参数:   
-b              以Byte显示内存使用情况   
-k              以kb为单位显示内存使用情况   
-m              以mb为单位显示内存使用情况   
-g              以gb为单位显示内存使用情况   
-s <间隔秒数>   持续显示内存   
-t              显示内存使用总合
1
2
3
4
5
6
7
# 显示内存使用情况
free
free -k
free -m
free -h

# 以总和的形式显示内存的使用信息
free -t

# 周期性查询内存使用情况
free -s 10
1
2
3
4
5
6
7
8
9
10
11

# top

  • 显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等
常用参数:   
-c              显示完整的进程命令   
-s              保密模式   
-p <进程号>     指定进程显示   
-n <次数>       循环显示次数   
1
2
3
4
5
# 内容示例:
top - 14:06:23 up 70 days, 16:44,  2 users,  load average: 1.25, 1.32, 1.35
Tasks: 206 total,   1 running, 205 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.9%us,  3.4%sy,  0.0%ni, 90.4%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:  32949016k total, 14411180k used, 18537836k free,   169884k buffers
Swap: 32764556k total,        0k used, 32764556k free,  3612636k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
28894 root      22   0 1501m 405m  10m S 52.2  1.3   2534:16 java  

前五行是当前系统情况整体的统计信息区。

第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:
14:06:23 — 当前系统时间
up 70 days, 16:44 — 系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!)
2 users — 当前有2个用户登录系统
load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

* load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行,Tasks — 任务(进程),具体信息说明如下:
系统现在共有206个进程,其中处于运行中的有1个,205个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

第三行,cpu状态信息,具体属性说明如下:
5.9%us — 用户空间占用CPU的百分比。
3.4% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
90.4% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.2% si — 软中断(Software Interrupts)占用CPU的百分比
备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!

第四行,内存状态,具体信息如下:
32949016k total — 物理内存总量(32GB)
14411180k used — 使用中的内存总量(14GB)
18537836k free — 空闲内存总量(18GB)
169884k buffers — 缓存的内存量 (169M)

第五行,swap交换分区信息,具体信息说明如下:
32764556k total — 交换区总量(32GB)
0k used — 使用的交换区总量(0K)
32764556k free — 空闲交换区总量(32GB)
3612636k cached — 缓冲的交换区总量(3.6GB)

第六行,空行。

第七行以下:各进程(任务)的状态监控,项目列信息说明如下:
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

top 交互命令:
h 显示top交互命令帮助信息
c 切换显示命令名称和完整命令行
m 以内存使用率排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中
o或者O 改变显示项目的顺序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

# 文件权限

# chmod

  • 用于改变 linux 系统文件或目录的访问权限。
  • 每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。可使用 ls -l test.txt 查找。
以文件 1.log 为例:

-rw-r--r-- 1 root root 296K 11-13 06:03 1.log

第一列共有 10 个位置,第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是 d,表示是一个目录。
从第二个字符开始到第十个 9 个字符,3 个字符一组,分别表示了 3 组用户对文件或者目录的权限。权限字符用横线代表空许可,r 代表只读,w 代表写,x 代表可执行。
1
2
3
4
5
6
常用参数:   
-c 当发生改变时,报告处理信息   
-R 处理指定目录以及其子目录下所有文件   
   
权限范围:   
u: 表示创建者   
g: 创建者同组用户   
o: 表示创建者及同组用户外的其他用户   
a: 表示所有用户   
   
权限代号:   
r: 读权限,用数字4表示   
w: 写权限,用数字2表示   
x: 执行权限,用数字1表示   
-: 删除权限,用数字0表示   
s: 特殊权限   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 增加文件 t.log 所有用户可执行权限
chmod a+x t.log

# 撤销原来所有的权限,然后使拥有者具有可读权限,并输出处理信息
chmod u=r t.log -c

# 给 file 的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
chmod 751 t.log -c(或者:chmod u=rwx,g=rx,o=x t.log -c)

# 将 test 目录及其子目录所有文件添加可读权限
chmod u+r,g+r,o+r -R text/ -c
1
2
3
4
5
6
7
8
9
10
11

# chown

  • 将指定文件的拥有者改为指定的用户或组
-c 显示更改的部分的信息   
-R 处理指定目录及子目录
1
2
# 改变拥有者和群组 并显示改变信息
chown -c mail:mail log2012.log

# 改变文件群组
chown -c :mail t.log

# 改变文件夹及子文件目录属主及属组为 mail
chown -cR mail: test/
1
2
3
4
5
6
7
8

# sudo & su

  • su
su的全称是switch user,切换用户的。

su的一般使用方法是su 或者su - ,区别如下:
1、加入了-参数,就是login-shell的方式,也就是说切换到另一个用户之后,当前的shell会加载对应的环境变量和各种设置;
2、如果没有加入-参数,就是non-login-shell的方式,也就是说当前的shell还是加载切换之前的那个用户的环境变量以及各种设置。
1
2
3
4
5
  • sudo
全称为super user do,即以超级用户的方式执行命令,这里的超级用户指的就是root用户。
1
  • 区别
1、使用su - 提供root账号的密码,可以切换到root用户;
2、使用sudo su -,提供当前用户的密码,也可以切换到root用户。
3、如果我们的Linux系统有很多用户需要使用的话,前者要求所有用户都知道root用户的密码,显然是非常危险的;后者是不需要暴露root账户密码的,用户只需要输入自己的账户密码就可以。
1
2
3

# 文本查看和处理

# cat

  • 一次显示整个文件
  • 创建一个文件
  • 将几个文件合并为一个文件
-b 对非空输出行号   
-n 输出所有行号
1
2
# 把 a.log 的文件内容加上行号后显示
cat -n a.log

# 把 a.log 和 b.log 的文件内容加上行号(空白行不加)之后将内容附加到 c.log 里
cat -b a.log b.log > c.log

# 如果 d.log 不存在,则创建文件,按回车后,可以输入内容,然后按ctrl + c结束
# 一个 > ,输入的新内容会覆盖 d.log 中原来的内容
# 两个 > ,在 d.log 后边追加新写入的内容
cat > d.log
cat >> d.log

# 反向显示内容
cat e.log
# a
# b
# c

tac e.log
# c
# b
# a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# tac

  • 文件内容从最后一行开始倒序显示
tac test.txt
1

# more

  • 会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。
命令参数:   
+n        从笫 n 行开始显示   
-n        定义屏幕大小为n行   
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示    
-c        从顶部清屏,然后显示   
-d        提示"Press space to continue, 'q' to quit(按空格键继续,按q键退出)",禁用响铃功能   
-l        忽略Ctrl+l(换页)字符   
-p        通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似   
-s        把连续的多个空行显示为一行   
-u        把文件内容中的下画线去掉   

常用操作命令:   
Enter     向下 n 行,需要定义。默认为 1 行   
Ctrl+F    向下滚动一屏   
空格键    向下滚动一屏   
Ctrl+B    返回上一屏   
=         输出当前行的行号   
:f        输出文件名和当前行的行号   
V         调用vi编辑器   
!命令     调用Shell,并执行命令   
q         退出more 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 显示文件中从第3行起的内容
more +3 text.txt

# 在所列出文件目录详细信息,借助管道使每次显示 5 行,按空格显示下 5 行。
ls -l | more -5
1
2
3
4
5

# less

  • less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 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                       向前滚动一行   
空格键                  滚动一行   
回车键                  滚动一页  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ps 查看进程信息并通过 less 分页显示
ps -aux | less -N

# 查看多个文件,可以使用 :n 查看下一个,使用 :p 查看前一个。
less 1.log 2.log
1
2
3
4
5
  • 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。
常用参数:   
-n <行数> 显示的行数(行数为复数表示从最后向前数)
1
2
# 显示 1.log 文件中前 20 行
head -n 20 1.log

# 显示 1.log 文件前 20 字节
head -c 20 1.log

# 显示文件除了最后 20 行的全部内容
head -n -20 t.log
1
2
3
4
5
6
7
8

# tail

  • 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
常用参数:   
-f                          循环读取(常用于查看递增的日志文件)   
-n <行数>                   显示行数(从后向前)
1
2
3
# 循环读取逐渐增加的文件内容
tail -f 1.log

# 循环读取逐渐增加的文件内容,仅显示最后 100 行
tail -f -n 100 1.log
1
2
3
4
5

# grep

  • 强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索。

  • 语法

命令格式:   
grep [option] pattern file|dir   
   
常用参数:
-A n        --after-context显示匹配字符后n行
-B n        --before-context显示匹配字符前n行
-C n        --context 显示匹配字符前后n行
-c          --count 计算符合样式的列数
-i          忽略大小写
-l          只列出文件内容符合指定的样式的文件名称
-f          从文件中读取关键词
-n          显示匹配内容的所在文件中行数
-R          递归查找文件夹

grep 的规则表达式:
^           锚定行的开始 如:'^grep'匹配所有以grep开头的行。 
$           锚定行的结束 如:'grep$'匹配所有以grep结尾的行。 
.           匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
*           匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.*          一起用代表任意字符。
[]          匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^]         匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\)      标记匹配字符,如'\(love\)',love被标记为1。
\<          锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\>          锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\}      重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
x\{m,\}     重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\}    重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w          匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W          \w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b          单词锁定符,如: '\bgrep\b'只匹配grep。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  • 实例
# 查找指定进程
ps -ef | grep java

# 查找指定进程个数
ps -ef | grep java -c

# 从文件 a.txt 中读取出 key.txt 中包含的关键词
cat a.txt | grep -f key.txt

# 从文件夹 /data 中递归查找以 aaaaaa 开头的行,并只列出文件
grep -lR '^aaaaaa' /data
grep -R '^aaaaaa' /data

# 查找非x开关的行内容
grep '^[^x]' test.txt

# 显示包含 aa 或者 bb 字符的内容行
grep -E 'aa|bb' test.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# sed

  • 利用脚本来处理文本文件
语法:
sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明:
-e <script>         以选项中指定的script来处理输入的文本文件。
-f <script文件>     以选项中指定的script文件来处理输入的文本文件。
-h                  显示帮助。
-n                  仅显示script处理后的结果。
-V                  显示版本信息。

动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除,因为是删除啊,所以 d 后面通常不接任何东东
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 先创建一个 test.txt 文件,内容如下:
java
c++
php
go
js
python

# 在 test.txt 文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:
sed -e 4a\rust test.txt
# 输出结果如下:
java
c++
php
go
rust
js

# 将 test.txt 的内容列出并且列印行号,同时,请将第 2~5 行删除!
nl test.txt | sed '2,3d'
     1  java
     4  go
     5  js
     
* sed 的动作为 2,3d,那个 d 是删除的意思,因为删除了 2-3 行,所以显示的数据就没有 2-3 行了, 另外,原本应该是要下达 sed -e 才对,但没有 -e 也是可以的,同时也要注意的是, sed 后面接的动作,请务必以 '...' 两个单引号括住喔!

# 只要删除第 2 行:
nl test.txt | sed '2d' 
     1  java
     3  php
     4  go
     5  js
     
# 要删除第 3 到最后一行:
nl test.txt | sed '3,$d' 
     1  java
     2  c++
     
# 在第二行后(即加在第三行) 加上"drink tea"字样
nl test.txt | sed '2a drink tea'
     1  java
     2  c++
drink tea
     3  php
     4  go
     5  js
     
# 如果是要在第二行前插入,命令如下:
nl test.txt | sed '2i drink tea' 
     1  java
drink tea
     2  c++
     3  php
     4  go
     5  js
     
# 如果是要增加两行以上,在第二行后面加入两行字,例如 drink tea 与 drink beer
nl test.txt | sed '2a drink tea \
drink beer'
     1  java
     2  c++
drink tea 
drink beer
     3  php
     4  go
     5  js
     
* 每一行之间都必须要以反斜杠 \ 来进行新行标记。上面的例子中,我们可以发现在第一行的最后面就有 \ 存在。

# 将第 2-3 行的内容取代成为 aaaaaa 呢?
nl test.txt | sed '2,3c aaaaaa'
     1  java
aaaaaa
     4  go
     5  js

# 仅列出 test.txt 文件内的第 2-3 行:
nl test.txt | sed -n '2,3p'
     2  c++
     3  php
     
# 搜索 test.txt 有 j 关键字的行:
nl test.txt | sed -n '/j/p'
     1  java
     5  js

# 删除 test.txt 所有包含 j 的行,其他行输出
nl test.txt | sed  '/j/d'
     2  c++
     3  php
     4  go
     
# 搜索 test.txt,找到 j 对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把 j 替换为 xx,再输出这行:
nl test.txt | sed -n '/j/{s/j/xx/;p;q}' 
     1  xxava
* 最后的 q 是退出,所以仅处理了第1行

# 将 test.txt 文件中每行第一次出现的 j 用字符串 xx 替换,然后将该文件内容输出到标准输出
# 语法:sed 's/要被取代的字串/新的字串/g'
# g 标识符表示全局查找替换,使 sed 对文件中所有符合的字符串都被替换,修改后内容会到标准输出,不会修改原文件
sed -e 's/j/xx/' test.txt
sed -e 's/j/xx/g' test.txt

# 直接修改文件,将 j 替换为 xx:
sed -i 's/j/xx/g' test.txt
xxava
c++
php
go
xxs

# 批量操作当前目录下以 test 开头的文件:
sed -i 's/j/xx/g' ./test*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113

# awk

  • 强大的文本分析工具

  • 语法

语法:
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)

参数说明:

-F fs or --field-separator fs                              # 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value                          # 赋值一个用户定义变量。
-f scripfile or --file scriptfile                          # 从脚本文件中读取awk命令。
-mf nnn and -mr nnn                                        # 对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
-W compact or --compat, -W traditional or --traditional    # 在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
-W copyleft or --copyleft, -W copyright or --copyright     # 打印简短的版权信息。
-W help or --help, -W usage or --usage                     # 打印全部awk选项和每个选项的简短说明。
-W lint or --lint                                          # 打印不能向传统unix平台移植的结构的警告。
-W lint-old or --lint-old                                  # 打印关于不能向传统unix平台移植的结构的警告。
-W posix                                                   # 打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
-W re-interval or --re-inerval                             # 允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
-W source program-text or --source program-text            # 使用program-text作为源代码,可与-f命令混用。
-W version or --version                                    # 打印bug报告信息的版本。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  • 基本用法
基本用法:
log.txt文本内容如下:
2 this is a test
3 Do you like awk
This's a test
10 There are orange,apple,mongo

用法一:
# 行匹配语句 awk '' 只能用单引号
awk '{[pattern] action}' {filenames}

实例:
# 每行按空格或TAB分割,输出文本中的1、4项
awk '{print $1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo

# 格式化输出
awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
---------------------------------------------
2        a
3        like
This's
10       orange,apple,mongo

用法二:
# -F 相当于内置变量FS, 指定分割字符
awk -F

实例:
# 使用","分割
awk -F, '{print $1,$2}' log.txt
---------------------------------------------
2 this is a test
3 Do you like awk
This's a test
10 There are orange apple

# 或者使用内建变量
awk 'BEGIN{FS=","} {print $1,$2}' log.txt
---------------------------------------------
2 this is a test
3 Do you like awk
This's a test
10 There are orange apple

# 使用多个分隔符。先使用空格分割,然后对分割结果再使用","分割
awk -F '[ ,]' '{print $1,$2,$5}' log.txt
---------------------------------------------
2 this test
3 Do awk
This's a 
10 There apple

用法三:
# 设置变量
awk -v

实例:
awk -va=1 '{print $1,$1+a}' log.txt
---------------------------------------------
2 3
3 4
This's 1
10 11

awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
---------------------------------------------
2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s

用法四:
awk -f {awk脚本} {文件名}

实例:
awk -f cal.awk log.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

# wc

  • word count,功能为统计指定的文件中字节数、字数、行数,并将统计结果输出
命令格式:   
wc 【option】 file   
   
命令参数:   
-c       统计字节数   
-l       统计行数   
-m       统计字符数   
-w       统计词数,一个字被定义为由空白、跳格或换行字符分隔的字符串   
1
2
3
4
5
6
7
8
# 查找文件的 行数 单词数 字节数 文件名
wc text.txt
结果:
7     8     70     test.txt

# 统计输出结果的行数
cat test.txt | wc -l
1
2
3
4
5
6
7

# touch

  • 改变文件或目录时间、如文件不存在则创建文件
# 创建名为test.txt的文件
touch test.txt
1
2

# 清空文档内容

> test.txt
: > test.txt
true > test.txt
cat /dev/null > test.txt
cp /dev/null test.txt
echo "" > test.txt
echo > test.txt
1
2
3
4
5
6
7

# 压缩解压

# tar

  • 用来压缩和解压文件。tar 本身不具有压缩功能,只具有打包功能,有关压缩及解压是调用其它的功能来完成。
  • 弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件
常用参数:   
-c  建立新的压缩文件   
-f  指定压缩文件   
-r  添加文件到已经压缩文件包中   
-u  添加改了和现有的文件到压缩包中   
-x  从压缩包中抽取文件   
-t  显示压缩文件中的内容   
-z  支持gzip压缩   
-j  支持bzip2压缩   
-Z  支持compress解压文件   
-v  显示操作过程   
   
有关 gzip 及 bzip2 压缩:   
   
gzip实例:压缩:gzip fileName .tar.gz 和.tgz  解压:gunzip filename.gz 或 gzip -d filename.gz   
          对应:tar zcvf filename.tar.gz            tar zxvf filename.tar.gz   
   
bzip2实例:压缩:bzip2 -z filename .tar.bz2  解压:bunzip filename.bz2 或 bzip -d filename.bz2   
           对应:tar jcvf filename.tar.gz          tar jxvf filename.tar.bz2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 将文件 1.log, 2.log 全部打包成 tar 包
tar -cvf log.tar 1.log 2.log
或 tar -cvf log.tar log.*

# 将 /data/test 下的所有文件及目录打包到指定目录,并使用 gz 压缩
tar -zcvf test.tar.gz /data/test

# 查看刚打包的文件内容(一定加z,因为是使用 gzip 压缩的)
tar -ztvf test.tar.gz

# 要压缩打包 /data/a, /data/b ,但不要 /data/a/aa
tar --exclude /data/a/aa -zcvf test.tar.gz /data/a/* /data/b
1
2
3
4
5
6
7
8
9
10
11
12

# zip & unzip

  • 压缩解压文件
# 将text.txt文件压缩到test.zip文件中
zip test.zip test.txt

# 将文件夹 /data/test 中的文件进行压缩
zip -r test.zip /data/test

# 把文件解压到当前目录下
unzip test.zip

# 如果要把文件解压到指定的目录下,需要用到 -d 参数。
unzip -d /data/test test.zip

# 解压的时候,有时候不想覆盖已经存在的文件,那么可以加上-n参数
unzip -n test.zip
unzip -n -d /data/test test.zip

# 只看一下zip压缩包中包含哪些文件,不进行解压缩
unzip -l test.zip

# 查看显示的文件列表还包含压缩比率
unzip -v test.zip

# 检查zip文件是否损坏
unzip -t test.zip

# 将压缩文件test.zip在指定目录 /data/test 下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件
unzip -o test.zip -d /data/test/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 远程传输

# scp

  • 复制文件和目录
scp [可选参数] file_source file_target 
参数说明:
-1         强制scp命令使用协议ssh1
-2         强制scp命令使用协议ssh2
-4         强制scp命令只使用IPv4寻址
-6         强制scp命令只使用IPv6寻址
-B         使用批处理模式(传输过程中不询问传输口令或短语)
-C         允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p         保留原文件的修改时间,访问时间和访问权限。
-q         不显示传输进度条。
-r         递归复制整个目录。
-v         详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c         以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F         指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i         从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l         限定用户所能使用的带宽,以Kbit/s为单位。
-o         如果习惯于使用ssh_config(5)中的参数传递方式,
-P         注意是大写的P, port是指定数据传输用到的端口号
-S         指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 从本地复制到远程
# 指定了用户名,之后需要输入密码
scp /data/test.txt root@192.168.0.100:/data
scp /data/test.txt root@192.168.0.100:/data/test.txt
# 未指定用户名,之后需要输入用户名和密码
scp /data/test.txt 192.168.0.100:/data
scp /data/test.txt 192.168.0.100:/data/test.txt

# 复制目录
scp -r /data/test/ root@192.168.0.100:/data/test/ 
scp -r /data/test/ 192.168.0.100:/data/test/ 

# 指定端口号
scp -P 19817 test.txt root@192.168.0.100:/data/test
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# VI 文件编辑

  • 用于文本编辑
游标控制:
h 游标向左移
j 游标向下移
k 游标向上移
l (or spacebar) 游标向右移
w 向前移动一个单词
b 向后移动一个单词
e 向前移动一个单词,且游标指向单词的末尾
( 移到当前句子的首部
) 移到下一个句子的首部
{ 移到当前段的首部
} 移到下一段的首部
[[ 移到当前区段的首部
]] 移到下一个区段的首部
0 移到当前行的首部
$ 移到当前行的尾部
^ 移到当前行第一个非空白字符的地方
+ or RETURN 移动到下一行的第一个字符
- 移动到上一行的第一个字符
n | 移动到当前行的字符n的地方
H 移动到当前屏幕的首部
M 移动到当前屏幕的中部
L 移动到当前屏幕的尾部
nH 移动到当前屏幕首部下的n行
nL 移动到当前屏幕尾部上的n行
Ctrl-F 移动到下一屏
Ctrl-B 移动到上一屏
Ctrl-D 向下移动半屏
Ctrl-U 向上移动半屏

z RETURN 刷新屏幕,调整屏幕,使当前的游标在刷新后的屏幕的首部(是不是不明白???不明白的话,试试就知道是什么意思了)
z . 刷新屏幕,调整屏幕,使当前的游标在刷新后的屏幕的中部
z - 刷新屏幕,调整屏幕,使当前的游标在刷新后的屏幕的尾部
Ctrl-L 刷新屏幕,不调整屏幕位置
Ctrl-R 刷新屏幕,不调整屏幕位置
/text 向下搜索text
/ 重复上次的搜索的内容向下搜索一次
?text 向上搜索text
? 重复上此搜索的内容向上搜索一次
n 重复上此的搜索,向下搜索
N 重复上此的搜索,向上搜索
/text/+n 移动到text所在行的下面n行
?text?-n 移动到text所在行的上面n行

nG 移动到n行
:n 移动到n行
G 移动在最后一行
 
内容编辑:
A:当前行的尾部追加内容
i:游标前插入内容
I:游标后插入内容
o:在鼠标所在行的下面添加内容
O:在鼠标所在行的上面添加内容
ESC:退出编辑模式
Ctrl-T:移动到下一个tab
Backspace:向后移动一个字符
Ctrl-U:删除当前
cw:删除游标所在的字符,然后进入编辑模式
cc:删除游标所在的行,然后进入编辑模式
C:删除从游标所在的位置到行尾的字符,然后进入编辑模式
dd:删除当前行
ndd:删除第n行
D:删除当前行游标所在的位置后面的字符
dw:删除邮编所在的字符
d}:删除当前段剩余的字符
d^:删除游标前到行首的字符
c/pat:删除游标后面到第一次匹配字符间的内容
dn:删除游标后面到下一个匹配字符间的内容
dfa:删除当前行游标到匹配字符间的内容(匹配的字符也将被删)
dta:删除当前行游标到匹配字符间的内容(匹配的字符不被删)
dL:删除从游标到屏幕的最后一行之间的内容
dG:删除从游标到文件末尾之间的内容
J:连结上下两行的内容
p:在游标后面插入buffer中的内容
P:在游标前面插入buffer中的内容
rx:用x替换字符
Rtext:用text从游标开始处进行替换
u:撤销最后的改变
U:还原当前行的内容
x:向后删除游标所在位置的字符
X:向前删除游标前面的字符
nX:删除前面的n个字符,游标所在的字符将不会被删
.:还原最后的改变
~:反转字母的大小写
y:拷贝当前行到新的buffer
yy:拷贝当前行
"xyy:拷贝当前行的buffer名为x的buffer
ye:拷贝当单词的末尾
 
文件操作:
:w 写文件
:w! 写文件,忽略警告信息
:w! file 覆盖文件,忽略警告信息
:wq 写文件之后退出编辑
:q 退出编辑器
:q! 强制退出编辑器
:w file 把文件的内容写到另一个文件
ZZ 退出编辑器,如果文件有改动,则保存再退出
:x 退出编辑器,如果文件有改动,则保存再退出
:n1,n2w file 把n1行到n2行间的内容写到文件file
:n1,n2w >> file 把n1行到n2行间的内容追加到文件file
:e file2 在当前文件的命令行模式下编辑file2
:e! 重新从磁盘加载文件
:e# 交替编辑文件
 
:n 编辑地下一行
:n! 编辑地下一行(忽略警告)

:r file 在游标后面插入文件
:r !command 在当前行的后面,插入运行命令后的输出内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# 常用技巧
# 复制一行
yy
p      定位光标,插入

# 复制多行
v      进入视图模式,然后按方向键选择内容
y      复制选中的内容
p      定位光标,插入内容

# 删除一行
dd

# 删除光标后单个字串
x

# 撤销操作
u
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
上次更新: 7/21/2022, 10:06:03 AM