文件管理常用命令
cat命令
- 语法 - cat [-AbeEnstTuv] [--help] [--version] fileName- 参数说明: - -n 或 --number:由 1 开始对所有输出的行数编号。 - -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。 - -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。 - -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。 - -E 或 --show-ends : 在每行结束处显示 $。 - -T 或 --show-tabs: 将 TAB 字符显示为 ^I。 - -A, --show-all:等价于 -vET。 - -e:等价于"-vE"选项; - -t:等价于"-vT"选项; 
- 示例 - 文件追加 - cat -n textfile1 > textfile2
- 把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里 - cat -b textfile1 textfile2 >> textfile3
- 清空文件 - cat /home/null /home/test.txt
- 输出文件 - cat log.log
 
chmod命令
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。 
只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。 
- 语法 - chmod [-cfvR] [--help] [--version] mode file...- mode : 权限设定字串,格式如下 : - [ugoa...][[+-=][rwxX]...][,...]- 其中: - u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。 
- + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。 
 - 其他参数说明: - -c : 若该文件权限确实已经更改,才显示其更改动作 
- -f : 若该文件权限无法被更改也不要显示错误讯息 
- -v : 显示权限变更的详细资料 
- -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更) 
- --help : 显示辅助说明 
- --version : 显示版本 
 
- 符号模式 - 使用符号模式可以设置多个项目:who(用户类型),operator(操作符)和 permission(权限),每个项目的设置可以用逗号隔开。 命令 chmod 将修改 who 指定的用户类型对文件的访问权限,用户类型由一个或者多个字母在 who 的位置来说明,如 who 的符号模式表所示: who用户类型说明- u- user - 文件所有者 - g- group - 文件所有者所在组 - o- others - 所有其他用户 - a- all - 所用用户, 相当于 ugo 
- operator 的符号模式表: Operator说明- +- 为指定的用户类型增加权限 - -- 去除指定用户类型的权限 - =- 设置指定用户权限的设置,即将用户类型的所有权限重新设置 
- permission 的符号模式表: 模式名字说明- r- 读 - 设置为可读权限 - w- 写 - 设置为可写权限 - x- 执行权限 - 设置为可执行权限 - X- 特殊执行权限 - 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行 - s- setuid/gid - 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限 - t- 粘贴位 - 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位 
- 八进制语法 - chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。 #权限rwx二进制- 7 - 读 + 写 + 执行 - rwx - 111 - 6 - 读 + 写 - rw- - 110 - 5 - 读 + 执行 - r-x - 101 - 4 - 只读 - r-- - 100 - 3 - 写 + 执行 - -wx - 011 - 2 - 只写 - -w- - 010 - 1 - 只执行 - --x - 001 - 0 - 无 - --- - 000 - 例如, 765 将这样解释: - 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。 
- 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。 
- 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。 
 
- 示例 - 将文件 file1.txt 设为所有人皆可读取 : - chmod ugo+r file1.txt- 将文件 file1.txt 设为所有人皆可读取 : - chmod a+r file1.txt- 将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 : - chmod ug+w,o-w file1.txt file2.txt- 将 ex1.py 设定为只有该文件拥有者可以执行 : - chmod u+x ex1.py- 将目前目录下的所有文件与子目录皆设为任何人可读取 : - chmod -R a+r- 此外chmod也可以用数字来表示权限如 : - chmod 777 file- 语法为: - chmod abc file- 其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。 
- r=4,w=2,x=1 - 若要 rwx 属性则 4+2+1=7; 
- 若要 rw- 属性则 4+2=6; 
- 若要 r-x 属性则 4+1=5。 
 - chmod a=rwx file- chmod 777 file- chmod ug=rwx,o=x file- chmod 771 file- 效果相同 - 若用 chmod 4755 filename 可使此程序具有 root 的权限。 
