Linux常用命令

一、Linux命令概述
1、Linux命令的分类
Linux命令的执行必须依赖于Shell命令解释器。Bash是Linux系统中默认使用的Shell程序,文件位于/bin/bash。
根据Linux命令与Shell程序的关系,一般分为以下两种类型:
内部命令:指的是集成于shell解释器程序(如bash)内部的一些特殊指令,也称为内建(Built-IN)指令。内部命令属于shell的一部分,所以并没有单独对应的系统文件,只要shell解释器被运行,内部指令也就自动载入内存了,用户可以直接使用。内部命令无需从硬盘中读取文件,因此执行效率更高。
外部命令:指的是linux系统中能够完成特定功能的脚本文件或二进制程序,每个外部命令对应了系统中的一个文件,是属于shell解释器程序之外的命令,所以称为外部命令。Linux系统必须知道外部命令对应的文件位置,才能够由shell加载并运行。
2、Linux命令行的格式
命令字 [选项] [参数]
命令字:命令字即命令名称
选项:
? 使用单字符的选项时,一般在选项前使用“-”符号(半角的减号符)引导,称为短格式选项
? 使用多字符的选项时,一般在选项前使用“--”符号(两个半角的减号符)引导,称为长格式选项。
参数:命令参数是命令字的处理对象。
经验总结:在实际使用Linux命令行的过程中,“选项”和“参数”的称谓经常容易混淆,甚至前后顺序也可以颠倒,但一般不会影响到命令的执行结果,所以很多时候并不做严格区分。
3、命令行界面几个辅助操作
①Tab键:按一次补全(必需是命令的唯一标识字串时才会补全),按两次列出所有可能项。
②反斜杠“\”:强制换行,如果输入的一行命令内容太长,终端会自动换行。有时候为了显示美观及方便查看,也可以插入“\”强制换行,在一行出现的“>”提示符后可以继续输入内容,将作为上一行命令的延续。
③Ctrl+U:快速删除光标之前的所有字符。
④Ctrl+K:快速删除光标处及之后的所有字符。
⑤Ctrl+A:快速移动到行首。
⑥Ctrl+L:清屏
⑦Ctrl+C:强制取消当前操作。
4、获得命令帮助

(1)使用help命令
help命令本身是Linux Shell中的一个内建指令,其用途是查看各Shell内部命令的帮助信息。
例如:help pwd
为什么运行printf --help不能查看帮助呢?
在bash环境下面,运行help可以看见所有的内置命令,可以看见内置命令包括printf,命令同名时,内置命令的优先级高于外部命令,并且内置命令用help printf来查看帮助。
综上所述,查看内置printf命令的帮助用help printf,查看外部printf命令的帮助要带上全路径,运行/usr/bin/printf --help 或 help /usr/bin/printf 查看帮助(不带全路径会被认为是内置printf命令)。

