cat: function: print file to screen or merger two files examples: cat file1 cat file1 file2 > file3 chmod: function:用于改变文件或目录的访问权限 syntax:chmod [who] [+ | - | =] [mode] filename chmod [mode] filename %数学设定法 option: [who]: u=user, g=group, o=others a= all. a is the default value [+|-|=]: + add a authority; - cancel a authority; = give a authority and cancel the others [mode]: r readable; w writable; x:excecutable; u 与文件属主拥有一样的权限; g 与和文件属主同组的用户拥有一样的权限; o 与其他用户拥有一样的权限; t 保存程序的文本到交换设备上; s 在文件执行时把进程的属主或组ID置为该文件的文件属主,方式“u+s”设置文件的用户ID位,“g+s”设置组ID位; X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。 对于数学设定,mode由三个数字表示,xxx分别对应ugo的权限,xxx的确定由rws分别作为二进制位,如111为7,110为6,001为1等。 examples: chmod g+r,o+r example % 使同组和其他用户对文件example 有读权限 chmod 764 file %u可读写可执行,g可读写,o仅可读 chown: function: change the owner of file syntax:chown [-cfhvR] [--help] [--version] user[:group] file... option: -c或-change:作用与-v相似,但只传回修改的部分 -f或--quiet或--silent:不显示错误信息 -h或--no-dereference:只对符号链接的文件做修改,而不更改其他任何相关文件 -R或-recursive:递归处理,将指定目录下的所有文件及子目录一并处理 -v或--verbose:显示指令执行过程 --dereference:作用和-h刚好相反 --help:显示在线说明 --reference=<参考文件或目录>:把指定文件或目录的所有者与所属组,统统设置成和参考文件或目录的所有者与所属组相同 --version:显示版本信息 examples:chown jessie:users file1.txt %将file1.txt 的拥有者设为 users 群体的使用者 jessie chmod -R lamport:users * %将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport exit: function: logout find: function: find files and excecute specified operation syntax:find path -option [-print] [-exec -ok command] {} /; option: -name filename #查找名为filename的文件 -perm #按执行权限来查找 -user username #按文件属主来查找 -group groupname #按组来查找 -mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前 -atime -n +n #按文件访问时间来查GIN: -perm #按执行权限来查找 -user username #按文件属主来查找 -group groupname #按组来查找 -mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前 -atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前 -ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前 -nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在 -nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存 -newer f1 !f2 找文件,-n指n天以内,+n指n天以前 -ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前 -nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在 -nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存 -newer f1 !f2 #查更改时间比f1新但比f2旧的文件 -type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件 -size n[c] #查长度为n块[或n字节]的文件 -depth #使查找在进入子目录前先行查找完本目录 -fstype #查更改时间比f1新但比f2旧的文件 -mount #查文件时不跨越文件系统mount点 -follow #如果遇到符号链接文件,就跟踪链接所指的文件 -cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中 -prune #忽略某个目录 #-print 将查找到的文件输出到标准输出 #-exec command {} /; -----将查到的文件执行command操作,{} 和 /;之间有空格 #-ok 和-exec相同,只不过在操作前要询用户 examples: 1)在/tmp中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR",最后打印出所有包含"SYSCALL_VECTOR"的文件名 A) find /tmp -name "*.h" | xargs -n50 grep SYSCALL_VECTOR B) grep SYSCALL_VECTOR /tmp/*.h | cut -d':' -f1| uniq > filename C) find /tmp -name "*.h" -exec grep "SYSCALL_VECTOR" {} /; -print 2)find / -name filename -exec rm -rf {} /; find / -name filename -ok rm -rf {} /; 3)比如要查找磁盘中大于3M的文件: find . -size +3000k -exec ls -ld {} ; 4)将find出来的东西拷到另一个地方 find *.c -exec cp '{}' /tmp ';' 如果有特殊文件,可以用cpio,也可以用这样的语法: find dir -name filename -print | cpio -pdv newdir 6)查找2004-11-30 16:36:37时更改过的文件 # A=`find ./ -name "*php"` | ls -l --full-time $A 2>/dev/null | grep "2004-11-30 16:36:37 常用方法: 1. 基本用法: find / -name 文件名 find ver1.d ver2.d -name '*.c' -print 查找ver1.d,ver2.d *.c文件并打印 find . -type d -print 从当前目录查找,仅查找目录,找到后,打印路径名。可用于打印目录结构。 2. 无错误查找: find / -name access_log 2 >/dev/null 3. 按尺寸查找: find / -size 1500c (查找1,500字节大小的文件,c表示字节) find / -size +1500c (查找大于1,500字节大小的文件,+表示大于) find / -size +1500c (查找小于1,500字节大小的文件,-表示小于) 4. 按时间: find / -amin n 最后n分钟 find / -atime n 最后n天 find / -cmin n 最后n分钟改变状态 find / -ctime n 最后n天改变状态 5. 其它: find / -empty 空白文件、空白文件夹、没有子目录的文件夹 find / -false 查找系统中总是错误的文件 find / -fstype type 找存在于指定文件系统的文件,如type为ext2 find / -gid n 组id为n的文件 find / -group gname 组名为gname的文件 find / -depth n 在某层指定目录中优先查找文件内容 find / -maxdepth levels 在某个层次目录中按递减方式查找 6. 逻辑 -and 条件与 -or 条件或 7. 查找字符串 find . -name '*.html' -exec grep 'mailto:'{} grep: function:print lines matching a pattern syntax:grep [options] PATTERN [FILE...] options: 1. -A NUM,--after-context=NUM 除了列出符合行之外,并且列出后NUM行。 ex: $ grep -A 1 panda file (从file中搜寻有panda样式的行,并显示该行的后1行) 2. -a或--text grep原本是搜寻文字文件,若拿二进制的档案作为搜寻的目标, 则会显示如下的讯息: Binary file 二进制文件名 matches 然后结束。 若加上-a参数则可将二进制档案视为文本文件搜寻, 相当于--binary-files=text这个参数。 ex: (从二进制档案mv中去搜寻panda样式) (错误!!!) $ grep panda mv Binary file mv matches (这表示此档案有match之处,详见--binary-files=TYPE ) $ (正确!!!) $ grep -a panda mv 3. -B NUM,--before-context=NUM 与 -A NUM 相对,但这此参数是显示除符合行之外 并显示在它之前的NUM行。 ex: (从file中搜寻有panda样式的行,并显示该行的前1行) $ grep -B 1 panda file 4. -C [NUM], -NUM, --context[=NUM] 列出符合行之外并列出上下各NUM行,默认值是2。 ex: (列出file中除包含panda样式的行外并列出其上下2行) (若要改变默认值,直接改变NUM即可) $ grep -C[NUM] panda file 5. -b, --byte-offset 列出样式之前的内文总共有多少byte .. ex: $ grep -b panda file 显示结果类似于: 0:panda 66:pandahuang 123:panda03 6. --binary-files=TYPE 此参数TYPE预设为binary(二进制),若以普通方式搜寻,只有2种结果: 1.若有符合的地方:显示Binary file 二进制文件名 matches 2.若没有符合的地方:什么都没有显示。 若TYPE为without-match,遇到此参数, grep会认为此二进制档案没有包含任何搜寻样式,与-I 参数相同。 若TPYE为text, grep会将此二进制文件视为text档案,与-a 参数相同。 Warning: --binary-files=text 若输出为终端机,可能会产生一些不必要的输出。 7. -c, --count 不显示符合样式行,只显示符合的总行数。 若再加上-v,--invert-match,参数显示不符合的总行数。 8. -d ACTION, --directories=ACTION 若输入的档案是一个资料夹,使用ACTION去处理这个资料夹。 预设ACTION是read(读取),也就是说此资料夹会被视为一般的档案; 若ACTION是skip(略过),资料夹会被grep略过: 若ACTION是recurse(递归),grep会去读取资料夹下所有的档案, 此相当于-r 参数。 9. -E, --extended-regexp 采用规则表示式去解释样式。 10. -e PATTERN, --regexp=PATTERN 把样式做为一个partern,通常用在避免partern用-开始。 11. -f FILE, --file=FILE 事先将要搜寻的样式写入到一个档案,一行一个样式。 然后采用档案搜寻。 空的档案表示没有要搜寻的样式,因此也就不会有任何符合。 ex: (newfile为搜寻样式文件) $grep -f newfile file 12. -G, --basic-regexp 将样式视为基本的规则表示式解释。(此为预设) 13. -H, --with-filename 在每个符合样式行前加上符合的文件名称,若有路径会显示路径。 ex: (在file与testfile中搜寻panda样式) $grep -H panda file ./testfile file:panda ./testfile:panda $ 14. -h, --no-filename 与-H参数相类似,但在输出时不显示路径。 15. --help 产生简短的help讯息。 16. -I grep会强制认为此二进制档案没有包含任何搜寻样式, 与--binary-files=without-match参数相同。 ex: $ grep -I panda mv 17. -i, --ignore-case 忽略大小写,包含要搜寻的样式及被搜寻的档案。 ex: $ grep -i panda mv 18. -L, --files-without-match 不显示平常一般的输出结果,反而显示出没有符合的文件名称。 19. -l, --files-with-matches 不显示平常一般的输出结果,只显示符合的文件名称。 20. --mmap 如果可能,使用mmap系统呼叫去读取输入,而不是预设的read系统呼叫。 在某些状况,--mmap 能产生较好的效能。 然而,--mmap 如果运作中档案缩短,或I/O 错误发生时, 可能造成未定义的行为(包含core dump),。 21. -n, --line-number 在显示行前,标上行号。 ex: $ grep -n panda file 显示结果相似于下: 行号:符合行的内容 22. -q, --quiet, --silent 不显示任何的一般输出。请参阅-s或--no-messages 23. -r, --recursive 递归地,读取每个资料夹下的所有档案,此相当于 -d recsuse 参数。 24. -s, --no-messages 不显示关于不存在或无法读取的错误讯息。 小注: 不像GNU grep,传统的grep不符合POSIX.2协议, 因为缺乏-q参数,且他的-s 参数表现像GNU grep的 -q 参数。 Shell Script倾向将传统的grep移植,避开-q及-s参数, 且将输出限制到/dev/null。 POSIX: 定义UNIX及UNIX-like系统需要提供的功能。 25. -V, --version 显示出grep的版本号到标准错误。 当您在回报有关grep的bugs时,grep版本号是必须要包含在内的。 26. -v, --invert-match 显示除搜寻样式行之外的全部。 27. -w, --word-regexp 将搜寻样式视为一个字去搜寻,完全符合该"字"的行才会被列出。 28. -x, --line-regexp 将搜寻样式视为一行去搜寻,完全符合该"行"的行才会被列出。 man: man -a cmd 打开所有领域内的同名帮助,例如 man fam ,你首先会进入一个fam(1M)的命令版fam帮助,你再按q键就会进入FAM(3X),库函数版的帮助 man -aw cmd 显示所有cmd的所有手册文件的路径,如 man -aw fam 就是 /usr/share/man/man1/fam.1m.gz /usr/share/man/man3/fam.3x.gz man 领域代号 cmd 接指定特定领域内搜索手册页,如 man 3 fam 直接进入库函数版的帮助 man -M cmd 定手册文件的搜索路径,如 man -M /home/mysql/man mysql 显示的就是你安装的mysql的帮助,而不是系统自带的旧版mysql的帮助 man cmd| col -b > cmd.txt 把man手册信息输出到文本文件 LANG=语言代号 man -w cmd man 特定语言manpage文件的路径 查看特定语言版本的手册页 例如,要查看mplayer的中文man shell> LANG=zh shell> man -w mplayer /usr/share/man/zh/man1/mplayer.1.gz 新开一个shell窗口(或在原窗口 shell> LANG=en_US.UTF-8) shell> man /usr/share/man/zh/man1/mplayer.1.gz sed: syntax: sed [options] 'command' file(s) sed [options] -f scriptfile file(s) command: a/ 在当前行后面加入一行文本。 b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 c/ 用新的文本改变本行的文本。 d 从模板块(Pattern space)位置删除行。 D 删除模板块的第一行。 i/ 在当前行上面插入文本。 h 拷贝模板块的内容到内存中的缓冲区。 H 追加模板块的内容到内存中的缓冲区 g 获得内存缓冲区的内容,并替代当前模板块中的文本。 G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。 l 列表不能打印字符的清单。 n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。 N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。 p 打印模板块的行。 P(大写) 打印模板块的第一行。 q 退出Sed。 r file 从file中读行。 t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 w file 写并追加模板块到file末尾。 W file 写并追加模板块的第一行到file末尾。 ! 表示后面的命令对所有没有被选定的行发生作用。 s/re/string 用string替换正则表达式re。 = 打印当前行号码。 # 把注释扩展到下一个换行符以前。 以下的是替换标记 *g表示行内全面替换。 *p表示打印行。 *w表示把行写入一个文件。 *x表示互换模板块中的文本和缓冲区中的文本。 *y表示把一个字符翻译为另外的字符(但是不用于正则表达式) option: -e command, --expression=command 允许多台编辑。 -h, --help 打印帮助,并显示bug列表的地址。 -n, --quiet, --silent 取消默认输出。 -f, --filer=script-file 引导sed脚本文件名。 -V, --version 打印版本和版权信息。 元字符集 ^ 锚定行的开始 如:/^sed/匹配所有以sed开头的行。 $ 锚定行的结束 如:/sed$/匹配所有以sed结尾的行。 . 匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。 * 匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] 匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。 [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 /(../) 保存匹配的字符,如s//(love/)able//1rs,loveable被替换成lovers。 & 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 /< 锚定单词的开始,如:// 锚定单词的结束,如/love/>/匹配包含以love结尾的单词的行。 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的行。 example: 删除:d命令 $ sed '2d' example-----删除example文件的第二行。 $ sed '2,$d' example-----删除example文件的第二行到末尾所有行。 $ sed '$d' example-----删除example文件的最后一行。 $ sed '/test/'d example-----删除example文件所有包含test的行。 替换:s命令 $ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。 $ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。 $ sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。 $ sed -n 's//(love/)able//1rs/p' example-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。 $ sed 's#10#100#g' example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。 选定行的范围:逗号 $ sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。 $ sed -n '5,/^test/p' example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。 $ sed '/test/,/check/s/$/sed test/' example-----对于模板test和west之间的行,每行的末尾用字符串sed test替换。 多点编辑:e命令 $ sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。 $ sed --expression='s/test/check/' --expression='/love/d' example-----一个比-e更好的命令是--expression。它能给sed表达式赋值。 从文件读入:r命令 $ sed '/test/r file' example-----file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。 写入文件:w命令 $ sed -n '/test/w file' example-----在example中所有包含test的行都被写入file里。 追加命令:a命令 $ sed '/^test/a//--->this is a example' example<-----'this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。 插入:i命令 $ sed '/test/i// new line -------------------------' example 如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。 下一个:n命令 $ sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。 变形:y命令 $ sed '1,10y/abcde/ABCDE/' example-----把1--10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。 退出:q命令 $ sed '10q' example-----打印完第10行后,退出sed。 保持和获取:h命令和G命令 $ sed -e '/test/h' -e '$G example-----在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保 持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中 的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。 保持和互换:h命令和x命令 $ sed -e '/test/h' -e '/check/x' example -----互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。 7. 脚本 Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。 touch: function:改变档案的时间记录 syntax:touch [-acfm] [-r reference-file] [--file=reference-file] [-t MMDDhhmm[[CC]YY][.ss]] [-d time] [--date=time] [--time={atime,access,use,mtime,modify}] [--no-create] [--help] [--version] file1 [file2 ...] option: a 改变档案的读取时间记录。 m 改变档案的修改时间记录。 c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。 f 不使用,是为了与其他 unix 系统的相容性而保留。 r 使用参考档的时间记录,与 --file 的效果一样。 d 设定时间与日期,可以使用各种不同的格式。 t 设定档案的时间记录,格式与 date 指令相同。 --no-create 不会建立新档案。 --help 列出指令格式。 --version 列出版本讯息。 example: 新建file:touch file 将file的时间记录改为5月6日18点3分,公元两千年: touch -c -t 05061803 file touch -d "6:03pm" file touch -d "05/06/2000" file touch -d "6:03pm 05/06/2000" file 将file的时间记录改变成与referencefile一样:touch -r referencefile file whereis: function:搜索程序名称 syntax:whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...] option: -b 只查找二进制文件。 -B<目录> 只在设置的目录下查找二进制文件。 -f 不显示文件名前的路径名称。 -m 只查找说明文件。 -M<目录> 只在设置的目录下查找说明文件。 -s 只查找原始代码文件。 -S<目录> 只在设置的目录下查找原始代码文件。 -u 查找不包含指定类型的文件。
some useful Linux commands
最新推荐文章于 2022-10-12 17:07:45 发布