- 更多说明 - 命令- 说明 - chmod a+r file- 给file的所有用户增加读权限 - chmod a-x file- 删除file的所有用户的执行权限 - chmod a+rw file- 给file的所有用户增加读写权限 - chmod +rwx file- 给file的所有用户增加读写执行权限 - chmod u=rw,go= file- 对file的所有者设置读写权限,清空该用户组和其他用户对file的所有权限(空格代表无权限) - chmod -R u+r,go-r docs- 对目录docs和其子目录层次结构中的所有文件给用户增加读权限,而对用户组和其他用户删除读权限 - chmod 664 file- 对file的所有者和用户组设置读写权限, 为其其他用户设置读权限 - chmod 0755 file- 相当于 - u=rwx (4+2+1),go=rx (4+1 & 4+1)。- 0没有特殊模式。- chmod 4755 file- 4设置了设置用户ID位,剩下的相当于 u=rwx (4+2+1),go=rx (4+1 & 4+1)。- find path/ -type d -exec chmod a-x {} \;- 删除可执行权限对path/以及其所有的目录(不包括文件)的所有用户,使用'-type f'匹配文件 - find path/ -type d -exec chmod a+x {} \;- 允许所有用户浏览或通过目录path/ 
chown命令
- 语法 - chown [-cfhvR] [--help] [--version] user[:group] file...- 参数 : - user : 新的文件拥有者的使用者 ID 
- group : 新的文件拥有者的使用者组(group) 
- -c : 显示更改的部分的信息 
- -f : 忽略错误信息 
- -h :修复符号链接 
- -v : 显示详细的处理信息 
- -R : 处理指定目录以及其子目录下的所有文件 
- --help : 显示辅助说明 
- --version : 显示版本 
 
- 示例 - 把 /var/run/httpd.pid 的所有者设置 root: - chown root /var/run/httpd.pid- 将文件 file1.txt 的拥有者设为 haiji,群体的使用者 haijigroup : - chown haiji:haijigroup file1.txt- 将当前前目录下的所有文件与子目录的拥有者皆设为 haiji,群体的使用者 haijigroup: - chown -R haiji:haijigroup- 把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者: - chown :512 /home/haiji
find命令
- 语法 - find path -option [ -print ] [ -exec -ok command ] {} \- 参数说明 : - find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。 - expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。 - -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件 - -amin n : 在过去 n 分钟内被读取过 - -anewer file : 比文件 file 更晚被读取过的文件 - -atime n : 在过去n天内被读取过的文件 - -cmin n : 在过去 n 分钟内被修改过 - -cnewer file :比文件 file 更新的文件 - -ctime n : 在过去n天内被修改过的文件 - -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name - -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写 - -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写 - -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。 - -type c : 文件类型是 c 的文件。 - d: 目录 - c: 字型装置文件 - b: 区块装置文件 - p: 具名贮列 - f: 一般文件 - l: 符号连结 - s: socket - -pid n : process id 是 n 的文件 - 你可以使用 ( ) 将运算式分隔,并使用下列运算。 - exp1 -and exp2 - ! expr - -not expr - exp1 -or exp2 - exp1, exp2 
- 示例 - 将当前目录及其子目录下所有文件后缀为 .c 的文件列出来: - # find . -name "*.c"- 将目前目录其其下子目录中所有一般文件列出 - # find . -type f- 将当前目录及其子目录下所有最近 20 天内更新过的文件列出: - # find . -ctime -20- 查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们: - # find /var/log -type f -mtime +7 -ok rm {} \;- 查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件: - # find . -type f -perm 644 -exec ls -l {} \;- 查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径: - # find / -type f -size 0 -exec ls -l {} \;
cut命令
- 语法 - cut [-bn] [file] cut [-c] [file] cut [-df] [file]- 使用说明: - cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。 - 如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。 - 参数: - -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。 
- -c :以字符为单位进行分割。 
- -d :自定义分隔符,默认为制表符。 
- -f :与-d一起使用,指定显示哪个区域。 
- -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除 
 