(2)使用“--help”选项
对于大多数linux外部命令,都可以使用一个通用的命令选项“--help”,用于显示对应命令字的格式即选项等帮助信息。
例如:ls --help
(3)使用man手册页
man手册页(Manual Page)是Linux系统中最为常用的一种在线帮助形式,绝大部分的外部软件都在安装时为执行程序、配置文件提供了详细的帮助手册页。
例如:阅读file命令的帮助手册页信息(file命令用于判断文件的类型):man file
阅读man手册页时,使用“↑↓”方向键可以向上、向下滚动一行文本内容;使用Page Up和Page Down键可以向上、向下翻页。按Q或q键可以退出手册页。按“/”键可以对手册内容进行查找,如输入“/-v”可以查找到“-v”选项的帮助信息,若找到的结果有多个,可以按N、n键分别用于向上、向下进行定位选择
例 2.5将ls命令的man手册页的内容保存为文本文件lshelp.txt。
man ls | col -b > /tmp/lshelp.txt
(4)使用info命令
信息页(Info Page)是Linux系统中提供的另外一种在线帮助形式,功能与man手册页类似,但提供的信息通常会更加详尽,而且提供了不同帮助主题间的跳转功能。例如:info file
通常使用man手册页已经能够满足绝大部分的命令在线帮助需求,因此时用到info命令的情况较少。
二、文件和目录管理
1、目录操作命令
(1)pwd命令--查看当前工作目录(Print Working Directory)
(2)cd命令--切换工作目录(Change Directory)
若不指定目标目录位置,将缺省切换到当前用户的宿主目录(家目录),宿主目录是Linux用于登录系统后默认的工作目录。例如root用户的宿主目录位于/root,用于teacher的宿主目录位于/home/teacher/。
? 绝对路径:这种方式以根目录为起点,若要确切表明grub是一个目录(而不是一个文件),可以在最后也加上一个目录分隔符,如表示为“/boot/grub/”。
? 相对路径:这种方式一般以当前工作目录为起点,在开头不使用“/”符号,相对路径主要包括以下几种形式:
①直接使用目录名或文件名,用于表示当前工作中的子目录、文件的位置。
②“./”开头,表示当前目录下,例:路径执行一个当前目录中的命令就必须加上“./”,否则系统会默认在PATH路径下找。
③“../”开头,表示父目录下,例如若当前处于“/boot/grub/”目录中,则“../vmlinuz”等同于“/boot/vmlinuz”。
④使用“~用域名”的形式开头,表示指定用户的宿主目录下,省略用户名时默认为当前用户的宿主目录下。
“cd -”:上一次执行cd命令之前所处的目录。(上一次cd工作目录)
“cd ~”等于“单独执行cd”
(3)ls命令--列表显示目录内容(List)
ls选项:aAldhR --color
①-a:显示所有。包括以点号“.”开头的隐藏目录和隐藏文件。
②-A:显示除“.”和“..”以外的所有。 “.”和“..”是两个特殊隐藏目录(当前目录和父目录)。
③-l:长格式显示,ls默认以短格式显示。
④-d:只显示本身属性,而不显示子目录属性。
⑤-h:以k、m等单位显示。
⑥-R:递归显示(更深层次的子目录和文件)。
⑦--color:在字符模式中以颜色区分不同的文件。
“--color=tty”表示使用终端预定义的颜色方案。一般是这样的:深蓝色表示目录、白色表示一般文件、绿色表示可执行文件、黄色表示设备文件、红色表示压缩文件。
⑧-i:显示i节点号
⑨--sort=time :显示时按照时间排序(最新的在最前头)
sort by WORD instead of name: none (-U), size (-S), time (-t), version (-v), extension (-X)
ls -l 输出格式详解:
drwxrwxrwx 6 www www 4096 Oct 16 11:32 style
前面十位字符,分成四段来看 d | rwx |rwx |rwx 第一段代表文件类型,后三段是文件权限
紧接着后面的 6代表“文件硬链接数”或“目录子对象数”。
对象是文件时,这个数字代表有多少个硬链接指向它,没有额外硬链接则为1;
对象是目录时,则是它包含的子文件/目录数,需要注意的是每个目录都会有两个子目录,".",".."分别指向当前目录和父目录,所以这个数字会比我们正常看到的目录多2。

