🗺️博客地图
一、cat 命令
cat 命令用于连接文件并打印到标准输出设备上。
- cat 主要有三大功能
1、一次显示整个文件:
cat filename
2、从键盘创建一个文件:只能创建新文件,不能编辑已有文件。
cat > filename
3、将几个文件合并为一个文件
cat file1 file2 > file
- 命令参数
-A,--show-all,等价于 -vET
-b,--number-nonblank,对非空输出行编号
-e,等价于 -vE
-E,--show-ends,在每行结束处显示 $
-n,--number,对输出的所有行编号,由 1 开始对所有输出的行数编号
-s,--squeeze-blank,有连续两行以上的空白行,就代换为一行的空白行
-t,与 -vT 等价
-T,--show-tabs,将跳格字符显示为 ^I
-v,--show-nonprinting,显示内容,但是不打印出来,除了空格、回车以及TAB
- 示例
① 把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里
命令:cat -n log2012.log log2013.log
[root@localhost test]# cat log2012.log
2012-01
2012-02
======
[root@localhost test]# cat log2013.log
2013-01
2013-02
2013-03
======
[root@localhost test]# cat -n log2012.log log2013.log
1 2012-01
2 2012-02
3
4
5 ======
6 2013-01
7 2013-02
8
9
10 2013-03
11 ======
② 把 log2012.log 和 log2013.log 的文件内容加上行号(空白行不加)之后将内容附加到 log.log 里
命令:cat -b log2012.log log2013.log log.log
[root@localhost test]# cat -b log2012.log log2013.log log.log
1 2012-01
2 2012-02
3 ======
4 2013-01
5 2013-02
6 2013-03
7 ======
③ 使用 here doc 生成新文件
here doc:Here-Document(here doc)是Bash和其他shell中用于向命令传递多行文本的重定向方式。它可以与cat、tee等命令结合,常用于创建和编辑文件,或者在SSH连接中执行远程命令。
1、cat<<EOF
,以EOF输入字符为标准输入结束
2、cat >filename
,创建文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束,注意:以这个方式输入时是没有’>'的。
[root@localhost test]# cat >log.txt <<EOF
\> Hello
\> World
\> MUZI
\> PWD=$(pwd)
\> EOF
[root@localhost test]# ls -l log.txt
-rw-r--r-- 1 root root 37 11-21 17:07 log.txt
[root@localhost test]# cat log.txt
Hello
World
MUZI
PWD=/opt/soft/test
④ 反向列示
tac:反向列示,tac 刚好是将 cat 反写过来,所以他的功能就跟 cat 相反。cat 是由第一行到最后一行连续显示在屏幕上,而 tac 则是由最后一行到第一行反向在屏幕上显示出来。
命令:tac log.txt
[root@localhost test]# tac log.txt
PWD=/opt/soft/test
MUZI
World
Hello
二、chmod 命令
Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以控制文件如何被他人所调用。
用于改变 linux 系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。可使用 ls -l test.txt 查找。
以文件 log2012.log 为例:
[root@localhost test]# ls -l log2012.log
-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log
第一列共有 10 个位置,第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是 d,表示是一个目录。从第二个字符开始到第十个 9 个字符,3 个字符一组,分别表示了 3 组用户对文件或者目录的权限。权限字符用横线代表空许可,r 代表只读,w 代表写,x 代表可执行。
- 命令常用参数
-c:当发生改变时,报告处理信息
-R:处理指定目录以及其子目录下所有文件
- 权限范围
u:目录或者文件的当前的用户
g:目录或者文件的当前的群组
o:除了目录或者文件的当前用户或群组之外的用户或者群组
a:所有的用户及群组
- 权限代号
r:读权限,用数字4表示
w:写权限,用数字2表示
x:执行权限,用数字1表示
- :删除权限,用数字0表示
s :特殊权限
- 示例
① 增加文件 t.log 所有用户可执行权限
chmod a+x t.log
② 撤销原来所有的权限,然后使拥有者具有可读权限,并输出处理信息
chmod u=r t.log -c
③ 给 file 的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
chmod 751 t.log -c
或者
chmod u=rwx,g=rx,o=x t.log -c
④ 将 test 目录及其子目录所有文件添加可读权限
chmod u+r,g+r,o+r -R text/ -c
三、chown 命令
chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。
- 命令常用参数
-c:显示更改的部分的信息
-R:处理指定目录及子目录
- 示例
① 改变拥有者和群组,并显示改变信息
chown -c muzi:muzi log2012.log
② 改变文件群组
chown -c :muzi mail.log
③ 改变文件夹及子文件目录属主及属组为 mail
chown -cR mail: test/
四、cp 命令
将源文件复制至目标文件,或将多个源文件复制至目标目录。
注意:命令行复制,如果目标文件已经存在会提示是否覆盖,而在 shell 脚本中,如果不加 -i 参数,则不会提示,而是直接覆盖!
- 常用命令参数
-i:提示
-r:复制目录及目录内所有项目
-a:复制的文件与原文件时间一样
-s
:复制创建文件的符号链接
- 示例
① 复制 a.txt 到 test 目录下,保持原文件时间,如果原文件存在提示是否覆盖
cp -ai a.txt test
② 为 a.txt 建议一个链接(快捷方式)
cp -s a.txt link_a.txt
拓展:cp -s 与 ln-s 的区别
cp -s
命令是创建符号链接的命令。它的作用是将一个文件或目录复制成一个符号链接文件,这个符号链接文件指向原始文件或目录。符号链接文件是一个指向另一个文件或目录的快捷方式,也就是说,当你访问符号链接文件时,系统将会自动跳转到指向的文件或目录。例如,cp -s /source/file /destination/link
命令会在 /destination
目录下创建一个名为 link
的符号链接文件,指向 /source/file
。
ln -s
命令是创建软链接的命令。软链接是指向另一个文件或目录的文件,类似于 Windows 中的快捷方式。与符号链接不同的是,软链接文件本身是一个文件,而不是一个文件复制的指向。软链接文件指向另一个文件或目录的路径,而不是文件或目录本身。例如,ln -s /source/file /destination/link
命令会在 /destination
目录下创建一个名为 link
的软链接文件,指向 /source/file
。
五、find 命令
用于在文件树中查找文件,并作出相应的处理。
- 命令格式
find [pathname] -命令选项 指定条件和操作
- 命令参数
pathname:find命令所查找的目录路径。例如用 . 来表示当前目录,用 / 来表示系统根目录。
-print:find命令将匹配的文件输出到标准输出。
-exec:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为 'command' { } \; ,注意 { } 和 \; 之间的空格。
-ok:和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
- 命令选项
-name:按照文件名查找文件
-perm:按文件权限查找文件
-user:按文件属主查找文件
-group:按照文件所属的组来查找文件
-type:查找某一类型的文件,诸如:
b:块设备文件
d:目录
c:字符设备文件
l:符号链接文件
p:管道文件
f:普通文件
- 示例
① 查找 48 小时内修改过的文件
find -atime -2
② 在当前目录查找 以 .log 结尾的文件。. 代表当前目录
find ./ -name '*.log'
③ 查找 /opt 目录下 权限为 777 的文件
find /opt -perm 777
④ 查找大于 1K 的文件
find -size +1000c
⑤ 查找等于 1000 字符的文件
find -size 1000c
-exec 参数后面跟的是 command 命令,它的终止是以 ; 为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{} 花括号代表前面find查找出来的文件名。
六、head 命令
head 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。
- 常用参数
-n <行数>:显示的行数(行数为复数表示从最后向前数)
- 示例
① 显示 1.log 文件中前 20 行
head 1.log -n 20
② 显示 1.log 文件前 20 字节
head -c 20 log2014.log
③ 显示 t.log最后 10 行
head -n -10 t.log
七、more 命令
功能类似于 cat,more 会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键
(space)就往下一页显示,按 b 键就会往回(back)一页显示。
- 命令参数
+n:从笫 n 行开始显示
-n:定义屏幕大小为n行
+/pattern:在每个档案显示前搜寻该字串: pattern,然后从该字串前两行之后开始显示
-c:从顶部清屏,然后显示
-d:提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l:忽略 Ctrl+l(换页)字符
-p:通过清除窗口而不是滚屏来对文件进行换页,与 -c 选项相似
-s:把连续的多个空行显示为一行
-u:把文件内容中的下画线去掉
- 常用操作命令
Enter 向下 n 行,需要定义。默认为 1 行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more
- 示例
① 显示文件中从第3行起的内容
more +3 text.txt
② 在所列出文件目录详细信息,借助管道使每次显示 5 行
ls -l | more -5
按空格显示下 5 行
八、less 命令
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且less 在查看之前不会加载整个文件。
- 常用命令参数
-i:忽略搜索时的大小写
-N:显示每行的行号
-o:将 less 输出的内容在指定文件中保存起来
-s:显示连续空行为一行
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
-x:将“tab”键显示为规定的数字空格
b:向后翻一页
d:向后翻半页
h:显示帮助界面
Q:退出 less 命令
u:向前滚动半页
y:向前滚动一行
[空格键]:滚动一行
[回车键]:滚动一页
[pagedown]:向下翻动一页
[pageup]: 向上翻动一页
- 示例
① ps 查看进程信息并通过 less 分页显示
ps -aux | less -N
② 查看多个文件
less 1.log 2.log
可以使用 n 查看下一个,使用 p 查看前一个。
九、ln 命令
功能是为文件在另外一个位置建立一个同步的链接,当在不同目录需要该问题时,就不需要为每一个目录创建同样的文件,通过 ln 创建的链接(link)减少磁盘占用量。
链接分类:软链接、硬链接
- 软链接
- 软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
- 软链接可以 跨文件系统 ,硬链接不可以
- 软链接可以对一个不存在的文件名进行链接
- 软链接可以对目录进行链接
- 硬链接
- 硬链接,以文件副本的形式存在。但不占用实际空间。
- 不允许给目录创建硬链接
- 硬链接只有在同一个文件系统中才能创建
注意:
- ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
- ln的链接又分软链接和硬链接两种,软链接就是 ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接 ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
- ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。
- 常用参数
-b 删除,覆盖以前建立的链接
-s 软链接(符号链接)
-v 显示详细处理过程
- 示例
① 给文件创建软链接,并显示操作信息
ln -sv source.log link.log
② 给文件创建硬链接,并显示操作信息
ln -v source.log link1.log
③ 给目录创建软链接
ln -sv /opt/soft/test/test3 /opt/soft/test/test5
十、 locate 命令
locate 通过搜寻系统内建文档数据库达到快速找到档案,数据库由 updatedb 程序来更新,updatedb是由 cron daemon 周期性调用的。默认情况下 locate 命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是 locate 所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb 每天会跑一次,可以由修改 crontab 来更新设定值 (etc/crontab)。
locate 与 find 命令相似,可以使用如 *、? 等进行正则匹配查找
- 常用参数
-l num:要显示的行数
-f:将特定的档案系统排除在外,如将proc排除在外
-r:使用正则运算式做为寻找条件
- 示例
① 查找和 pwd 相关的所有文件(文件名中包含 pwd)
locate pwd
② 搜索 etc 目录下所有以 sh 开头的文件
locate /etc/sh
③ 查找 /var 目录下,以 reason 结尾的文件
locate -r '^/var.*reason$'
其中.表示一个字符,*表示任务多个;.*表示任意多个字符
十一、mv 命令
移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。
当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。
- 示例
① 将文件 test.log 重命名为 test1.txt
mv test.log test1.txt
② 将文件 log1.txt、log2.txt、log3.txt 移动到根的 test3 目录中
mv llog1.txt log2.txt log3.txt /test3
③ 将文件 file1 改名为 file2,如果 file2 已经存在,则询问是否覆盖
mv -i log1.txt log2.txt
④ 移动当前文件夹下的所有文件到上一级目录
mv * ../
十二、rm 命令
删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm来删除文件,通常仍可以将该文件恢复原状。
rm [选项] 文件…
- 示例
① 删除任何 .log 文件,删除前逐一询问确认
rm -i *.log
② 删除 test 子目录及子目录中所有档案删除,并且不用一一确认
rm -rf test
③ 删除以 -f 开头的文件
rm -- -f*
十三、tail 命令
用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理,常用于查看日志文件。
- 常用参数
-f:循环读取(常用于查看递增的日志文件)
-n<行数>:显示行数(从后向前)
- 示例
① 循环读取逐渐增加的文件内容
ping 127.0.0.1 > ping.log &
& 后台运行,可使用 jobs -l 查看,也可使用 fg命令 将其移到前台运行。
十四、touch 命令
Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。 ls -l 可以显示档案的时间记录。
- 命令格式
touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件
或目录…]
- 命令参数
-a:改变档案的读取时间记录。
-m:改变档案的修改时间记录。
-c:假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
-f:不使用,是为了与其他 unix 系统的相容性而保留。
-r:使用参考档的时间记录,与 --file 的效果一样。
-d:设定时间与日期,可以使用各种不同的格式。
-t:设定档案的时间记录,格式与 date 指令相同。
–no-create 不会建立新档案。
–help 列出指令格式。
–version 列出版本讯息。
- 示例
① 使用指令"touch"修改文件"testfile"的时间属性为当前系统时间
#修改文件的时间属性
[root@localhost test]# touch testfile
首先,使用ls命令查看testfile文件的属性,如下所示:
#查看文件的时间属性
[root@localhost test]# ls -l testfile
-rw-r--r-- 1 hdd hdd 55 2011-08-22 16:09 testfile
#原来文件的修改时间为16:09
执行指令"touch"修改文件属性以后,并再次查看该文件的时间属性,如下所示:
#修改文件时间属性为当前系统时间
[root@localhost test]# touch testfile
#查看文件的时间属性
[root@localhost test]# ls -l testfile
-rw-r--r-- 1 hdd hdd 55 2011-08-22 19:53 testfile
#修改后文件的时间属性为当前系统时间
② 使用指令"touch"时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件"file"
#创建一个名为“file”的新的空白文件
[root@localhost test]# touch file
十五、vim 命令
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。
三个模式使用常见命令:
- 示例
① 打开文件并跳到第 10 行
vim +10 filename.txt
② 打开文件跳到第一个匹配的行
vim +/search-term filename.txt
③ 以只读模式打开文件
vim -R /etc/passwd
十六、whereis 命令
whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。whereis 及 locate 都是基于系统内建的数据库进行搜索,因此效率很高,而find则是遍历硬盘查找文件。
- 常用参数
-b 定位可执行文件
-m 定位帮助文件
-s 定位源代码文件
-u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件
- 实例
① 查找 locate 程序相关文件
whereis locate
② 查找 locate 的源码文件
whereis -s locate
③ 查找 lcoate 的帮助文件
whereis -m locate
十七、 which 命令
在 linux 要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:
which:查看可执行文件的位置,whereis 查看文件的位置。locate 配合数据库查看文件位置。
find:实际搜寻硬盘查询文件名称。
which 是在 PATH 就是指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
- 常用参数
-n:指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名
- 示例
① 查看 ls 命令是否存在
which ls
② 查看 which
which which
③ 查看 cd
which cd
#会显示不存在,因为 cd 是内建命令,而 which 查找显示是 PATH 中的命令
十八、grep 命令
强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索。
grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
- 命令格式
grep [选项] 参数 文件 | 目录
- 常用参数
-A n 显示匹配字符后 n 行-B n 显示匹配字符前 n 行-C n 显示匹配字符前后 n 行-c 计算符合样式的列数-i 忽略大小写-l 只列出文件内容符合指定的样式的文件名称-f 从文件中读取关键词-n 显示匹配内容的所在文件中行数-R 递归查找文件夹
- grep 的规则表达式
^ 锚定行的开始,如: '^grep' 匹配所有以 grep 开头的行$ 锚定行的结束,如: 'grep$' 匹配所有以 grep 结尾的行. 匹配一个非换行符的字符,如: 'gr.p' 匹配 gr 后接一个任意字符,然后是 p* 匹配零个或多个先前字符,如:'*grep' 匹配所有一个或多个空格后紧跟 grep 的行.* 一起用代表任意字符[] 匹配一个指定范围内的字符,如 '[Gg]rep' 匹配 Grep 和 grep[^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep' 匹配不包含 A-R 和 T-Z 的一个字母开头,紧跟 rep 的行\(..\) 标记匹配字符,如:'\(love\)' , love 被标记为 1\< 锚定单词的开始,如 :'\<grep' 匹配包含以 grep 开头的单词的行\> 锚定单词的结束,如: 'grep\>' 匹配包含以 grep 结尾的单词的行x\{m\} 重复字符x , m 次,如: '0\{5\}' 匹配包含 5 个 o 的行x\{m,\} 重复字符 x 至少 m 次,如: 'o\{5,\}' 匹配至少有5 个 o 的行x\{m,n\} 重复字符 x 至少 m 次,不多于 n 次,如: 'o\{5,10\}' 匹配 5--10 个 o 的行\w 匹配文字和数字字符,也就是 [A-Za-z0-9] ,如: 'G\w*p' 匹配以 G 后跟零个或多个文字或数字字符,然后是p\W \w 的反置形式,匹配一个或多个非单词字符,如点号句号等\b 单词锁定符, 如: '\bgrep\b' 只匹配 grep
- 示例
① 查找指定进程
ps -ef | grep nginx
② 查找指定进程个数
ps -ef | grep nginx -c
③ 从文件中读取关键词
cat test1.txt | grep -f key.log
④ 从文件夹中递归查找以grep开头的行,并只列出文件
grep -lR '^grep' /tmp
⑤ 查找非x开关的行内容
grep '^[^x]' test.txt
⑥ 显示包含 ed 或者 at 字符的内容行
grep -E 'ed|at' test.txt
十九、wc 命令
wc(word count)功能为统计指定的文件中字节数、字数、行数,并将统计结果输出。
- 命令格式
wc [选项] file..
- 命令参数
-c 统计字节数-l 统计行数-m 统计字符数-w 统计词数,一个字被定义为由空白、跳格或换行字符分隔的字符串
- 实例
① 查找文件的 行数 单词数 字节数 文件名
wc text.txt
结果:
7 8 70 test.txt
② 统计输出结果的行数
cat test.txt | wc -l