- 示例 - cat -b 3 log.log
ln命令
- 语法 - ln [参数][源文件或目录][目标文件或目录]- 其中参数的格式为 - [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] - [--help] [--version] [--] - 命令功能 : Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。 - 不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。 - 软链接: - 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式 
- 2.软链接可以 跨文件系统 ,硬链接不可以 
- 3.软链接可以对一个不存在的文件名进行链接 
- 4.软链接可以对目录进行链接 
 - 硬链接: - 1.硬链接,以文件副本的形式存在。但不占用实际空间。 
- 2.不允许给目录创建硬链接 
- 3.硬链接只有在同一个文件系统中才能创建 
 - 命令参数 - 必要参数: - -b 删除,覆盖以前建立的链接 
- -d 允许超级用户制作目录的硬链接 
- -f 强制执行 
- -i 交互模式,文件存在则提示用户是否覆盖 
- -n 把符号链接视为一般目录 
- -s 软链接(符号链接) 
- -v 显示详细的处理过程 
 - 选择参数: - -S "-S<字尾备份字符串> "或 "--suffix=<字尾备份字符串>" 
- -V "-V<备份方式>"或"--version-control=<备份方式>" 
- --help 显示帮助信息 
- --version 显示版本信息 
 
- 示例 - ln -s /root/logs/test/log.log /root/logs/- 验证输出 - # ll log.log lrwxrwxrwx. 1 root root 26 Jan 20 21:59 log.log -> /root/logs/test/log.log
less命令
- 语法 - less [参数] 文件- 参数说明: - -b <缓冲区大小> 设置缓冲区的大小 
- -e 当文件显示结束后,自动离开 
- -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件 
- -g 只标志最后搜索的关键词 
- -i 忽略搜索时的大小写 
- -m 显示类似more命令的百分比 
- -N 显示每行的行号 
- -o <文件名> 将less 输出的内容在指定文件中保存起来 
- -Q 不使用警告音 
- -s 显示连续空行为一行 
- -S 行过长时间将超出部分舍弃 
- -x <数字> 将"tab"键显示为规定的数字空格 
- /字符串:向下搜索"字符串"的功能 
- ?字符串:向上搜索"字符串"的功能 
- n:重复前一个搜索(与 / 或 ? 有关) 
- N:反向重复前一个搜索(与 / 或 ? 有关) 
- b 向上翻一页 
- d 向后翻半页 
- h 显示帮助界面 
- Q 退出less 命令 
- u 向前滚动半页 
- y 向前滚动一行 
- 空格键 滚动一页 
- 回车键 滚动一行 
- [pagedown]: 向下翻动一页 
- [pageup]: 向上翻动一页 
 
- 示例 - 1、查看文件 - less log.log- 2、ps查看进程信息并通过less分页显示 - ps -ef |less- 3、浏览多个文件 - less log2.log log1.log- 说明: 输入 :n后,切换到 log2.log 输入 :p 后,切换到log1.log 
- 附加备注 - 1.全屏导航 - ctrl + F - 向前移动一屏 
- ctrl + B - 向后移动一屏 
- ctrl + D - 向前移动半屏 
- ctrl + U - 向后移动半屏 
 - 2.单行导航 - j - 向前移动一行 
- k - 向后移动一行 
 - 3.其它导航 - G - 移动到最后一行 
- g - 移动到第一行 
- q / ZZ - 退出 less 命令 
 - 4.其它有用的命令 - v - 使用配置的编辑器编辑当前文件 
- h - 显示 less 的帮助文档 
- &pattern - 仅显示匹配模式的行,而不是整个文件 
 - 5.标记导航 - 当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置: - ma - 使用 a 标记文本的当前位置 
- 'a - 导航到标记 a 处 
 
more命令
- 语法 - more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]- 参数: - -num 一次显示的行数 
- -d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '哔' 声 
- -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能 
- -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上) 
- -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容 
- -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料 
- -s 当遇到有连续两行以上的空白行,就代换为一行的空白行 
- -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同) 
- +/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示 
- +num 从第 num 行开始显示 
- fileNames 欲显示内容的文档,可为复数个数 
 
