From aebe5ac4551c210de7eb3b91e4c62b054e830e0e Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 30 Nov 2016 17:09:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/arj.md | 22 ++++ command/basename.md | 47 +++++++ command/bzcat.md | 39 ++++++ command/bzcmp.md | 22 ++++ command/bzdiff.md | 22 ++++ command/bzgrep.md | 22 ++++ command/bzless.md | 21 ++++ command/bzmore.md | 21 ++++ command/diff3.md | 35 ++++++ command/dirname.md | 40 ++++++ command/dos2unix.md | 62 ++++++++++ command/emacs.md | 161 ++++++++++++++++++++++++ command/expand.md | 27 ++++ command/head.md | 30 +++++ command/hexdump.md | 60 +++++++++ command/iconv.md | 46 +++++++ command/install.md | 81 ++++++++++++ command/less.md | 34 +++++ command/more.md | 55 ++++++++ command/nano.md | 101 +++++++++++++++ command/nl.md | 94 ++++++++++++++ command/pathchk.md | 32 +++++ command/popd.md | 41 ++++++ command/pr.md | 28 +++++ command/printf.md | 73 +++++++++++ command/pushd.md | 44 +++++++ command/rename.md | 77 ++++++++++++ command/rev.md | 55 ++++++++ command/scp.md | 76 ++++++++++++ command/setfacl.md | 282 ++++++++++++++++++++++++++++++++++++++++++ command/strings.md | 51 ++++++++ command/tac.md | 28 +++++ command/tail.md | 47 +++++++ command/uncompress.md | 43 +++++++ command/unexpand.md | 29 +++++ command/unlink.md | 28 +++++ command/updatedb.md | 35 ++++++ command/vi.md | 104 ++++++++++++++++ command/zcat.md | 37 ++++++ command/zfore.md | 21 ++++ command/zipsplit.md | 29 +++++ command/znew.md | 32 +++++ 42 files changed, 2234 insertions(+) create mode 100644 command/arj.md create mode 100644 command/basename.md create mode 100644 command/bzcat.md create mode 100644 command/bzcmp.md create mode 100644 command/bzdiff.md create mode 100644 command/bzgrep.md create mode 100644 command/bzless.md create mode 100644 command/bzmore.md create mode 100644 command/diff3.md create mode 100644 command/dirname.md create mode 100644 command/dos2unix.md create mode 100644 command/emacs.md create mode 100644 command/expand.md create mode 100644 command/head.md create mode 100644 command/hexdump.md create mode 100644 command/iconv.md create mode 100644 command/install.md create mode 100644 command/less.md create mode 100644 command/more.md create mode 100644 command/nano.md create mode 100644 command/nl.md create mode 100644 command/pathchk.md create mode 100644 command/popd.md create mode 100644 command/pr.md create mode 100644 command/printf.md create mode 100644 command/pushd.md create mode 100644 command/rename.md create mode 100644 command/rev.md create mode 100644 command/scp.md create mode 100644 command/setfacl.md create mode 100644 command/strings.md create mode 100644 command/tac.md create mode 100644 command/tail.md create mode 100644 command/uncompress.md create mode 100644 command/unexpand.md create mode 100644 command/unlink.md create mode 100644 command/updatedb.md create mode 100644 command/vi.md create mode 100644 command/zcat.md create mode 100644 command/zfore.md create mode 100644 command/zipsplit.md create mode 100644 command/znew.md diff --git a/command/arj.md b/command/arj.md new file mode 100644 index 0000000000..01f38cbc8b --- /dev/null +++ b/command/arj.md @@ -0,0 +1,22 @@ +arj +=== + +用于创建和管理.arj压缩包 + +## 补充说明 + +**arj命令** 是“.arj”格式的压缩文件的管理器,用于创建和管理“.arj”压缩包。 + +### 语法 + +``` +arj(参数) +``` + +### 参数 + +* 操作指令:对“.arj”压缩包执行的操作指令; +* 压缩包名称:指定要操作的arj压缩包名称。 + + + \ No newline at end of file diff --git a/command/basename.md b/command/basename.md new file mode 100644 index 0000000000..0205575362 --- /dev/null +++ b/command/basename.md @@ -0,0 +1,47 @@ +basename +=== + +打印目录或者文件的基本名称 + +## 补充说明 + +**basename命令** 用于打印目录或者文件的基本名称。basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。 + +### 语法 + +``` +basename(选项)(参数) +``` + +### 选项 + +``` +--help:显示帮助; +--version:显示版本号。 +``` + +### 参数 + +* 文件:带路径信息的文件; +* 后缀:可选参数,指定要去除的文件后缀字符串。 + +### 实例 + +1、要显示一个shell变量的基本名称,请输入: + +``` +basename $WORKFILE +``` + +此命令显示指定给shell变量WORKFILE的值的基本名称。如果WORKFILE变量的值是`/home/jim/program.c`文件,则此命令显示program.c。 + +要构造一个和另一个文件名称相同(除了后缀)的文件名称,请输入: + +``` +OFILE=`basename $1 .c`.o +``` + +此命令指定给 OFILE 文件第一个位置上的参数($1)的值,但它的 .c 后缀更改至 .o。如果 $1 是 /home/jim/program.c 文件,则 OFILE 成为 program.o。因为 program.o 仅是一个基本文件名称,它标识在当前目录中的文件。 + + + \ No newline at end of file diff --git a/command/bzcat.md b/command/bzcat.md new file mode 100644 index 0000000000..da8d41dc56 --- /dev/null +++ b/command/bzcat.md @@ -0,0 +1,39 @@ +bzcat +=== + +解压缩指定的.bz2文件 + +## 补充说明 + +**bzcat命令** 解压缩指定的.bz2文件,并显示解压缩后的文件内容。保留原压缩文件,并且不生成解压缩后的文件。 + +### 语法 + +``` +bzcat(参数) +``` + +### 参数 + +.bz2压缩文件:指定要显示内容的.bz2压缩文件。 + +### 实例 + +将`/tmp/man.config`以bzip2格式压缩: + +``` +bzip2 -z man.config +``` + +此时man.config会变成man.config.bz2 + +将上面的压缩文件内容读出来: + +``` +bzcat man.config.bz2 +``` + +此时屏幕上会显示 man.config.bz2 解压缩之后的文件内容。 + + + \ No newline at end of file diff --git a/command/bzcmp.md b/command/bzcmp.md new file mode 100644 index 0000000000..03bc58f932 --- /dev/null +++ b/command/bzcmp.md @@ -0,0 +1,22 @@ +bzcmp +=== + +比较两个压缩包中的文件 + +## 补充说明 + +**bzcmp命令** 主要功能是在不真正解压缩.bz2压缩包的情况下,比较两个压缩包中的文件,省去了解压缩后在调用cmp命令的过程。 + +### 语法 + +``` +bzcmp(参数) +``` + +### 参数 + +* 文件1:指定要比较的第一个.bz2压缩包; +* 文件2:指定要比较的第二个.bz2压缩包。 + + + \ No newline at end of file diff --git a/command/bzdiff.md b/command/bzdiff.md new file mode 100644 index 0000000000..7239c35dea --- /dev/null +++ b/command/bzdiff.md @@ -0,0 +1,22 @@ +bzdiff +=== + +直接比较两个.bz2压缩包中文件的不同 + +## 补充说明 + +**bzdiff命令** 用于直接比较两个“.bz2”压缩包中文件的不同,省去了解压缩后再调用diff命令的过程。 + +### 语法 + +``` +bzdiff(参数) +``` + +### 参数 + +* 文件1:指定要比较的第一个.bz2压缩包; +* 文件2:指定要比较的第二个.bz2压缩包。 + + + \ No newline at end of file diff --git a/command/bzgrep.md b/command/bzgrep.md new file mode 100644 index 0000000000..d94e896d95 --- /dev/null +++ b/command/bzgrep.md @@ -0,0 +1,22 @@ +bzgrep +=== + +使用正则表达式搜索.bz2压缩包中文件 + +## 补充说明 + +**bzgrep命令** 使用正则表达式搜索“.bz2”压缩包中文件,将匹配的行显示到标注输出。 + +### 语法 + +``` +bzgrep(参数) +``` + +### 参数 + +* 搜索模式:指定要搜索的模式; +* .bz2文件:指定要搜索的.bz2压缩包。 + + + \ No newline at end of file diff --git a/command/bzless.md b/command/bzless.md new file mode 100644 index 0000000000..10cde14ca2 --- /dev/null +++ b/command/bzless.md @@ -0,0 +1,21 @@ +bzless +=== + +增强.bz2压缩包查看器 + +## 补充说明 + +**bzless命令** 是增强“.bz2”压缩包查看器,bzless比bzmore命令功能更加强大。 + +### 语法 + +``` +bzless(参数) +``` + +### 参数 + +文件:指定要分屏显示的.bz2压缩包。 + + + \ No newline at end of file diff --git a/command/bzmore.md b/command/bzmore.md new file mode 100644 index 0000000000..23da1b9553 --- /dev/null +++ b/command/bzmore.md @@ -0,0 +1,21 @@ +bzmore +=== + +查看bzip2压缩过的文本文件的内容 + +## 补充说明 + +**bzmore命令** 用于查看bzip2压缩过的文本文件的内容,当下一屏显示不下时可以实现分屏显示。 + +### 语法 + +``` +bzmore(参数) +``` + +### 参数 + +文件:指定要分屏显示的.bz2压缩包。 + + + \ No newline at end of file diff --git a/command/diff3.md b/command/diff3.md new file mode 100644 index 0000000000..04d5ebd257 --- /dev/null +++ b/command/diff3.md @@ -0,0 +1,35 @@ +diff3 +=== + +比较3个文件不同的地方 + +## 补充说明 + +**diff3命令** 用于比较3个文件,将3个文件的不同的地方显示到标准输出。 + +### 语法 + +``` +diff3(选项)(参数) +``` + +### 选项 + +``` +-a:把所有的文件都当做文本文件按照行为单位进行比较,即给定的文件不是文本文件; +-A:合并第2个文件和第3个文件之间的不同到第1个文件中,有冲突内容用括号括起来; +-B:与选项“-A”功能相同,但是不显示冲突的内容; +-e/--ed:生成一个“-ed”脚本,用于将第2个文件和第3个文件之间的不同合并到第1个文件中; +--easy-only:除了不显示互相重叠的变化,与选项“-e”的功能相同; +-i:为了和system V系统兼容,在“ed”脚本的最后生成“w”和“q”命令。此选项必须和选项“-AeExX3”连用,但是不能和“-m”连用; +--initial-tab:在正常格式的行的文本前,输出一个TAB字符而非两个空白字符。此选项将导致在行中TAB字符的对齐方式看上去规范。 +``` + +### 参数 + +* 文件1:指定要比较的第1个文件; +* 文件2:指定要比较的第2个文件; +* 文件3:指定要比较的第3个文件。 + + + \ No newline at end of file diff --git a/command/dirname.md b/command/dirname.md new file mode 100644 index 0000000000..1a75c15cfa --- /dev/null +++ b/command/dirname.md @@ -0,0 +1,40 @@ +dirname +=== + +去除文件名中的非目录部分 + +## 补充说明 + +**dirname命令** 去除文件名中的非目录部分,仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个`/`及其后面的字符,删除其他部分,并写结果到标准输出。如果最后一个`/`后无字符,dirname 命令使用倒数第二个`/`,并忽略其后的所有字符。dirname 和 basename 通常在 shell 内部命令替换使用,以指定一个与指定输入文件名略有差异的输出文件名。 + +### 语法 + +``` +dirname(选项)(参数) +``` + +### 选项 + +``` +--help:显示帮助; +--version:显示版本号。 +``` + +### 实例 + +``` +dirname // +结果为 / + +dirname /a/b/ +结果为:/a + +dirname a +结果为 . + +dirname a/b +结果为路径名 a +``` + + + \ No newline at end of file diff --git a/command/dos2unix.md b/command/dos2unix.md new file mode 100644 index 0000000000..4f4939d0a4 --- /dev/null +++ b/command/dos2unix.md @@ -0,0 +1,62 @@ +dos2unix +=== + +将DOS格式文本文件转换成Unix格式 + +## 补充说明 + +**dos2unix命令** 用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以`\r\n`作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示`^M`,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本,。而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。 + +### 语法 + +``` +dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...] +``` + +### 选项 + +``` +-k:保持输出文件的日期不变 +-q:安静模式,不提示任何警告信息。 +-V:查看版本 +-c:转换模式,模式有:ASCII, 7bit, ISO, Mac, 默认是:ASCII。 +-o:写入到源文件 +-n:写入到新文件 +``` + +### 参数 + +参数:需要转换到文件。 + +### 实例 + +最简单的用法就是dos2unix直接跟上文件名: + +``` +dos2unix file +``` + +如果一次转换多个文件,把这些文件名直接跟在dos2unix之后。(注:也可以加上`-o`参数,也可以不加,效果一样) + +``` +dos2unix file1 file2 file3 +dos2unix -o file1 file2 file3 +``` + +上面在转换时,都会直接在原来的文件上修改,如果想把转换的结果保存在别的文件,而源文件不变,则可以使用`-n`参数。 + +``` +dos2unix oldfile newfile +``` + +如果要保持文件时间戳不变,加上`-k`参数。所以上面几条命令都是可以加上`-k`参数来保持文件时间戳的。 + +``` +dos2unix -k file +dos2unix -k file1 file2 file3 +dos2unix -k -o file1 file2 file3 +dos2unix -k -n oldfile newfile +``` + + + \ No newline at end of file diff --git a/command/emacs.md b/command/emacs.md new file mode 100644 index 0000000000..faedae72e7 --- /dev/null +++ b/command/emacs.md @@ -0,0 +1,161 @@ +emacs +=== + +功能强大的全屏文本编辑器 + +## 补充说明 + +**emacs命令** 是由GNU组织的创始人Richard Stallman开发的一个功能强大的全屏文本编辑器,它支持多种编程语言,具有很多优良的特性。有众多的系统管理员和软件开发者使用emacs。 + +### 语法 + +``` +emacs(选项)(参数) +``` + +### 选项 + +``` ++<行号>:启动emacs编辑器,并将光标移动到制定行号的行; +-q:启动emacs编辑器,而不加载初始化文件; +-u<用户>:启动emacs编辑器时,加载指定用户的初始化文件; +-t<文件>:启动emacs编辑器时,把指定的文件作为中端,不适用标准输入(stdin)与标准输出(stdout); +-f<函数>:执行指定lisp(广泛应用于人工智能领域的编程语言)函数; +-l:加载指定的lisp代码文件; +-batch:以批处理模式运行emacs编辑器。 +``` + +### 参数 + +文件:指定要编辑的文本文件。 + +## emacs命令操作大全 + +基本命令 + +``` +C-x C-c : 退出Emacs +C-x C-f : 打开一个文件,如果文件不存在,则创建一个文件 +C-g : 取消未完成的命令 +``` + +编辑 + +``` +C-z (redefined): Undo;原来C-z是挂起Emacs(然后用fg命令调出);C-x u 是默认的命令; 移动一下光标,再C-z就可以redo +M-d : 删除光标后的词语 +``` + +移动光标 + +``` +C-v : 向前翻页 +M-v : 向后翻页 +M-r : 将光标移动到屏幕中间那行 +C-a : 移到行首 +M-a : 移到句首,从行首到句首之间可能有空格 +C-e : 移到行尾 +M-e : 移到句尾 +M-{ : 向上移动一段 +M-} : 向下移动一段 +C-right : 向前移动一个单词 +C-left : 向后移动一个单词 +C-up : 向前移动一段 +C-down : 向后移动一段 +M-< : 移到整个文本开头 +M-> : 移到整个文本末尾 +C-u 数字 命令 : 执行多次(数字表示次数)该命令;"M-数字 命令" 也可以 +M-x goto-line : 移动到某一行 +C-l : 重绘屏幕,效果就是当前编辑行移动窗口中央 +``` + +Buffer 相关 + +``` +C-x k : 关闭当前buffer +C-x b : 切换到前一个编辑的buffer +C-x C-b : 列出当前所有buffer +C-x C-s : 保存当前buffer +C-x s : 保存所有未保存的buffer,会提示你是否需要保存 +C-x C-w : 文件另存为 +``` + +拷贝与粘贴 + +``` +M-space (redefined): 设置mark; C-@ 是默认命令 +C-w (redefined) : 剪切一块区域;如果没有设置mark,则是剪切一行 +M-w (redefined) : 拷贝一块区域;如果没有设置mark, 则是拷贝一行 +C-k : 从当前位置剪切到行尾 +C-y : 粘贴 +M-y : 用C-y拉回最近被除去的文本后,换成 M-y可以拉回以前被除去的文本。键入多次的M-y可以拉回更早以前被除去的文本。 +C-x r k : 执行矩形区域的剪切 +C-x r y : 执行矩形区域的粘贴 +``` + +``` +窗口操作 +C-x 0 : 关闭当前窗口 +C-x 1 : 将当前窗口最大化 +C-x 2 : 垂直分割窗口 +C-x 3 : 水平分割窗口 +M-o (redefined) : 在窗口之间切换; C-x o 是默认命令 +C-x 5 1/2/3/0 : 对frame类似的操作 +C-x < : 窗口内容右卷 +C-x > : 窗口内容左卷(这两个命令在垂直分割窗口后比较有用) +(C-u) C-x ^ : 加高当前窗口,如果有C-u,则每次加高4行 +(C-u) C-x } : 加宽当前窗口 +(C-u) C-x { : 压窄当前窗口 +ESC C-v : 在其它窗口进行卷屏操作 +``` + +搜索和替换 + +``` +C-s : 向前搜索(增量式搜索);连续C-s,跳到下一个搜索到的目标 +C-s RET : 普通搜索 +C-r : 向前搜索 +C-s RET C-w : 按单词查询 +M-% : 查询替换,也就是替换前会询问一下 +M-x replace-string : 普通替换 +``` + +Tags + +``` +M-! etags .c .h : 创建TAGS文件 +M-. : 跳到tag所在位置 +M-x list-tags : 列出tags +``` + +书签 + +``` +C-x r m : 设置书签bookmark +C-x r b : 跳到bookmark处 +``` + +帮助 + +``` +C-h ? : 查看帮助信息 +C-h f : 查看一个函数 +C-h v : 查看一个变量 +C-h k : 查看一个键绑定 (C-h c 也是查看键绑定,但是信息较简略) +C-h C-f : 查看一个函数的info,非常有用 +C-h i : 看Info +``` + +其它 + +``` +C-M-\ : 对选中区域,按照某种格式(比如C程序)进行格式化 +C-x h : 全部选中 +M-! : 执行外部shell命令 +M-x shell : 模拟shell的buffer +M-x term : 模拟terminal, C-c k 关闭terminal +C-x C-q : 修改buffer的只读属性 +``` + + + \ No newline at end of file diff --git a/command/expand.md b/command/expand.md new file mode 100644 index 0000000000..821cc2e382 --- /dev/null +++ b/command/expand.md @@ -0,0 +1,27 @@ +expand +=== + +将文件的制表符转换为空白字符 + +## 补充说明 + +**expand命令** 用于将文件的制表符(TAB)转换为空白字符(space),将结果显示到标准输出设备。 + +### 语法 + +``` +expand(选项)(参数) +``` + +### 选项 + +``` +-t<数字>:指定制表符所代表的空白字符的个数,而不使用默认的8。 +``` + +### 参数 + +文件:指定要转换制表符为空白的文件。 + + + \ No newline at end of file diff --git a/command/head.md b/command/head.md new file mode 100644 index 0000000000..053a4214a9 --- /dev/null +++ b/command/head.md @@ -0,0 +1,30 @@ +head +=== + +在屏幕上显示指定文件的开头若干行 + +## 补充说明 + +**head命令** 用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。 + +### 语法 + +``` +head(选项)(参数) +``` + +### 选项 + +``` +-n<数字>:指定显示头部内容的行数; +-c<字符数>:指定显示头部内容的字符数; +-v:总是显示文件名的头信息; +-q:不显示文件名的头信息。 +``` + +### 参数 + +文件列表:指定显示头部内容的文件列表。 + + + \ No newline at end of file diff --git a/command/hexdump.md b/command/hexdump.md new file mode 100644 index 0000000000..86e1a0a698 --- /dev/null +++ b/command/hexdump.md @@ -0,0 +1,60 @@ +hexdump +=== + +显示文件十六进制格式 + +## 补充说明 + +**hexdump命令** 一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。 + +### 语法 + +``` +hexdump [选项] [文件]... +``` + +### 选项 + +``` +-n length 只格式化输入文件的前length个字节。 +-C 输出规范的十六进制和ASCII码。 +-b 单字节八进制显示。 +-c 单字节字符显示。 +-d 双字节十进制显示。 +-o 双字节八进制显示。 +-x 双字节十六进制显示。 +-s 从偏移量开始输出。 +-e 指定格式字符串,格式字符串包含在一对单引号中,格式字符串形如:'a/b "format1" "format2"'。 +``` + +每个格式字符串由三部分组成,每个由空格分隔,第一个形如a/b,b表示对每b个输入字节应用format1格式,a表示对每a个输入字节应用format2格式,一般a>b,且b只能为1,2,4,另外a可以省略,省略则a=1。format1和format2中可以使用类似printf的格式字符串,如: + +``` +%02d:两位十进制 +%03x:三位十六进制 +%02o:两位八进制 +%c:单个字符等 +``` + +还有一些特殊的用法: + +``` +%_ad:标记下一个输出字节的序号,用十进制表示。 +%_ax:标记下一个输出字节的序号,用十六进制表示。 +%_ao:标记下一个输出字节的序号,用八进制表示。 +%_p:对不能以常规字符显示的用 . 代替。 +``` + +同一行如果要显示多个格式字符串,则可以跟多个`-e`选项。 + +### 实例 + +``` +hexdump -e '16/1 "%02X " " | "' -e '16/1 "%_p" "\n"' test +00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ................ +10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F | ................ +20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F | !"#$%&'()*+,-./ +``` + + + \ No newline at end of file diff --git a/command/iconv.md b/command/iconv.md new file mode 100644 index 0000000000..0eeea7afef --- /dev/null +++ b/command/iconv.md @@ -0,0 +1,46 @@ +iconv +=== + +转换文件的编码方式 + +## 补充说明 + +**iconv命令** 是用来转换文件的编码方式的,比如它可以将UTF8编码的转换成GB18030的编码,反过来也行。JDK中也提供了类似的工具native2ascii。Linux下的iconv开发库包括iconv_open,iconv_close,iconv等C函数,可以用来在C/C++程序中很方便的转换字符编码,这在抓取网页的程序中很有用处,而iconv命令在调试此类程序时用得着。 + +### 语法 + +``` +iconv -f encoding [-t encoding] [inputfile]... +``` + +### 选项 + +``` +-f encoding :把字符从encoding编码开始转换。 +-t encoding :把字符转换到encoding编码。 +-l :列出已知的编码字符集合 +-o file :指定输出文件 +-c :忽略输出的非法字符 +-s :禁止警告信息,但不是错误信息 +--verbose :显示进度信息 +-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。 +``` + +### 实例 + +列出当前支持的字符编码:  + +``` +iconv -l +``` + +将文件file1转码,转后文件输出到fil2中:  + +``` +iconv file1 -f EUC-JP-MS -t UTF-8 -o file2 +``` + +这里,没`-o`那么会输出到标准输出。 + + + \ No newline at end of file diff --git a/command/install.md b/command/install.md new file mode 100644 index 0000000000..e981050a77 --- /dev/null +++ b/command/install.md @@ -0,0 +1,81 @@ +install +=== + +安装或升级软件或备份数据 + +## 补充说明 + +**install命令** 的作用是安装或升级软件或备份数据,它的使用权限是所有用户。install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点。但是,install允许你控制目标文件的属性。install通常用于程序的makefile,使用它来将程序拷贝到目标(安装)目录。 + +### 语法 + +``` +install [OPTION]... [-T] SOURCE DEST +install [OPTION]... SOURCE... DIRECTORY +install [OPTION]... -t DIRECTORY SOURCE... +install [OPTION]... -d DIRECTORY... +``` + +在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的<目录>,同时设定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也是必须的。 + +### 选项 + +``` +--backup[=CONTROL]:为每个已存在的目的地文件进行备份。 +-b:类似 --backup,但不接受任何参数。 +-c:(此选项不作处理)。 +-d,--directory:所有参数都作为目录处理,而且会创建指定目录的所有主目录。 +-D:创建<目的地>前的所有主目录,然后将<来源>复制至 <目的地>;在第一种使用格式中有用。 +-g,--group=组:自行设定所属组,而不是进程目前的所属组。 +-m,--mode=模式:自行设定权限模式 (像chmod),而不是rwxr-xr-x。 +-o,--owner=所有者:自行设定所有者 (只适用于超级用户)。 +-p,--preserve-timestamps:以<来源>文件的访问/修改时间作为相应的目的地文件的时间属性。 +-s,--strip:用strip命令删除symbol table,只适用于第一及第二种使用格式。 +-S,--suffix=后缀:自行指定备份文件的<后缀>。 +-v,--verbose:处理每个文件/目录时印出名称。 +--help:显示此帮助信息并离开。 +--version:显示版本信息并离开。 +``` + +### 实例 + +``` +install -d [option] DIRECTORY [DIRECTORY...] +``` + +支持多个,类似`mkdir -p`支持递归。例如:`install -d a/b/c e/f`结果和`mkdir -p a/b/c e/f`一样。 + +``` +install [option] SOURCE DEST +``` + + **复制SOURCE文件(测试不能是目录)到DEST file(文件):** + +``` +install a/e c +结果类似: +cp a/e c #注意c必须是文件。 +``` + + **有用选项`-D`:** + +``` +install -D x a/b/c +效果类似: +mkdir -p a/b && cp x a/b/c +``` + +``` +install [option] SOURCE [SOURCE...] DIRECTORY +``` + + **复制多个SOURCE文件到目的目录:** + +``` +install a/* d +``` + +其中d是目录。 + + + \ No newline at end of file diff --git a/command/less.md b/command/less.md new file mode 100644 index 0000000000..36e56419d0 --- /dev/null +++ b/command/less.md @@ -0,0 +1,34 @@ +less +=== + +分屏上下翻页浏览文件内容 + +## 补充说明 + +**less命令** 的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。 + +### 语法 + +``` +less(选项)(参数) +``` + +### 选项 + +``` +-e:文件内容显示完毕后,自动退出; +-f:强制显示文件; +-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度; +-l:搜索时忽略大小写的差异; +-N:每一行行首显示行号; +-s:将连续多个空行压缩成一行显示; +-S:在单行显示较长的内容,而不换行显示; +-x<数字>:将TAB字符显示为指定个数的空格字符。 +``` + +### 参数 + +文件:指定要分屏显示内容的文件。 + + + \ No newline at end of file diff --git a/command/more.md b/command/more.md new file mode 100644 index 0000000000..85c1fcdc96 --- /dev/null +++ b/command/more.md @@ -0,0 +1,55 @@ +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 +``` + + + \ No newline at end of file diff --git a/command/nano.md b/command/nano.md new file mode 100644 index 0000000000..b0237ff6a5 --- /dev/null +++ b/command/nano.md @@ -0,0 +1,101 @@ +nano +=== + +字符终端文本编辑器 + +## 补充说明 + +**nano** 是一个字符终端的文本编辑器,有点像DOS下的editor程序。它比vi/vim要简单得多,比较适合Linux初学者使用。某些Linux发行版的默认编辑器就是nano。 + +nano命令可以打开指定文件进行编辑,默认情况下它会自动断行,即在一行中输入过长的内容时自动拆分成几行,但用这种方式来处理某些文件可能会带来问题,比如Linux系统的配置文件,自动断行就会使本来只能写在一行上的内容折断成多行了,有可能造成系统不灵了。因此,如果你想避免这种情况出现,就加上`-w`选项吧。 + +### 语法 + +``` +nano [选项] [[+行,列] 文件名]... +``` + +### 选项 + +``` + -h, -? --help 显示此信息 + +行,列 从所指列数与行数开始 + -A --smarthome 启用智能 HOME 键 + -B --backup 储存既有文件的备份 + -C <目录> --backupdir=<目录> 用以储存独一备份文件的目录 + -D --boldtext 用粗体替代颜色反转 + -E --tabstospaces 将已输入的制表符转换为空白 + -F --multibuffer 启用多重文件缓冲区功能 + -H --historylog 记录与读取搜索/替换的历史字符串 + -I --ignorercfiles 不要参考nanorc 文件 + -K --rebindkeypad 修正数字键区按键混淆问题 + -L --nonewlines 不要将换行加到文件末端 + -N --noconvert 不要从 DOS/Mac 格式转换 + -O --morespace 编辑时多使用一行 + -Q <字符串> --quotestr=<字符串> 引用代表字符串 + -R --restricted 限制模式 + -S --smooth 按行滚动而不是半屏 + -T <#列数> --tabsize=<#列数> 设定制表符宽度为 #列数 + -U --quickblank 状态行快速闪动 + -V --version 显示版本资讯并离开 + -W --wordbounds 更正确地侦测单字边界 + -Y <字符串> --syntax=<字符串> 用于加亮的语法定义 + -c --const 持续显示游标位置 + -d --rebinddelete 修正退格键/删除键混淆问题 + -i --autoindent 自动缩进新行 + -k --cut 从游标剪切至行尾 + -l --nofollow 不要依照符号连结,而是覆盖 + -m --mouse 启用鼠标功能 + -o <目录> --operatingdir=<目录> 设定操作目录 + -p --preserve 保留XON (^Q) 和XOFF (^S) 按键 + -q --quiet 沉默忽略启动问题, 比如rc 文件错误 + -r <#列数> --fill=<#列数> 设定折行宽度为 #列数 + -s <程序> --speller=<程序> 启用替代的拼写检查程序 + -t --tempfile 离开时自动储存,不要提示 + -u --undo 允许通用撤销[试验性特性] + -v --view 查看(只读)模式 + -w --nowrap 不要自动换行 + -x --nohelp 不要显示辅助区 + -z --suspend 启用暂停功能 + -$ --softwrap 启用软换行 + -a, -b, -e, + -f, -g, -j (忽略,为与pico 相容) +``` + +### 用法 + + **光标控制** + +* 移动光标:使用用方向键移动。 +* 选择文字:按住鼠标左键拖到。 + + **复制、剪贴和粘贴** + +* 复制一整行:Alt+6 +* 剪贴一整行:Ctrl+K + + **粘贴:Ctrl+U** + +如果需要复制/剪贴多行或者一行中的一部分,先将光标移动到需要复制/剪贴的文本的开头,按Ctrl+6(或者Alt+A)做标记,然后移动光标到 待复制/剪贴的文本末尾。这时选定的文本会反白,用Alt+6来复制,Ctrl+K来剪贴。若在选择文本过程中要取消,只需要再按一次Ctrl+6。 + + **搜索** + +按Ctrl+W,然后输入你要搜索的关键字,回车确定。这将会定位到第一个匹配的文本,接着可以用Alt+W来定位到下一个匹配的文本。 + + **翻页** + +* Ctrl+Y到上一页 +* Ctrl+V到下一页 + + **保存** + +使用Ctrl+O来保存所做的修改 + + **退出** + +按Ctrl+X + +如果你修改了文件,下面会询问你是否需要保存修改。输入Y确认保存,输入N不保存,按Ctrl+C取消返回。如果输入了Y,下一步会让你输入想要保存的文件名。如果不需要修改文件名直接回车就行;若想要保存成别的名字(也就是另存为)则输入新名称然后确 定。这个时候也可用Ctrl+C来取消返回。 + + + \ No newline at end of file diff --git a/command/nl.md b/command/nl.md new file mode 100644 index 0000000000..4f7d82735f --- /dev/null +++ b/command/nl.md @@ -0,0 +1,94 @@ +nl +=== + +在Linux系统中计算文件内容行号 + +## 补充说明 + +**nl命令** 读取 file 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。在输出中,nl命令根据您在命令行中指定的标志来计算左边的行。输入文本必须写在逻辑页中。每个逻辑页有头、主体和页脚节(可以有空节)。除非使用`-p`选项,nl 命令在每个逻辑页开始的地方重新设置行号。可以单独为头、主体和页脚节设置行计算标志(例如,头和页脚行可以被计算然而文本行不能)。其默认的结果与`cat -n`有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐0等等的功能。 + +### 语法 + +``` +nl (选项) (参数) +``` + +### 选项 + +``` +-b :指定行号指定的方式,主要有两种: + -b a :表示不论是否为空行,也同样列出行号(类似 cat -n); + -b t :如果有空行,空的那一行不要列出行号(默认值); + +-n :列出行号表示的方法,主要有三种: + -n ln :行号在萤幕的最左方显示; + -n rn :行号在自己栏位的最右方显示,且不加 0 ; + -n rz :行号在自己栏位的最右方显示,且加 0 ; + +-w :行号栏位的占用的位数。 +-p :在逻辑定界符处不重新开始计算。 +``` + +### 实例 + + **用 nl 列出 log2015.log 的内容** : + +``` +root@localhost [test]# nl log2015.log +1 2015-01 +2 2015-02 + +3 ======[root@localhost test]# +``` + +说明:文件中的空白行,nl 不会加上行号 + + **用 nl 列出 log2015.log 的内容,空本行也加上行号** : + +``` +[root@localhost test]# nl -b a log2015.log +1 2015-01 +2 2015-02 +3 +4 +5 ======[root@localhost test]# +``` + + **让行号前面自动补上0,统一输出格式:** + +``` +[root@localhost test]# nl -b a -n rz log2015.log +000001 2015-01 +000002 2015-02 +000003 2015-03 +000004 2015-04 +000005 2015-05 +000006 2015-06 +000007 2015-07 +000008 2015-08 +000009 2015-09 +000010 2015-10 +000011 2015-11 +000012 2015-12 +000013 ======= + +[root@localhost test]# nl -b a -n rz -w 3 log2015.log +001 2015-01 +002 2015-02 +003 2015-03 +004 2015-04 +005 2015-05 +006 2015-06 +007 2015-07 +008 2015-08 +009 2015-09 +010 2015-10 +011 2015-11 +012 2015-12 +013 ======= +``` + +说明:`nl -b a -n rz`命令行号默认为六位,要调整位数可以加上参数`-w 3`调整为3位。 + + + \ No newline at end of file diff --git a/command/pathchk.md b/command/pathchk.md new file mode 100644 index 0000000000..751d565a0a --- /dev/null +++ b/command/pathchk.md @@ -0,0 +1,32 @@ +pathchk +=== + +检查文件中不可移植的部分 + +## 补充说明 + +**pathchk命令** 用来检查文件中不可移植的部分。 + +### 语法 + +``` +pathchk(选项)(参数) +``` + +### 选项 + +``` +-p:检查大多数的POSIX系统; +-P:检查空名字和“-”开头的文件; +--portability:检查所有的POSIX系统,等同于“-P-p”选项; +--help:显示帮助; +--wersion:显示版本号。 +``` + +### 参数 + +* 文件:带路径信息的文件; +* 后缀:可选参数,指定要去除的文件后缀字符串。 + + + \ No newline at end of file diff --git a/command/popd.md b/command/popd.md new file mode 100644 index 0000000000..ecaf209351 --- /dev/null +++ b/command/popd.md @@ -0,0 +1,41 @@ +popd +=== + +用于删除目录栈中的记录 + +## 补充说明 + +**popd命令** 用于删除目录栈中的记录;如果popd命令不加任何参数,则会先删除目录栈最上面的记录,然后切换到删除过后的目录栈中的最上面的目录。 + +### 语法 + +``` +pushd(选项)(参数) +``` + +### 选项 + +``` ++N:将第N个目录删除(从左边数起,数字从0开始); +-N:将第N个目录删除(从右边数起,数字从0开始); +-n:将目录出栈时,不切换目录。 +``` + +### 实例 + +``` +root@Mylinux:/tmp/dir4# popd(相当于popd +0) +/tmp/dir3 /tmp/dir2 /tmp/dir1 ~ + +root@Mylinux:/tmp/dir3# pushd /tmp/dir4 +/tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1 ~ + +root@Mylinux:/tmp/dir4# popd +1 +/tmp/dir4 /tmp/dir2 /tmp/dir1 ~ + +root@Mylinux:/tmp/dir4# popd -2 +/tmp/dir4 /tmp/dir1 ~ +``` + + + \ No newline at end of file diff --git a/command/pr.md b/command/pr.md new file mode 100644 index 0000000000..5caa14a933 --- /dev/null +++ b/command/pr.md @@ -0,0 +1,28 @@ +pr +=== + +将文本文件转换成适合打印的格式 + +## 补充说明 + +**pr命令** 用来将文本文件转换成适合打印的格式,它可以把较大的文件分割成多个页面进行打印,并为每个页面添加标题。 + +### 语法 + +``` +pr(选项)(参数) +``` + +### 选项 + +``` +-h<标题>:为页指定标题; +-l<行数>:指定每页的行数。 +``` + +### 参数 + +文件:需要转换格式的文件。 + + + \ No newline at end of file diff --git a/command/printf.md b/command/printf.md new file mode 100644 index 0000000000..be1a34b476 --- /dev/null +++ b/command/printf.md @@ -0,0 +1,73 @@ +printf +=== + +格式化并输出结果 + +## 补充说明 + +**printf命令** 格式化并输出结果到标准输出。 + +### 语法 + +``` +printf(选项)(参数) +--help:在线帮助; +--version:显示版本信息。 +``` + +### 参数 + +* 输出格式:指定数据输出时的格式; +* 输出字符串:指定要输出的数据。 + + **格式替代符** + +* %b 相对应的参数被视为含有要被处理的转义序列之字符串。 +* %c ASCII字符。显示相对应参数的第一个字符 +* %d, %i 十进制整数 +* %e, %E, %f 浮点格式 +* %g %e或%f转换,看哪一个较短,则删除结尾的零 +* %G %E或%f转换,看哪一个较短,则删除结尾的零 +* %o 不带正负号的八进制值 +* %s 字符串 +* %u 不带正负号的十进制值 +* %x 不带正负号的十六进制值,使用a至f表示10至15 +* %X 不带正负号的十六进制值,使用A至F表示10至15 +* %% 字面意义的% + + **转义序列** + +* \a 警告字符,通常为ASCII的BEL字符 +* \b 后退 +* \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 +* \f 换页(formfeed) +* \n 换行 +* \r 回车(Carriage return) +* \t 水平制表符 +* \v 垂直制表符 +* \\ 一个字面上的反斜杠字符 +* \ddd 表示1到3位数八进制值的字符,仅在格式字符串中有效 +* \0ddd 表示1到3位的八进制值字符 + +### 实例 + +``` +printf "hello world" + +``` + +``` +#!/bin/bash + +printf "%-5s %-10s %-4s\n" NO Name Mark +printf "%-5s %-10s %-4.2f\n" 01 Tom 90.3456 +printf "%-5s %-10s %-4.2f\n" 02 Jack 89.2345 +printf "%-5s %-10s %-4.2f\n" 03 Jeff 98.4323 + +``` + +* %-5s 格式为左对齐且宽度为5的字符串代替(-表示左对齐),不使用则是又对齐。 +* %-4.2f 格式为左对齐宽度为4,保留两位小数。 + + + \ No newline at end of file diff --git a/command/pushd.md b/command/pushd.md new file mode 100644 index 0000000000..43fc03f6df --- /dev/null +++ b/command/pushd.md @@ -0,0 +1,44 @@ +pushd +=== + +将目录加入命令堆叠中 + +## 补充说明 + +**pushd命令** 是将目录加入命令堆叠中。如果指令没有指定目录名称,则会将当前的工作目录置入目录堆叠的最顶端。置入目录如果没有指定堆叠的位置,也会置入目录堆叠的最顶端,同时工作目录会自动切换到目录堆叠最顶端的目录去。 + +### 语法 + +``` +pushd(选项)(参数) +``` + +### 选项 + +``` +-n:只加入目录到堆叠中,不进行cd操作; ++n:删除从左到右的第n个目录,数字从0开始; +-n:删除从右到左的第n个目录,数字从0开始; +``` + +### 参数 + +目录:需要压入堆栈的目录。 + +### 实例 + +``` +root@Mylinux:/tmp/dir4# pushd /tmp/dir3 +/tmp/dir3 /tmp/dir4 /tmp/dir1 ~ + +root@Mylinux:/tmp/dir3# pushd /tmp/dir2 +/tmp/dir2 /tmp/dir3 /tmp/dir4 /tmp/dir1 ~ + +root@Mylinux:/tmp/dir2# pushd -1 +/tmp/dir1 ~ /tmp/dir2 /tmp/dir3 /tmp/dir4 +``` + +注意:最左边表示栈顶,最右边表示栈底。 + + + \ No newline at end of file diff --git a/command/rename.md b/command/rename.md new file mode 100644 index 0000000000..2c44b83dee --- /dev/null +++ b/command/rename.md @@ -0,0 +1,77 @@ +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删掉 +``` + + + \ No newline at end of file diff --git a/command/rev.md b/command/rev.md new file mode 100644 index 0000000000..b61f6d860b --- /dev/null +++ b/command/rev.md @@ -0,0 +1,55 @@ +rev +=== + +将文件内容以字符为单位反序输出 + +## 补充说明 + +**rev命令** 将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。 + +### 语法 + +``` +rev(参数) +``` + +### 参数 + +文件:指定要反序显示内容的文件。 + +### 实例 + +``` +[root@localhost ~]# cat iptables.bak +# Generated by iptables-save v1.3.5 on Thu Dec 26 21:25:15 2013 +*filter +:INPUT DROP [48113:2690676] +:FORWARD accept [0:0] +:OUTPUT ACCEPT [3381959:1818595115] +-A INPUT -i lo -j ACCEPT +-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT +-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT +-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT +-A INPUT -p icmp -j ACCEPT +-A OUTPUT -o lo -j ACCEPT +COMMIT +# Completed on Thu Dec 26 21:25:15 2013 + +[root@localhost ~]# rev iptables.bak +3102 51:52:12 62 ceD uhT no 5.3.1v evas-selbatpi yb detareneG # +retlif* +]6760962:31184[ PORD TUPNI: +]0:0[ TPECCA DRAWROF: +]5115958181:9591833[ TPECCA TUPTUO: + TPECCA j- ol i- TUPNI A- + TPECCA j- 22 tropd-- pct m- pct p- TUPNI A- + TPECCA j- 08 tropd-- pct m- pct p- TUPNI A- + TPECCA j- DEHSILBATSE,DETALER etats-- etats m- TUPNI A- + TPECCA j- pmci p- TUPNI A- + TPECCA j- ol o- TUPTUO A- +TIMMOC +3102 51:52:12 62 ceD uhT no detelpmoC # +``` + + + \ No newline at end of file diff --git a/command/scp.md b/command/scp.md new file mode 100644 index 0000000000..dafa16c844 --- /dev/null +++ b/command/scp.md @@ -0,0 +1,76 @@ +scp +=== + +加密的方式在本地主机和远程主机之间复制文件 + +## 补充说明 + +**scp命令** 用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。 + +### 语法 + +``` +scp(选项)(参数) +``` + +### 选项 + +``` +-1:使用ssh协议版本1; +-2:使用ssh协议版本2; +-4:使用ipv4; +-6:使用ipv6; +-B:以批处理模式运行; +-C:使用压缩; +-F:指定ssh配置文件; +-l:指定宽带限制; +-o:指定使用的ssh选项; +-P:指定远程主机的端口号; +-p:保留文件的最后修改时间,最后访问时间和权限模式; +-q:不显示复制进度; +-r:以递归方式复制。 +``` + +### 参数 + +* 源文件:指定要复制的源文件。 +* 目标文件:目标文件。格式为`user@host:filename`(文件名为目标文件的名称)。 + +### 实例 + +从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。 + + **从远处复制文件到本地目录** + +``` +scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/ +``` + +从10.10.10.10机器上的`/opt/soft/`的目录中下载nginx-0.5.38.tar.gz 文件到本地`/opt/soft/`目录中。 + + **从远处复制到本地** + +``` +scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/ +``` + +从10.10.10.10机器上的`/opt/soft/`中下载mongodb目录到本地的`/opt/soft/`目录来。 + + **上传本地文件到远程机器指定目录** + +``` +scp /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest +``` + +复制本地`/opt/soft/`目录下的文件nginx-0.5.38.tar.gz到远程机器10.10.10.10的`opt/soft/scptest`目录。 + + **上传本地目录到远程机器指定目录** + +``` +scp -r /opt/soft/mongodb root@10.10.10.10:/opt/soft/scptest +``` + +上传本地目录`/opt/soft/mongodb`到远程机器10.10.10.10上`/opt/soft/scptest`的目录中去。 + + + \ No newline at end of file diff --git a/command/setfacl.md b/command/setfacl.md new file mode 100644 index 0000000000..13a029b27c --- /dev/null +++ b/command/setfacl.md @@ -0,0 +1,282 @@ +setfacl +=== + +设置文件访问控制列表 + +## 补充说明 + +**setfacl命令** 是用来在命令行里设置ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名。 + +### 选项 + +``` +-b,--remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。 +-k,--remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。 +-n,--no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。 +--mask:重新计算有效权限,即使ACL mask被明确指定。 +-d,--default:设定默认的acl规则。 +--restore=file:从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的任何参数一同执行。 +--test:测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。 +-R,--recursive:递归的对所有文件及目录进行操作。 +-L,--logical:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。 +-P,--physical:跳过所有符号链接,包括符号链接文件。 +--version:输出setfacl的版本号并退出。 +--help:输出帮助信息。 +--:标识命令行参数结束,其后的所有参数都将被认为是文件名 +-:如果文件名是-,则setfacl将从标准输入读取文件名。 + +``` + +* 选项`-m`和`-x`后边跟以acl规则。多条acl规则以逗号(,)隔开。选项`-M`和`-X`用来从文件或标准输入读取acl规则。 +* 选项`--set`和`--set-file`用来设置文件或目录的acl规则,先前的设定将被覆盖。 +* 选项`-m(--modify)`和`-M(--modify-file)`选项修改文件或目录的acl规则。 +* 选项`-x(--remove)`和`-X(--remove-file)`选项删除acl规则。 + +当使用-M,-X选项从文件中读取规则时,setfacl接受getfacl命令输出的格式。每行至少一条规则,以#开始的行将被视为注释。 + +当在不支持ACLs的文件系统上使用setfacl命令时,setfacl将修改文件权限位。如果acl规则并不完全匹配文件权限位,setfacl将会修改文件权限位使其尽可能的反应acl规则,并会向standard error发送错误消息,以大于0的状态返回。 + + **权限** + +文件的所有者以及有`CAP_FOWNER`的用户进程可以设置一个文件的acl。(在目前的linux系统上,root用户是唯一有`CAP_FOWNER`能力的用户) + + **ACL规则** + +setfacl命令可以识别以下的规则格式: + +``` +[d[efault]:] [u[ser]:]uid [:perms] 指定用户的权限,文件所有者的权限(如果uid没有指定)。 +[d[efault]:] g[roup]:gid [:perms] 指定群组的权限,文件所有群组的权限(如果gid未指定) +[d[efault]:] m[ask][:] [:perms] 有效权限掩码 +[d[efault]:] o[ther] [:perms] 其他的权限 +``` + +恰当的acl规则被用在修改和设定的操作中,对于uid和gid,可以指定一个数字,也可指定一个名字。perms域是一个代表各种权限的字母的组合:读`-r`写`-w`执行`-x`,执行只适合目录和一些可执行的文件。pers域也可设置为八进制格式。 + + **自动创建的规则** + +最初的,文件目录仅包含3个基本的acl规则。为了使规则能正常执行,需要满足以下规则。 + +* 3个基本规则不能被删除。 +* 任何一条包含指定的用户名或群组名的规则必须包含有效的权限组合。 +* 任何一条包含缺省规则的规则在使用时,缺省规则必须存在。 + + **ACL的名词定义** + +先来看看在ACL里面每一个名词的定义,这些名词我大多从man page上摘下来虽然有些枯燥,但是对于理解下面的内容还是很有帮助的。 + +ACL是由一系列的Access Entry所组成的,每一条Access Entry定义了特定的类别可以对文件拥有的操作权限。Access Entry有三个组成部分:Entry tag type, qualifier (optional), permission。 + +我们先来看一下最重要的Entry tag type,它有以下几个类型: + +``` +ACL_USER_OBJ:相当于Linux里file_owner的permission +ACL_USER:定义了额外的用户可以对此文件拥有的permission +ACL_GROUP_OBJ:相当于Linux里group的permission +ACL_GROUP:定义了额外的组可以对此文件拥有的permission +ACL_MASK:定义了ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大权限 (这个我下面还会专门讨论) +ACL_OTHER:相当于Linux里other的permission +``` + +让我们来据个例子说明一下,下面我们就用getfacl命令来查看一个定义好了的ACL文件: + +``` +[root@localhost ~]# getfacl ./test.txt +# file: test.txt +# owner: root +# group: admin +user::rw- +user:john:rw- +group::rw- +group:dev:r-- +mask::rw- other::r-- +``` + +前面三个以#开头的定义了文件名,file owner和group。这些信息没有太大的作用,接下来我们可以用`--omit-header`来省略掉。 + +``` +user::rw- 定义了ACL_USER_OBJ, 说明file owner拥有read and write permission +user:john:rw- 定义了ACL_USER,这样用户john就拥有了对文件的读写权限,实现了我们一开始要达到的目的 +group::rw- 定义了ACL_GROUP_OBJ,说明文件的group拥有read and write permission +group:dev:r-- 定义了ACL_GROUP,使得dev组拥有了对文件的read permission +mask::rw- 定义了ACL_MASK的权限为read and write +other::r-- 定义了ACL_OTHER的权限为read +``` + +从这里我们就可以看出ACL提供了我们可以定义特定用户和用户组的功能,那么接下来我们就来看一下如何设置一个文件的ACL: + + **如何设置ACL文件** + +首先我们还是要讲一下设置ACL文件的格式,从上面的例子中我们可以看到每一个Access Entry都是由三个被:号分隔开的字段所组成,第一个就是Entry tag type。 + +``` +user 对应了ACL_USER_OBJ和ACL_USER +group 对应了ACL_GROUP_OBJ和ACL_GROUP +mask 对应了ACL_MASK +other 对应了ACL_OTHER +``` + +第二个字段称之为qualifier,也就是上面例子中的john和dev组,它定义了特定用户和拥护组对于文件的权限。这里我们也可以发现只有user和group才有qualifier,其他的都为空。第三个字段就是我们熟悉的permission了。它和Linux的permission一样定义,这里就不多讲了。 + +下面我们就来看一下怎么设置test.txt这个文件的ACL让它来达到我们上面的要求。 + +一开始文件没有ACL的额外属性: + +``` +[root@localhost ~]# ls -l +-rw-rw-r-- 1 root admin 0 Jul 3 22:06 test.txt + +[root@localhost ~]# getfacl --omit-header ./test.txt +user::rw- group::rw- other::r-- +``` + +我们先让用户john拥有对test.txt文件的读写权限: + +``` +[root@localhost ~]# setfacl -m user:john:rw- ./test.txt +[root@localhost ~]# getfacl --omit-header ./test.txt +user::rw- +user:john:rw- +group::rw- +mask::rw- +other::r-- +``` + +这时我们就可以看到john用户在ACL里面已经拥有了对文件的读写权。这个时候如果我们查看一下linux的permission我们还会发现一个不一样的地方。 + +``` +[root@localhost ~]# ls -l ./test.txt +-rw-rw-r--+ 1 root admin 0 Jul 3 22:06 ./test.txt +``` + +在文件permission的最后多了一个+号,当任何一个文件拥有了ACL_USER或者ACL_GROUP的值以后我们就可以称它为ACL文件,这个+号就是用来提示我们的。我们还可以发现当一个文件拥有了`ACL_USER`或者`ACL_GROUP`的值时`ACL_MASK`同时也会被定义。 + +接下来我们来设置dev组拥有read permission: + +``` +[root@localhost ~]# setfacl -m group:dev:r-- ./test.txt +[root@localhost ~]# getfacl --omit-header ./test.txt +user::rw- +user:john:rw- +group::rw- +group:dev:r-- +mask::rw- +other::r-- +``` + +到这里就完成了我们上面讲到的要求,是不是很简单呢。 + + **ACL_MASK和Effective permission** + +这里需要重点讲一下`ACL_MASK`,因为这是掌握ACL的另一个关键,在Linux file permission里面大家都知道比如对于`rw-rw-r--`来说, 当中的那个`rw-`是指文件组的permission. 但是在ACL里面这种情况只是在`ACL_MASK`不存在的情况下成立。如果文件有ACL_MASK值,那么当中那个`rw-`代表的就是mask值而不再是group permission了。 + +让我们来看下面这个例子: + +``` +[root@localhost ~]# ls -l +-rwxrw-r-- 1 root admin 0 Jul 3 23:10 test.sh +``` + +这里说明test.sh文件只有file owner: root拥有read, write, execute/search permission。admin组只有read and write permission,现在我们想让用户john也对test.sh具有和root一样的permission。 + +``` +[root@localhost ~]# setfacl -m user:john:rwx ./test.sh +[root@localhost ~]# getfacl --omit-header ./test.sh +user::rwx user:john:rwx +group::rw- +mask::rwx +other::r-- +``` + +这里我们看到john已经拥有了rwx的permission,mask值也被设定为rwx,那是因为它规定了`ACL_USER`,`ACL_GROUP`和`ACL_GROUP_OBJ`的最大值,现在我们再来看test.sh的Linux permission,它已经变成了: + +``` +[root@localhost ~]# ls -l +-rwxrwxr--+ 1 root admin 0 Jul 3 23:10 test.sh +``` + +那么如果现在admin组的用户想要执行test.sh的程序会发生什么情况呢?它会被permission deny。原因在于实际上admin组的用户只有read and write permission,这里当中显示的rwx是`ACL_MASK`的值而不是group的permission。 + +所以从这里我们就可以知道,如果一个文件后面有+标记,我们都需要用getfacl来确认它的permission,以免发生混淆。 + +下面我们再来继续看一个例子,假如现在我们设置test.sh的mask为read only,那么admin组的用户还会有write permission吗? + +``` +[root@localhost ~]# setfacl -m mask::r-- ./test.sh +[root@localhost ~]# getfacl --omit-header ./test.sh +user::rwx +user:john:rwx #effective:r-- +group::rw- #effective:r-- +mask::r-- +other::r-- +``` + +这时候我们可以看到ACL_USER和ACL_GROUP_OBJ旁边多了个#effective:r--,这是什么意思呢?让我们再来回顾一下`ACL_MASK`的定义。它规定了`ACL_USER`,`ACL_GROUP_OBJ`和`ACL_GROUP`的最大权限。那么在我们这个例子中他们的最大权限也就是read only。虽然我们这里给`ACL_USER`和`ACL_GROUP_OBJ`设置了其他权限,但是他们真正有效果的只有read权限。 + +这时我们再来查看test.sh的Linux file permission时它的group permission也会显示其mask的值(i.e. r--) + +``` +[root@localhost ~]# ls -l +-rwxr--r--+ 1 root admin 0 Jul 3 23:10 test.sh +``` + + **Default ACL** + +上面我们所有讲的都是Access ACL,也就是对文件而言。下面我简单讲一下Default ACL。Default ACL是指对于一个目录进行Default ACL设置,并且在此目录下建立的文件都将继承此目录的ACL。 + +同样我们来做一个试验说明,比如现在root用户建立了一个dir目录: + +``` +[root@localhost ~]# mkdir dir +``` + +他希望所有在此目录下建立的文件都可以被john用户所访问,那么我们就应该对dir目录设置Default ACL。 + +``` +[root@localhost ~]# setfacl -d -m user:john:rw ./dir +[root@localhost ~]# getfacl --omit-header ./dir +user::rwx +group::rwx +other::r-x +default:user::rwx +default:user:john:rwx +default:group::rwx +default:mask::rwx +default: other::r-x +``` + +这里我们可以看到ACL定义了default选项,john用户拥有了default的read, write, excute/search permission。所有没有定义的default都将从file permission里copy过来,现在root用户在dir下建立一个test.txt文件。 + +``` +[root@localhost ~]# touch ./dir/test.txt +[root@localhost ~]# ls -l ./dir/test.txt +-rw-rw-r--+ 1 root root 0 Jul 3 23:46 ./dir/test.txt + +[root@localhost ~]# getfacl --omit-header ./dir/test.txt +user::rw- +user:john:rw- +group::rwx #effective:rw- +mask::rw- +other::r-- +``` + +这里我们看到在dir下建立的文件john用户自动就有了read and write permission, + + **ACL相关命令** + +前面的例子中我们都注意到了getfacl命令是用来读取文件的ACL,setfacl是用来设定文件的Acess ACL。这里还有一个chacl是用来改变文件和目录的Access ACL and Default ACL,它的具体参数大家可以去看man page。我只想提及一下`chacl -B`。它可以彻底删除文件或者目录的ACL属性(包括Default ACL),比如你即使用了`setfacl -x`删除了所有文件的ACL属性,那个+号还是会出现在文件的末尾,所以正确的删除方法应该是用`chacl -B`用cp来复制文件的时候我们现在可以加上`-p`选项。这样在拷贝文件的时候也将拷贝文件的ACL属性,对于不能拷贝的ACL属性将给出警告。 + +mv命令将会默认地移动文件的ACL属性,同样如果操作不允许的情况下会给出警告。 + + **需要注意的几点** + +如果你的文件系统不支持ACL的话,你也许需要重新mount你的file system: + +``` +mount -o remount, acl [mount point] +``` + +如果用chmod命令改变Linux file permission的时候相应的ACL值也会改变,反之改变ACL的值,相应的file permission也会改变。 + + + \ No newline at end of file diff --git a/command/strings.md b/command/strings.md new file mode 100644 index 0000000000..5a07d315a4 --- /dev/null +++ b/command/strings.md @@ -0,0 +1,51 @@ +strings +=== + +在对象文件或二进制文件中查找可打印的字符串 + +## 补充说明 + +**strings命令** 在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings命令对识别随机对象文件很有用。 + +### 语法 + +``` +strings [ -a ] [ - ] [ -o ] [ -t Format ] [ -n Number ] [ -Number ] [file ... ] +``` + +### 选项 + +``` +-a --all:扫描整个文件而不是只扫描目标文件初始化和装载段 +-f –print-file-name:在显示字符串前先显示文件名 +-n –bytes=[number]:找到并且输出所有NUL终止符序列 +- :设置显示的最少的字符数,默认是4个字符 +-t --radix={o,d,x} :输出字符的位置,基于八进制,十进制或者十六进制 +-o :类似--radix=o +-T --target= :指定二进制文件格式 +-e --encoding={s,S,b,l,B,L} :选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit +@ :读取中选项 +``` + +### 实例 + +列出ls中所有的ASCII文本: + +``` +strings /bin/ls +``` + +列出ls中所有的ASCII文本: + +``` +cat /bin/ls strings +``` + +查找ls中包含libc的字符串,不区分大小写: + +``` +strings /bin/ls | grep -i libc +``` + + + \ No newline at end of file diff --git a/command/tac.md b/command/tac.md new file mode 100644 index 0000000000..c46ab05368 --- /dev/null +++ b/command/tac.md @@ -0,0 +1,28 @@ +tac +=== + +将文件已行为单位的反序输出 + +## 补充说明 + +**tac命令** 用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示。 + +### 语法 + +``` +tac(选项)(参数) +``` + +### 选项 + +``` +-a或——append:将内容追加到文件的末尾; +-i或——ignore-interrupts:忽略中断信号。 +``` + +### 参数 + +文件列表:指定要保存内容的文件列表。 + + + \ No newline at end of file diff --git a/command/tail.md b/command/tail.md new file mode 100644 index 0000000000..2cf67b8c89 --- /dev/null +++ b/command/tail.md @@ -0,0 +1,47 @@ +tail +=== + +在屏幕上显示指定文件的末尾若干行 + +## 补充说明 + +**tail命令** 用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。 + +注意:如果表示字节或行数的N值之前有一个”+”号,则从文件开头的第N项开始显示,而不是显示文件的最后N项。N值后面可以有后缀:b表示512,k表示1024,m表示1 048576(1M)。 + +### 语法 + +``` +tail(选项)(参数) +``` + +### 选项 + +``` +--retry:即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用; +-c或——bytes=:输出文件尾部的N(N为整数)个字节内容; +-f或;--follow:显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效; +-F:与选项“-follow=name”和“--retry"连用时功能相同; +-n或——line=:输出文件的尾部N(N位数字)行内容。 +--pid=<进程号>:与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令; +-q或——quiet或——silent:当有多个文件参数时,不输出各个文件名; +-s<秒数>或——sleep-interal=<秒数>:与“-f”选项连用,指定监视文件变化时间隔的秒数; +-v或——verbose:当有多个文件参数时,总是输出各个文件名; +--help:显示指令的帮助信息; +--version:显示指令的版本信息。 +``` + +### 参数 + +文件列表:指定要显示尾部内容的文件列表。 + +### 实例 + +``` +tail file (显示文件file的最后10行) +tail +20 file (显示文件file的内容,从第20行至文件末尾) +tail -c 10 file (显示文件file的最后10个字符) +``` + + + \ No newline at end of file diff --git a/command/uncompress.md b/command/uncompress.md new file mode 100644 index 0000000000..32133285c9 --- /dev/null +++ b/command/uncompress.md @@ -0,0 +1,43 @@ +uncompress +=== + +用来解压.Z文件 + +## 补充说明 + +**uncompress命令** 用来解压缩由compress命令压缩后产生的“.Z”压缩包。 + +### 语法 + +``` +uncompress(选项)(参数) +``` + +### 选项 + +``` +-f:不提示用户,强制覆盖掉目标文件; +-c:将结果送到标准输出,无文件被改变; +-r:递归的操作方式。 +``` + +### 参数 + +文件:指定要压缩的“.Z”压缩包。 + +### 实例 + +先创建一个.Z压缩文件 + +``` +compress FileName +``` + +解压: + +``` +uncompress FileName.Z +``` + + + \ No newline at end of file diff --git a/command/unexpand.md b/command/unexpand.md new file mode 100644 index 0000000000..29c8f163dc --- /dev/null +++ b/command/unexpand.md @@ -0,0 +1,29 @@ +unexpand +=== + +将文件的空白字符转换为制表符 + +## 补充说明 + +**unexpand命令** 用于将给定文件中的空白字符(space)转换为制表符(TAB),并把转换结果显示在标准输出设备(显示终端)。 + +### 语法 + +``` +unexpand(选项)(参数) +``` + +### 选项 + +``` +-a或--all:转换文件中所有的空白字符; +--first-only:仅转换开头的空白字符; +-t:指定TAB所代表的N个(N为整数)字符数,默认N值是8。 +``` + +### 参数 + +文件:指定要转换空白为TAB的文件列表。 + + + \ No newline at end of file diff --git a/command/unlink.md b/command/unlink.md new file mode 100644 index 0000000000..5b162191f5 --- /dev/null +++ b/command/unlink.md @@ -0,0 +1,28 @@ +unlink +=== + +系统调用函数unlink去删除指定的文件 + +## 补充说明 + +**unlink命令** 用于系统调用函数unlink去删除指定的文件。和rm命令作用一样,都是删除文件。 + +### 语法 + +``` +unlink(选项)(参数) +``` + +### 选项 + +``` +--help:显示帮助; +--version:显示版本号。 +``` + +### 参数 + +文件:指定要删除的文件。 + + + \ No newline at end of file diff --git a/command/updatedb.md b/command/updatedb.md new file mode 100644 index 0000000000..45c09fbcad --- /dev/null +++ b/command/updatedb.md @@ -0,0 +1,35 @@ +updatedb +=== + +创建或更新slocate命令所必需的数据库文件 + +## 补充说明 + +**updatedb命令** 用来创建或更新slocate命令所必需的数据库文件。updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入slocate数据库文件中。 + +补充说明:slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。 + +### 语法 + +``` +updatedb(选项) +``` + +### 选项 + +``` +-o<文件>:忽略默认的数据库文件,使用指定的slocate数据库文件; +-U<目录>:更新指定目录的slocate数据库; +-v:显示执行的详细过程。 +``` + +### 实例 + +实用updatedb命令的`-U`选项可以指定要更新slocate数据库的目录。 + +``` +updatedb -U /usr/local/ 更新指定命令的slocate数据库 +``` + + + \ No newline at end of file diff --git a/command/vi.md b/command/vi.md new file mode 100644 index 0000000000..2590fdea7c --- /dev/null +++ b/command/vi.md @@ -0,0 +1,104 @@ +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:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示; +a,bs/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 + + + \ No newline at end of file diff --git a/command/zcat.md b/command/zcat.md new file mode 100644 index 0000000000..68f4dc27de --- /dev/null +++ b/command/zcat.md @@ -0,0 +1,37 @@ +zcat +=== + +显示压缩包中文件的内容 + +## 补充说明 + +**zcat命令** 用于不真正解压缩文件,就能显示压缩包中文件的内容的场合。 + +### 语法 + +``` +zcat(选项)(参数) +``` + +### 选项 + +``` +-S:指定gzip格式的压缩包的后缀。当后缀不是标准压缩包后缀时使用此选项; +-c:将文件内容写到标注输出; +-d:执行解压缩操作; +-l:显示压缩包中文件的列表; +-L:显示软件许可信息; +-q:禁用警告信息; +-r:在目录上执行递归操作; +-t:测试压缩文件的完整性; +-V:显示指令的版本信息; +-l:更快的压缩速度; +-9:更高的压缩比。 +``` + +### 参数 + +文件:指定要显示其中文件内容的压缩包。 + + + \ No newline at end of file diff --git a/command/zfore.md b/command/zfore.md new file mode 100644 index 0000000000..171a7a78ed --- /dev/null +++ b/command/zfore.md @@ -0,0 +1,21 @@ +zfore +=== + +强制为gzip格式的压缩文件添加.gz后缀 + +## 补充说明 + +**zfore命令** 强制为gzip格式的压缩文件添加“.gz”后缀。 + +### 语法 + +``` +zfore(参数) +``` + +### 参数 + +文件列表:指定要添加“.gz”后缀的gzip压缩文件。 + + + \ No newline at end of file diff --git a/command/zipsplit.md b/command/zipsplit.md new file mode 100644 index 0000000000..68bceb4dc5 --- /dev/null +++ b/command/zipsplit.md @@ -0,0 +1,29 @@ +zipsplit +=== + +将较大的zip压缩包分割成各个较小的压缩包 + +## 补充说明 + +**zipsplit命令** 用于将较大的“zip”压缩包分割成各个较小的“zip”压缩包。 + +### 语法 + +``` +zipsplit(选项)(参数) +``` + +### 选项 + +``` +-n:指定分割后每个zip文件的大小; +-t:报告将要产生的较小的zip文件的大小; +-b:指定分割后的zip文件的存放位置。 +``` + +### 参数 + +文件:指定要分割的zip压缩包。 + + + \ No newline at end of file diff --git a/command/znew.md b/command/znew.md new file mode 100644 index 0000000000..f0beae0d2b --- /dev/null +++ b/command/znew.md @@ -0,0 +1,32 @@ +znew +=== + +将.Z压缩包重新转化为gzip命令压缩的.gz压缩包 + +## 补充说明 + +**znew命令** 用于将使用compress命令压缩的“.Z”压缩包重新转化为使用gzip命令压缩的“.gz”压缩包。 + +### 语法 + +``` +znew(选项)(参数) +``` + +### 选项 + +``` +-f:强制执行转换操作,即是目标“.gz”已经存在; +-t:删除原文件前测试新文件; +-v:显示文件名和每个文件的压缩比; +-9:食用油花的压缩比,速度较慢; +-P:使用管道完成转换操作,以降低磁盘空间使用; +-K:当“.Z”文件比“.gz”文件小时,保留“.Z”文件。 +``` + +### 参数 + +文件:指定compress指令压缩生成的“.Z”压缩包。 + + + \ No newline at end of file