? 同时查看多个文件时,以空格分隔:ls -l install.log /etc/hosts
通配符:?表示任意单个字符(相当于正则表达式的.),表示0到任意多个字符(即0到正无穷个字符)
例如:以长格式列出/etc/目录下以“ns”开头、“conf”结尾的文件信息:ls -lh /etc/ns
.conf
alias别名机制: alias 别名=‘实际命令‘ 例如:alias dir=‘/bin/mkdir‘
unalias 别名:取消命令别名 unalias -a:取消所有别名
单独执行alias时,可以查看当前用户环境中已经定义好的命令别名。
(4)mkdir命令--创建新目录(Make Directory)
-p:创建多层目录(递归创建)。若不使用“-p”选项,则只能在已存在的目录中创建其子目录。
-p的另一用途:加-p后,若未存在则创建,若已存在也不会报错(相当于未执行),用于脚本多次执行。
例如 同时创建多个目录:mkdir mp3 mp4 mp5
mkdir /usr/local/zookeeper/{server0,server1,server2}
补充:创建目录、文件时前加点“.”是创建隐藏目录、文件
(5)du命令--统计目录和文件的空间占用情况(estimate file space usage)
文件大小和文件空间占用情况不同:因为磁盘在分区时指定簇大小(如4K),占磁盘空间时以簇为最小单元,5k的文件也需占两个簇,所以用ls -l查文件大小为5k,du查文件空间占用情况为8K。
①-a:分别统计各个文件的空间占用情况。
②-h:以k、m等单位显示。
③-s:汇总统计所有文件的总空间占用情况。
用du -sh /u01/* 可以针对/u01/下各个子目录/文件,分别汇总统计他们的空间占用情况

④--apparent-size(简写为--apparent就行):打印表面大小,而不是空间占用情况。“表面大小”通常比“空间占用”小,但也可能由于稀疏(空洞)文件 、内部碎片、间接块等原因导致表面大小比“空间占用”大。
⑤-x:禁止跨越FS(同rsync的-x)(即禁止统计挂载的目录)
⑥--exclude=PATTERN 排除指定模式的文件
比如说排除/proc目录,因为/proc目录无法被统计

du -sh -x /* --exclude=proc

2、文件操作命令
(1)touch命令--新建空文件/更新文件时间
可以同时创建多个文件:touch file1.txt file2.txt
(2)file命令--查看文件类型
例2.20 查看ls命令程序的文件类型(32/64位执行程序)

例2.21 查看/etc/init.d/network文件的类型(文本格式的shell执行脚本)

例2.22 查看/etc/resolv.conf文件的类型(ASCII格式的普通文本文件)

(3)cp命令--复制文件或目录(Copy)
基本使用格式:cp [选项] ... 源文件或目录 ... 目标文件或目录
注意:若需要复制的源是多个文件或目录时,则目标必须是目录。
①-f:(force)强制复制(有同名目标时不提醒)。
②-i:(Interactive)交互式复制(有同名目标时提醒)。
③-p:(Preserve )保持源文件的权限、属主、时间标记等属性不变
④-r:递归复制,又叫复制目录。复制目录时必须使用此选项。
补充:Linux CentOS中cp复制强制覆盖已存在的目标
Linux下默认cp命令是有别名的(alias cp=‘cp -i‘),无法在复制时强制覆盖,即使你用 -f 参数也无法强制覆盖文件,下面提供几个从网上找的Linux下cp命令覆盖的方法。
1) 取消cp的alias(放心这不是永久生效):
#unalias cp
#cp a /test/a
2) 加反斜杠 \cp 执行cp命令时不走alias: #\cp a /test/a (就用此)
3)另外一个有意思的方法: #yes|cp a /test/a
补充:cp中大括号{}的用法
大括号中的字串用逗号分隔,表示或字关系紧临前后字符串。

例2.25 将目录/boot/grub、/etc/httpd/conf复制到当前目录中:cp -r /boot/grub/ /etc/httpd/conf/ ./
(4)rm命令--删除文件或目录(Remove)
①-f:强制删除(不提醒)
②-i:交互式删除(默认的)
③-r:递归删除,又叫删除目录。 删除目录时必须使用此选项。
例如:一次删除多个文件 :rm -rf file1 file2
(5)mv命令--移动文件或目录(Move) ,也可用于改名(同路径移动时,相当于改名)
基本使用格式:mv [选项] ... 源文件或目录...目标文件或目录
例2.28 将当前目录中的mytouch程序文件改名为tfile.exe:mv mytouch tfile.exe
例2.29 将当前目录中的grub目录转移至public_html目录中:mv grub public_html/
(6)which命令--查找命令的路径(Remove)
内部命令没有路径,which只用于查找外部命令的路径。如cd命令:

搜索范围主要是“默认命令搜索路径 ”和“命令别名”。在rhel5系统中搜索范围还包括用户环境中设置的命令别名。
默认当找到第一个目标后即不再继续查找,若希望在搜索路径中查找所有匹配项,可以添加“-a”选项。 -a:查找所有匹配项
(7)find命令--查找目录文件
基本使用格式: find pathname 查找条件 [-print -exec -ok]
该命令的参数:
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。(默认就是标准输出)
-exec: find命令可以对查找的结果进行过滤处理,在表达式后添加一个“-exec”关键字,并设置过滤命令即可。在过滤命令中,使用“{}”表示find相应命令的输出结果,最后需要添加“[空格] \;”表示命令结束。形式为-exec command {} \;,注意{ }和\;之间的空格。{}为查找结果,作为命令的参数灵活调用,并不一定要放到最后
例如:#find / -user ira -exec cp {} /root/findfiles \;
-ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
查找条件类型:每一个选项前面跟随一个横杠-。根据“ll file1”的属性来顺序记忆
①-name 按照文件名来查找文件,允许使用?*通配符。
②-mtime +n/-n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n
表示文件更改时间距现在n天以前(+n表示n天以前,-n表示n天以内)。
-mmin +n/-n按照文件的更改时间来查找文件, +n表示n分钟以前,-n表示n分钟以内
③-size 根据文件大小寻找文件。
-empty 查找大小为0的目录或文件
④-user 按照文件属主来查找文件。
-group 按照文件属组来查找文件。、
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-nogroup 查找无有效属组的文件,即该文件所属的组在/etc/group中不存在。
⑤-perm 按照文件权限来查找文件。
⑥-type 查找某一类型的文件,诸如:
b 块设备文件。块设备是可随机读写的设备,例如硬盘。
c 字符设备文件。字符设备必须是顺序读写的,比如串口
d 目录。
f 普通文件。
p 管道文件。管道文件是一种很特殊的文件,主要用于不同进程间的信息传递。当两个进程间需要进行数据或信息传递时,可以通过管道文件。一个进程将需传递的数据或信息写入管道的一端,另一进程则从管道的另一端取得所需的数据或信息。通常管道是建立在缓存中.
l 符号链接文件。
同时使用多个查找条件:若有多个查找条件时,用-a、-o连接,表示而且(and)、或者(or)。
例2.35 在/boot目录中查找超过1024KB而且文件名以“vmlinuz”开头的文件。

练习:
1、如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是*.txt的文件:

find . -name “[a-z][a-z][0--9][0--9].txt” -print

2、在当前目录下查找文件权限位为7 5 5的文件,即文件属主可以读、写、执行,属组可以读、执行,其他用户可以读、执行的文件:

find . -perm 755

-perm mode
文件的权限位恰好是 mode
-perm -mode
所有的权限位 mode 都被设置了的文件。(文件的权限最少是mode)
-perm +mode
任何权限位 mode 被设置了的文件(文件的权限最多是mode)
例如:
用760为例,760的权限位 mode = 111 110 000 这个样子
find . -perm 760 是说恰好为760 , rwxrw----
find . -perm -760 是说第一组满足7,第二组满足6就可以了,后一组无所谓,rwxrw----或rwxrwxr--等都满足。这就是 mode 中的那些 1 位必须全部满足
find . -perm +760 是说3组中只要有一个满足就可以了,因此 r-x------ 也会入选,范围又扩大很多,就是说 mode 中任何 1 位得到满足都会入选
3、为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主
在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名;find命令能够为你完成相应的工作。例如,希望在/ h o m e目录下查找所有的这类文件,可以用:

find /home -nouser

4、希望在系统根目录下查找更改时间在5日以内的文件,可以用:

find / -mtime -5

为了在/var目录下查找更改时间在3日以前的文件,可以用:

find /var/adm -mtime +3

5、查找系统中所有文件长度为0的普通文件,并列出它们的完整路径,可以用:

find / -type f -size 0 -exec ls -l {} \;

find / -type f -empty -exec ls -l {} \;

为了查找/var/log目录中更改时间在7日以前的普通文件,并删除它们,可以用:
$ find /var/logs -type f -mtime +7 -exec rm {} \;
6、找出所有用户 ira 拥有的文件,并且把它们拷贝到/root/findfiles 目录中
#mkdir /root/findfiles
#find / -user ira -exec cp {} /root/findfiles \; //{}为查找结果,作为命令的参数灵活调用,并不一定要放到最后
(8)ln命令--为文件或目录建立链接(Link)
基本使用格式:ln [-sf] 源真实目录/文件 链接文件 巧记方法:众所周知,ln是创建链接文件的命令,一般命令的操作对象都放在最后,所以ln的最后一个参数为操作对象“链接文件”
-s:创建软链接
-f:强制替换已存在的同名文件(即使存在的是普通文件,也会被链接文件替换)
? 当目标是一个已存在的目录时,就表示在此目录下创建与源同名同路径的链接文件(新创建的链接文件将保存到该目录中,并使用与“源真实目录/文件”相同的路径和名称)。
例如 已存在目录/etc/,为文件/etc/sysconfig/network-scripts/ifcfg-eth0创建符号链接文件,并保存到/etc/目录中。

例2.39 为网卡配置脚本文件“/usr/sbin/system-config-network”建立名为/sbin/mynetconfig的硬链接文件,以便通过mynetconfig文件也可以对网卡参数进行配置。

system-config-network配置界面,类似于命令setup,都可在securecrt中打开。

链接文件类型:硬链接、软链接(符号链接)。区别详见“linux软链接与硬链接的区别”
注意:不能对目录创建硬链接,也不能跨越不同分区创建硬链接。无论使用哪种链接,与直接访问原始文件的效果基本相同。
区别:硬链接是索引节点的链接,软链接是硬链接和目录的链接。
【硬链接】
硬链接指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种链接就是硬链接。硬链接的作用是允许一个文件拥有多个有效路径名 ,这样用户就可 以建立硬链接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该文件的索引节点有一个以上的链接。只删除一个链接并不影响索引节点本身和其它的链接,只有当最后一个链接被删除后,文件数据块的链接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬链接文件均被删除。
【软链接】
另外一种链接称之为符号链接(Symbolic Link),也叫软链接。软链接文件有类似于Windows的快捷方式。它是硬链接和目录的链接,而硬链接是索引节点的链接。符号链接实际上是一个特殊的文件。在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
补充:若删除了源文件,软连接会找不到源文件,会变红,硬链接不会受影响。
3、文件内容操作命令
(1)cat命令--查看并连接文件的内容(Concatenate)
(2)more和less命令--分页查看文件内容
more命令为较早出现的分页显示命令,表示文件内容还有更多(more)的意思,less命令是较晚出现的分页显示命令,提供了比早期more命令更多的一些扩展功能,两个命令的用法基本相似。
Enter:下一行 空格:下一页 b:上一页 q:退出 例如:more /etc/httpd/conf/httpd.conf ls -lh /ctf.txt | more
(3)head和tail命令--开头末尾查看文件内容
-2/3/5:指定行数,若不指定行数,默认只显示10行。 -f:跟踪(follow) --->ctrl+c取消
例如:head -3 /etc/passwd tail -f /var/log/messages
(4)wc命令--统计文件内容中的数量信息(Word Count)
数量包括:行数(-l)、单词数(-w)、字节数(-c),默认情况下相当于三个选项都使用。
统计单词时以空格来区分计数。
例如:wc -l /etc/passwd
(5)grep命令--截取文件内容
基本使用格式:grep [选项] ...截取条件 ...目标文件
-i:忽略大小写(Ignore Case)
-v:反转查找(inVert)
^word:表示以word开头 word$:表示以word结尾 ^$:表示空行。
补充:
? lspci -tv:查看主机中的pci设备信息。同理lsusb -tv:查看主机中的usb设备信息。 lsmod:查看内核加载的模块
4、归档及压缩命令
(1)gzip和bzip2命令--压缩或解压
不同于tar,tar是打包,此是直接把原文件压缩(即修改原文件)。一般bzip2的压缩效率要好一些。
-9:提高压缩比率。
-d:解压(或使用专用解压命令gunzip、bunzip2)
-c:保持原文件不变,把内容标准输出(到屏幕)。
gzip建议使用扩展名“.gz”,bzip2建议使用扩展名“.bz2”,zip使用扩展名“.zip”
例如:使用gzip命令将当前目录下的tfile.exe文件进行压缩:gzip -9 tfile.exe

使用bzip2命令将当前目录下的tfile.exe文件进行压缩:bzip2 -9 tfile.exe

使用gzip/bzip2命令解压:gzip -d tfile.exe.gz

使用gunzip/bunzip2命令解压:bunzip2 tfile.exe.bz2

补充: zip和unzip命令:不同于gzip和bzip2的地方:zip和unzip解压不会删除原文件
把/home目录下面的zhangsan目录压缩为zhangsan.zip:zip -r /home/zhangsan.zip /home/zhangsan
-r:递归压缩,压缩目录时一定要指定此选项。 -9:提高压缩比率。
-t:检查压缩文件是否正确(单独检查时使用) -v:执行是时显示详细信息 -q:执行时不显示任何信息

.zip文件要用unzip命令来解压:unzip /home/zhangsan.zip -d /tmp/
-d:指定解压目录
(2)tar命令--打包和解包
归档即打包,打包时也可以进行压缩,tar命令选项的短杠“-”可以省略。
打包:tar [选项] ... 归档文件名 需要归档的源 例:tar zcvf /tmp/ctf.tar.gz /etc/ /boot/
解包:tar [选项] ... 归档文件名 [-C 解包目录] 例:tar zxvf /tmp/ctf.tar.gz -C /
选项:cxCjz,ftprv
①-c:创建(打包)。
②-x:解包(注意区分解包和解压) 。
③-C,--directory=DIR:指定解包/打包目录(改变目录DIR) (打包时是:指定打包目录 ;解包时是:指定解包目录)(默认解包到当前目录下)
④-j:调用bzip2压缩或解压。 ⑤-z:调用gzip压缩或解压。
⑥-f:打包成归档文件。
⑦-t:列表查看包内文件。 例:tar -tvf /tmp/ctf.tar.gz
⑧-p:打包时保留文件及目录的权限。
⑨-r:向现有归档文件 末尾追加文件。用于rpm -ql查询不完全,没有打包完整,可以继续查询追加。 不能与cjz选项并用(即只能是zcvf和rvf两种组合)
例如:我远程电脑上没有安装yum,而我又不想找yum的rpm包,则可以在一台已经安装yum的系统上(必须与远程系统版本号相同)把yum安装的所有目录/文件打包到远程电脑上解包,即可使用yum。
rpm -ql yum | xargs -i tar rvf /tmp/yum.tar {}
在docker容器中:scp root@192.168.1.7:/tmp/yum.tar /tmp/
tar xvf /tmp/yum.tar -C /
像一些个系统内核命令useradd等直接把命令文件拷贝到容器即可使用
which useradd 输出 /usr/sbin/useradd
在docker容器中 :scp -p root@192.168.1.7:/usr/sbin/useradd /usr/sbin/
⑩-v:显示详细信息。
tar命令的补充:
1)--exclude 排除某个目录或文件
tar zcvf /tmp/fd.tar.gz --exclude=file1 --exclude=dir1

tar zcvf /tmp/fd.tar.gz
--exclude=file1 --exclude=dir1 //以此为准

tar --exclude=file1 --exclude=dir1 zcvf /tmp/fd.tar.gz
如下的书写是错误的:
tar zcvf --exclude=file1 --exclude=dir1 /tmp/fd.tar.gz
(X)
--exclude的模式也支持通配符
tar zcvf /tmp/haha.tar.gz
--exclude=nginx.log --exclude=supervisord.log

注意:
1、--exclude=file1
2、要排除一个目录是--exclude=dir1 而不是--exclude=dir1/


如果想不包含部分的特定文件列表,可以把不包含的文件放到一个文件ext.txt,然后
tar zcvf backup_1.tar.gz --exclude=resource* -X ext.txt /opt/data
就可以了。
我的ext.txt文件内容如下:
$ cat /tmp/ext.txt
/opt/data/devs/locks/db-logs.lock
/opt/data/devs/locks/db.lock
/opt/data/devs/hooks/post-revprop-change.tmpl
/opt/data/devs/hooks/pre-lock.tmpl
/opt/data/devs/hooks/post-unlock.tmpl
/opt/data/devs/db/transactions
/opt/data/devs/db/txn-current-lock
/opt/data/devs/db/write-lock
/opt/data/devs/db/format
/opt/data/devs/conf/passwd
这样就可以在打包的时候不包含以上的文件或者目录。

2)-N "yyyy/mm/rr": 只打包指定“时间或文件”之后的文件(只打包比指定时间或文件更新的文件)
tar zcvf /ctf.tar.gz -N "2016-01-26 00:00:00" --exclude=yum_save_tx.2016-01-28.05-10.6MQeyP.yumtx *

3)另外一个非常有用的重定向操作符"-",用 – 作为 “归档文件名”(-在此处表示打包到标准输出/从标准输入解包)
请看下面这个例子: (cd /source/directory &&tar cf - . ) | (cd /dest/directory && tar xvfp -)
解析:
$ (cd /source/directory&& tar cf - . ) ## 进入/source/directory目录,然后打包当前目录 ( 即原命令中的那个. )
这里用了 – 作为“归档文件名”,表示打包到标准输出
(cd /dest/directory && tar xvfp -)
这里用了 – 作为“归档文件名”,表示从标准输入解包。
该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到 /dest/directory 目录下去,这个命令在 /source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。(比如向nfs挂载目录中拷贝时,当源文件数比较小而且多时,这种方法就比scp和rsync要快数十倍)
由于用了管道及标准输入输出,所以这一动作不会产生中间文件。(想象一下在windows下,你要做同样的事情,就必须先产生一个实际的打包文件,然后拷贝到目的地,然后解压,然后再删除产生的打包文件。
本例中在同一台主机上操作其实没有什么实际意义,用cp命令就可以了(也不是,当源文件数比较小而且多时,这种方法就比scp和rsync要快数十倍)。这种用法用在两台主机之间时就很好用了,比如通过ssh来拷贝某个目录:(cd /root/test && tar cf - .) | ssh remote_host "cd /root/test2 && tar xvfp -"
就可以将本地的 /root/test下的内容,通过ssh连接,拷贝到远程remote_host上的 /root/test2 下。

还可以这样用:下载tar包后直接管道解包:
curl https://www.kernet.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar zxvf -

4)tar+ssh实现异地备份(远程打包拷贝)
以前有个别服务器备份是用tar+gzip打包压缩后再ftp传到异地备份,现改成通过tar+ssh的方式,可以直接备份到异地,减少在本地生成备份包,及通过内部网络传输来降低tar+gzip打包时对磁盘的IO压力。
ssh无密码登陆请参考“ssh免密码登录课本笔记版”
① 本地一边打包压缩,一边传输到异地解压:(本地打包,传递到远端解包)
(cd /usr/local;tar zcvf - zookeeper) | (ssh root@zookeepernode1 "cd /usr/local;tar zxvf -")
管道后面ssh的小括号可有可无,只有当两个分号分隔的命令为一组时,才需用小括号括起来。

② tar打包压缩到远程服务器:(本地打包,传递到远端不解包)
有两种方式,一是通过dd of,一是cat >,测试是dd of快一些,不过是跟当时服务器的负载有关系
[root@local ~]# time tar zcvf – -T /mail/backup/DIR.txt |ssh root@192.168.0.103 “dd of=/mail/test.tar.gz”
tar: Removing leading /’ from member names<br/>2696500+0 records in<br/>2696500+0 records out <br/>real 6m51.373s<br/>user 3m8.539s<br/>sys 0m14.306s<br/>[root@local ~]# time tar zcvf – -T /mail/backup/DIR.txt |ssh root@192.168.0.103 “cat &gt; /mail/2.tar.gz”<br/>tar: Removing leading/’ from member names
real 9m31.059s
user 3m10.916s
sys 0m14.924s
[root@target test]# ll test.tar.gz 2.tar.gz
-rw-r–r– 1 root root 1378488320 Apr 17 11:47 2.tar.gz
-rw-r–r– 1 root root 1380608000 Apr 16 18:06 test.tar.gz

③ 把本地的压缩包直接解压到远程服务器 (本地有tar包,传递到远端解包)
zcat dir.tar.gz | ssh 192.168.0.116 "cd /opt; tar xvf -" 或者
cat dir.tar.gz | ssh 192.168.0.116 "cd /opt; tar zxvf -" 或者
ssh 192.168.0.116 "tar zxvf -" < file.tar.gz
④ 把远端服务器的压缩包直接解压到本地:(远端有tar包,传递到本地解包)
ssh root@192.168.0.103 “cat /mail/test.tar.gz” | tar zxvf -

⑤ 也可以本地服务器进行打包,再到异地服务器进行压缩:(个人感觉这个功能比较鸡肋,可以不用记了)
[root@local ~]# time tar cf – -T /mail/backup/DIR.txt |ssh root@192.168.0.103 “gzip -1 > /mail/3.tar.gz”
tar: Removing leading `/’ from member names
real 7m18.473s
user 0m29.029s
sys 0m12.023s

三、使用vi文本编辑器
一般用vim而不用vi,vim是升级版,有颜色方案。
1、vi编辑器的工作模式
命令模式、输入模式、末行模式

2、命令模式中的基本操作
vim指定要编辑的文件名作为参数,若该文件并不存在,则vim将根据该文件名打开一个新的空文件。
(1)模式切换
a、i、o切换到输入模式
①a:(after)在光标之后插入内容 ③i:在光标之前插入内容。 ⑤o:在本行之下插入一个新行。
②A:在行尾插入内容 ④I:在行首插入内容。 ⑥O:在本行之上插入一个新行。
(2)光标移动
统一首行叫“第一行”,尾行叫“最后一行”(为了避免和行首、行尾叫法混乱)。下面有多个可选操作时,只记黄色标注的。
①方向移动:↑↓←→
②翻页移动:上翻页:PageUp、Ctrl+B 下翻页:PageDown、Ctrl+F 。PageUp、PageDown同样适用于vi的输入模式。
③行内快速跳转:快速跳转到本行的行首:Home、^、 数字“0”
快速跳转到本行的行尾:End、$
④行间快速跳转: 5G:跳转到第5行==末行模式中“:5” gg:跳转到第一行 G:跳转到最后一行。
(3)复制粘贴删除(删除相当于剪切)
1)复制(其格式也适用于“删除”): yy:复制本行 5yy:复制到第5行 yG:复制到最后一行
2)粘贴: p:粘贴到光标之后(下一行) P:粘贴到光标之前(上一行)
3)删除:①dd:删除当前行。 ②5dd:删除到第5行(从当前行开始算)。 ③dG:删除到最后一行(从当前行开始算)。
④x 、Del:删除光标处的单个字符。
⑤d^:删除光标之前到行首的所有字符。
⑥d$:删除光标处到行尾的所有字符。
⑦dw:全局删除指定字串。空格分隔,删除单词,无单词时删除空行。
(4)文件内容查找
①/ctf :从光标处向后查找 ②?ctf :从光标处向前查找 ③n、N:上下选择查找结果
补充:文件内容查找支持正则表达式(注意不是通配符),比如说查找purge mariadb-server mysql-commonr,可以这么写/purge.mysql
(5)撤销编辑、保存退出
①u:撤销最近一次的操作 ②U:撤销本行的操作 ③ZZ :保存并退出
3、末行模式中的基本操作
补充: 末行模式中“:set nu”----显示行号, “:set nonu”----取消显示行号, “:set ic”----不区分大小写(常用于文件内容查找时)
(1)保存并退出
①w:保存 ②w+文件名:另存为 ③q:退出 ④q!:强制退出(不保存退出) ⑤wq:保存并退出== x
(2)编辑新文件和读入其他文件内容到当前行下
①:e 新文件:编辑新文件 例如:
②:r 文件名:读入其他文件内容到当前行下 例如:
:r!command:读入命令的输出结果到当前行下。 例如:
补充: :!command:执行shell命令command
:n,m w!command:将当前文件n至m行的内容作为指定命令的输入并执行之,若不指定n,m,则表示将整个文件内容作为command命令的输入
(3)文件内容替换
:[替换范围 ] sub /旧的内容/新的内容/ [c,e,g,i] //其中“旧的内容”又称为“搜索字串”,“新的内容”又称为“替换字串”
“替换范围”下面几种形式:①%:整个文件 ②n,m:指定行数范围 ; 其中n,m也可以为“.,$”(当前行到最后一行), “.或空”表示当前行(当前光标所在行),$表示最后一行 ③用包含和模式表示行的范围(类似于sed中的用法)
有以下一些表示方法:
不写range : 默认为光标所在的行。
.或空 : 当前行。当前行即当前光标所在的行
1 : 第一行。
$ : 最后一行。
33 : 第33行。
‘a : 标记a所在的行(之前要使用ma做过标记)。
+1或 .+1 : 当前行的下一行(行号大了1)。当前行即当前光标所在的行 例如 :.,.+3 表示当前行到下面第3行。由于“空”也表示当前行,so此例子也可这么写 :,+3
$-1 : 倒数第二行。(这里说明我们可以对某一行加减某个数值来取得相对的行)。
22,33 : 第22~33行。
1,$ : 第1行 到 最后一行。
1,. : 第1行 到 当前行。
.,$ : 当前行 到 最后一行。
‘a,‘b : 标记a所在的行 到 标记b所在的行。
% : 所有行(与 1,$ 等价)。
?chapter? : 从当前位置向上搜索,第一个包含chapter的行。(其中chapter为字符串时表示包含,为正则表达式时表示模式匹配)
/chapter/ : 从当前位置向下搜索,第一个包含chapter的行。(其中chapter为字符串时表示包含,为正则表达式时表示模式匹配)
注意,上面的所有用于range的表示方法都可以通过 +、- 操作来设置行的相对偏移量。(+n表示向下偏移n行(行号大了n),-n表示向上偏移n行)
举例:①:sub/i/I ②:10,20sub/i/I/g ③:10,20s/i/I/g ④:%s/ 旧的内容/新的内容/g
补充:vim实现批量注释(注释符号有#、//、分号等)
①在10-20行添加//注释--- :10,20s#^ #//#g //此处以#作为分隔符(当替换字串与分隔符相冲突时,要改用其他字符作为新分隔符)
②在10-20行添加#注释--- :10,20s/^/#/g
③删除注释--- :10,20s/^#//g
实现把函数中某一段代码空出四个空格 :/chown -R kube/,/service docker restart/s/^/ /g
实现把函数中某一段代码删除行首四个空格 :17,38s/^ //g

上一篇:Versal AIE 上手尝鲜 2 -- Linux例程


下一篇:photoshop文件菜单中的另存为和另存为网页格式的区别