- 示例 - 逐页显示 testfile 文档内容,如有连续两行以上空白行则以一行空白行显示。 - more -s testfile- 从第 20 行开始显示 testfile 之文档内容。 - more +20 testfile
- 常用操作命令 - Enter 向下n行,需要定义。默认为1行 
- Ctrl+F 向下滚动一屏 
- 空格键 向下滚动一屏 
- Ctrl+B 返回上一屏 
- = 输出当前行的行号 
- :f 输出文件名和当前行的行号 
- V 调用vi编辑器 
- !命令 调用Shell,并执行命令 
- q 退出more 
 
mv命令
- 语法 - mv [options] source dest mv [options] source... directory- 参数说明: - -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。 
- -i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。 
- -f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。 
- -n: 不要覆盖任何已存在的文件或目录。 
- -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。 
 - mv 参数设置与运行结果 命令格式运行结果- mv source_file(文件) dest_file(文件)- 将源文件名 source_file 改为目标文件名 dest_file - mv source_file(文件) dest_directory(目录)- 将文件 source_file 移动到目标目录 dest_directory 中 - mv source_directory(目录) dest_directory(目录)- 目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中;目录名 dest_directory 不存在则 source_directory 改名为目录名 dest_directory - mv source_directory(目录) dest_file(文件)- 出错 
- 示例 - 将文件 aaa 改名为 bbb : - mv aaa bbb- 将 info 目录放入 logs 目录中。注意,如果 logs 目录不存在,则该命令将 info 改名为 logs。 - mv info/ logs- 再如将 **/usr/haiji下的所有文件和目录移到当前目录下,命令行为: - $ mv /usr/haiji/* .
cp命令
- 语法 - cp [options] source dest cp [options] source... directory- 参数说明: - -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。 
- -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。 
- -f:覆盖已经存在的目标文件而不给出提示。 
- -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。 
- -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。 
- -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。 
- -l:不复制文件,只是生成链接文件。 
 
- 示例 - 使用指令 cp 将当前目录 test/ 下的所有文件复制到新目录 newtest 下,输入如下命令: - $ cp –r test/ newtest- 注意:用户使用该指令复制目录时,必须使用参数 -r 或者 -R 。 
rm命令
- 语法 - rm [options] name...- 参数: - -i 删除前逐一询问确认。 
- -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。 
- -r 将目录及以下之档案亦逐一删除。 
 
- 示例 - 删除文件可以直接使用rm命令,若删除目录则必须配合选项"-r",例如: - # rm test.txt rm:是否删除 一般文件 "test.txt"? y # rm homework rm: 无法删除目录"homework": 是一个目录 # rm -r homework rm:是否删除 目录 "homework"? y- 删除当前目录下的所有文件及目录,命令行为: - rm -r *- 文件一旦通过rm命令删除,则无法恢复,所以必须格外小心地使用该命令。 
rcp命令
rcp指令用在远端复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。
- 语法 - rcp [-pr][源文件或目录][目标文件或目录] rcp [-pr][源文件或目录...][目标文件]- 参数: - -p 保留源文件或目录的属性,包括拥有者,所属群组,权限与时间。 - -r 递归处理,将指定目录下的文件与子目录一并处理。 
- 示例 - 使用rcp指令复制远程文件到本地进行保存。 - 设本地主机当前账户为rootlocal,远程主机账户为root,要将远程主机(218.6.132.5)主目录下的文件"testfile"复制到本地目录"test"中,则输入如下命令: - rcp root@218.6.132.5:./testfile testfile #复制远程文件到本地 rcp root@218.6.132.5:home/rootlocal/testfile testfile #要求当前登录账户cmd 登录到远程主机 rcp 218.6.132.5:./testfile testfile- 注意:指令"rcp"执行以后不会有返回信息,仅需要在目录"test"下查看是否存在文件"testfile"。若存在,则表示远程复制操作成功,否则远程复制操作失败。 
scp命令
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
- 语法 - scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 [...] [[user@]host2:]file2- 参数说明: - -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: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。 
- -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。 
- -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。 
- -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。 
- -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式, 
- -P port:注意是大写的P, port是指定数据传输用到的端口号 
- -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。 
 
- 示例 - 1、从本地复制到远程 
 - 命令格式: - scp local_file remote_username@remote_ip:remote_folder 或者 scp local_file remote_username@remote_ip:remote_file 或者 scp local_file remote_ip:remote_folder 或者 scp local_file remote_ip:remote_file- 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名; 
- 第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名; 
 - 应用实例: - scp /home/space/music/1.mp3 root@www.test.com:/home/root/others/music scp /home/space/music/1.mp3 root@www.test.com:/home/root/others/music/001.mp3 scp /home/space/music/1.mp3 www.test.com:/home/root/others/music scp /home/space/music/1.mp3 www.test.com:/home/root/others/music/001.mp3- 复制目录命令格式: - scp -r local_folder remote_username@remote_ip:remote_folder 或者 scp -r local_folder remote_ip:remote_folder- 第1个指定了用户名,命令执行后需要再输入密码; 
- 第2个没有指定用户名,命令执行后需要输入用户名和密码; 
 - 应用实例: - scp -r /home/space/music/ root@www.tset.com:/home/root/others/ scp -r /home/space/music/ www.runoob.com:/home/root/others/- 上面命令将本地 music 目录复制到远程 others 目录下。 - 2、从远程复制到本地 - 从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例 - 应用实例: - scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 scp -r www.runoob.com:/home/root/others/ /home/space/music/说明- 1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下: - #scp 命令使用端口号 4588 scp -P 4588 remote@www.test.com:/usr/local/sin.sh /home/administrator- 2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。 
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报告信息的版本。 
- 基本用法 
log.txt文本内容如下:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo用法一:
awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号实例:
# 每行按空格或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
 用法二:
awk -F  #-F相当于内置变量FS, 指定分割字符实例:
# 使用","分割
 $  awk -F, '{print $1,$2}'   log.txt
 ---------------------------------------------
 2 this is a test
 3 Are 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 Are you like awk
 This's a test
 10 There are orange apple
 # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
 $ awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt
 ---------------------------------------------
 2 this test
 3 Are 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- 运算符 
= += -= *= /= %= ^= **=
赋值
?:
C条件表达式
||
逻辑或
&&
逻辑与
~ 和 !~
匹配正则表达式和不匹配正则表达式
< <= > >= != ==
关系运算符
空格
连接
+ -
加,减
* / %
乘,除与求余
+ - !
一元加,减和逻辑非
^ ***
求幂
++ --
增加或减少,作为前缀或后缀
$
字段引用
in
数组成员
过滤第一列大于2的行
$ awk '$1>2' log.txt    #命令
#输出
3 Are you like awk
This's a test
10 There are orange,apple,mongo过滤第一列等于2的行
$ awk '$1==2 {print $1,$3}' log.txt    #命令
#输出
2 is过滤第一列大于2并且第二列等于'Are'的行
$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt    #命令
#输出
3 Are you- 内建变量 
$n
当前记录的第n个字段,字段间由FS分隔
$0
完整的输入记录
ARGC
命令行参数的数目
ARGIND
命令行中当前文件的位置(从0开始算)
ARGV
包含命令行参数的数组
CONVFMT
数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO
最后一个系统错误的描述
FIELDWIDTHS
字段宽度列表(用空格键分隔)
FILENAME
当前文件名
FNR
各文件分别计数的行号
FS
字段分隔符(默认是任何空格)
IGNORECASE
如果为真,则进行忽略大小写的匹配
NF
一条记录的字段的数目
NR
已经读出的记录数,就是行号,从1开始
OFMT
数字的输出格式(默认值是%.6g)
OFS
输出记录分隔符(输出换行符),输出时用指定的符号代替换行符
ORS
输出记录分隔符(默认值是一个换行符)
RLENGTH
由match函数所匹配的字符串的长度
RS
记录分隔符(默认是一个换行符)
RSTART
由match函数所匹配的字符串的第一个位置
SUBSEP
数组下标分隔符(默认值是/034)
$ awk 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}'  log.txt
FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS
---------------------------------------------
log.txt    2    1         5    1
log.txt    2    2         5    2
log.txt    2    3         3    3
log.txt    2    4         4    4
$ awk -F\' 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}'  log.txt
FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS
---------------------------------------------
log.txt    2    1    '    1    1
log.txt    2    2    '    1    2
log.txt    2    3    '    2    3
log.txt    2    4    '    1    4
# 输出顺序号 NR, 匹配文本行号
$ awk '{print NR,FNR,$1,$2,$3}' log.txt
---------------------------------------------
1 1 2 this is
2 2 3 Are you
3 3 This's a test
4 4 10 There are
# 指定输出分割符
$  awk '{print $1,$2,$5}' OFS=" $ "  log.txt
---------------------------------------------
2 $ this $ test
3 $ Are $ awk
This's $ a $
10 $ There $- 使用正则,字符串匹配 
# 输出第二列包含 "th",并打印第二列与第四列
$ awk '$2 ~ /th/ {print $2,$4}' log.txt
---------------------------------------------
this a~ 表示模式开始。// 中是模式。
# 输出包含 "re" 的行
$ awk '/re/ ' log.txt
---------------------------------------------
3 Are you like awk
10 There are orange,apple,mongo- 忽略大小写 
$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt
---------------------------------------------
2 this is a test
This's a test- 模式取反 
$ awk '$2 !~ /th/ {print $2,$4}' log.txt
---------------------------------------------
Are like
a
There orange,apple,mongo
$ awk '!/th/ {print $2,$4}' log.txt
---------------------------------------------
Are like
a
There orange,apple,mongo- awk脚本 
关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。
- BEGIN{ 这里面放的是执行前的语句 } 
- END {这里面放的是处理完所有的行后要执行的语句 } 
- {这里面放的是处理每一行时要执行的语句} 
假设有这么一个文件(学生成绩表):
$ cat score.txt
Marry   2143 78 84 77
Jack    2321 66 78 45
Tom     2122 48 77 71
Mike    2537 87 97 95
Bob     2415 40 57 62我们的 awk 脚本如下:
$ cat cal.awk
#!/bin/awk -f
#运行前
BEGIN {
    math = 0
    english = 0
    computer = 0
 
    printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"
    printf "---------------------------------------------\n"
}
#运行中
{
    math+=$3
    english+=$4
    computer+=$5
    printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END {
    printf "---------------------------------------------\n"
    printf "  TOTAL:%10d %8d %8d \n", math, english, computer
    printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}我们来看一下执行结果:
$ awk -f cal.awk score.txt
NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL
---------------------------------------------
Marry  2143     78       84       77      239
Jack   2321     66       78       45      189
Tom    2122     48       77       71      196
Mike   2537     87       97       95      279
Bob    2415     40       57       62      159
---------------------------------------------
  TOTAL:       319      393      350
AVERAGE:     63.80    78.60    70.00- 另外一些实例 
AWK 的 hello world 程序为:
BEGIN { print "Hello, world!" }计算文件大小
$ ls -l *.txt | awk '{sum+=$5} END {print sum}'
--------------------------------------------------
666581从文件中找出长度大于 80 的行:
awk 'length>80' log.txt打印九九乘法表
seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'expr命令
expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。
- 语法 - expr 表达式- 表达式说明: - 用空格隔开每个项; 
- 用反斜杠 ** 放在 shell 特定的字符前面; 
- 对包含空格和其他特殊字符的字符串要用引号括起来 
 
- 示例 - 1、计算字串长度 - > expr length “this is a test” 14- 2、抓取字串 - > expr substr “this is a test” 3 5 is is- 3、抓取第一个字符数字串出现的位置 - > expr index "sarasara" a 2- 4、整数运算 - > expr 14 % 9 5 > expr 10 + 10 20 > expr 1000 + 900 1900 > expr 30 / 3 / 2 5 > expr 30 \* 3 (使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义) 90 > expr 30 * 3 expr: Syntax error
Last updated
Was this helpful?