一、ls(list)列出目标目录下的所有的清单(包括文件和子目录),通过ls不仅可以查看linux文件包含的文件,而且可以查看文件的权限(包括目录、文件夹、文件的权限)。
1.命令的格式
ls 选项 目录名
2.命令的功能
列出目标目录中的所有的文件和子目录
3.常用的参数:
-a = -all 列出目录下的所有的文件,包括以 . 开头的隐藏文件
-A同-a,但列不出“.”(表示当前目录)和“..”(表示当前目录的父目录)
-b将文件中不可输出的字符以反斜线“”加字符编码的方式输出
-c配合-lt:根据ctime排序及显示ctime(文件状态最后更改的时间)配合-l:显示ctime但根据时间排序否则:根据ctime排序
-C每栏由上至下列出项目(多行显示结果)
-l与"-C"选项功能相反,所有输出信息用单列格式输出,不会输出多列
-d显示当前的所在的目录,并不显示目录中的文件
-f对输出的文件不进行排序
-R同时列出所有子目录层
-g与-l类似但是不列出所有者
-G=-no-group不列出有关组的任何信息
-h以容易理解的格式列出文件大小
-H使用命令列中的符号链接指示真正的目的地
-m所有项目以逗号分隔,并填满整行行宽
-s以块大小为单位列出所有文件的大小
-t以文件修改时间排序
-x逐行列出项目而不是逐栏列出
-X根据扩展名排序
--help显示此帮助并离开
-version显示版本信息并离开
常见的范例:
1.1列出当前目录中所有以“t”开头的目录的详细内容
命令:ls -l t*
1.2输出长格式列表
命令:ls -l
1.3水平列出文件
命令:ls -m
1.4优先显示最后修改的文件
命令:ls -t
1.5显示递归文件(显示目录下的所有子目录)
命令:ls -R
1.6 打印文件的UID(用户id)和GID(组id)
命令:ls -n
二、cd
1.命令格式:cd 选项 参数
2.常用参数
-p如果要切换到的目标目录是一个符号连接,戒指切换到符号连接指向的目标目录
-L如果要切换的目标目录是一个符号连接,直接切换到字符连接名代表的目录而非符号连接所指向的目标目录
-当仅使用一个“-”时当前的工作目录将被切换到环境变量“OLDPWD”所表示的目录(返回进入此目录之前的所有目录)
cd / :进入根目录
cd ..:返回上一级目录
cd../..:返回上两级目录
三、pwd判断当前目录在文件系统内的确切位置
1.格式
pwd 选项
2.常用参数
一般情况不带任何参数;如果目标时链接时:pwd -P显示出实际路径而不是使用链接路径
四、mkdir用来创建指定名称的目录,要求创建目录的用户在当前目录有写的权限,并且指定的目录名不能是当前目录中已经存在的目录。
1.命令格式
mkdir 选项 目录
2.命令参数
-m创建目录的同时设置目录的权限
-Z设置安全上下文,当使用SELinux时有效
-p若所要建立的目录的上层目录目前尚未建立,则会一并建立上层目录
3.实例
3.1 创建权限为 777 的demo
mkdir -m 777 demo
五、rm 删除文件或者目录(危险命令实际生产中)
1.命令格式
rm [选项] 文件...
2.命令参数
-f 忽略不存在的文件,从不给出提示
-i 进行交互式删除
-r 指示rm将参数中列出的全部目录和子目录均递归的删除
3.实例
3.1 强行删除文件系统不再提示
rm -f 2.txt
3.2 删除前逐一进行询问确认
rm -i 2.txt
3.3 删除2.txt目录及子目录中所有的档案删除,并且不用一一确认
rm -rf 2.txt
六、rmdir 该命令从一个目录中删除一个或多个子目录项,删除某一目录时也必须具有对父目录的写权限
1.命令格式
rmdir 选项 目录(注:rmdir不能删除非空目录)
2.命令参数
-p递归删除目录,当子目录删除后其父目录为空时,也同时会被删除,如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息
-v 显示指令的执行过程
rmdir -p 当子目录被删除后使它也成为空目录,则顺便一并删除
七、mv
1.命令格式:
mv [选项] 源文件或者目录 目标文件或者目录
2.命令参数:
-b 若需覆盖文件,则覆盖前先行备份
-f (force)强制的意思,如果目标文件已经存在,不会询问直接覆盖
-i 若目标文件已经存在,就会询问是否覆盖
-u 若目标文件已经存在,且source比较新,才会更新
-t 即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前源文件在后。
3.命令实例:
3.1文件改名:
mv test.log test1.log (把test1.log改名为test.log)
3.2 移动文件
mv test1.txt test3(将test1.txt移动到目录test3中)
3.3将文件log1.txt,log2.txt,log3.txt移动到目录test3中
mv log1.txt log2.txt log3.txt test3 (命令将log1.txt,log2.txt,log3.txt三个文件移动到test3目录中去)
mv -t /opt/soft/test/test4/log1.txt log2.txt log3.txt(命令将三个文件移动到test4目录中去)
3.4 将文件file1改名为file2,如果file2已经存在,则询问是否覆盖
mv -i log1.txt log2.txt
3.5 将文件file1改名为file2,即使file2存在,也是直接覆盖掉
mv -f log3.txt log2.txt(log3.txt的内容直接覆盖了log2.txt内容,-f这是个危险的选项,使用的时候一定要保持头脑清醒)
3.6目录移动
mv dir1 dir2(如果目录dir2不存在,将目录dir1改名为dir2,否则将dir1移动到dir2中)
八、cp
1.命令格式:
cp [选项]...[-T]源 目的 或 cp [选项]... 源... 目录 或 cp [选项]... -t 目录 源...
2.命令参数
-a:此参数的效果和同时指定"-dpR"参数相同
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-f:强行复制文件或目录,不论目标文件或目录是否已存在
-i:覆盖既有文件之前先询问用户
-l:对源文件建立硬连接,而非复制文件
-p:保留源文件或目录的属性
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理
-s:对源文件建立符号连接,而非复制文件
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀
-b:覆盖已存在的文件目标前将目标文件备份
-v:详细显示命令执行的操作
3.实例
3.1 将文件file复制到/usr/men/temp下并改名为file1
cp file /usr/men/tmp/file1
3.2将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中
cp -r /usr/men /usr/zh
九、touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件
1.命令格式:
touch [选项]... 文件...
2.命令参数
-a 或--time=atime或--time=access或--time=use 只更改存取时间
-c 或--no-create 不建立任何文档
-d 使用指定的日期时间,而非现在的时间
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题
-m 或--time=mtime或--time=modify 只更改变动时间
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同
-t 使用指定的日期时间,而非现在的时间
3.实例
3.1touch 2.txt(创建一个之前不存在的2.txt文件)
3.2更新log.log的时间和log1.log时间戳相同
touch -r log.log log1.log
十、cat主要有三个功能:1一次显示整个文件内容 cat filename
2从键盘创建一个文件 cat > file 只能创建文件不能编辑已经有的文件
3将几个文件合并成为一个文件 cat file1 file2 > file
1.命令格式:cat (选项) (参数)
-n或-number:有1开始对所有输出的行数编号
-b或--number-nonblank:和-n相似,只不过对于空白行不编号
-s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行
-A:显示不可打印字符,行尾显示“$”
-e:等价于"-vE"选项
-t:等价于"-vT"选项
2.实例
cat m1 (在屏幕上显示文件ml的内容)
cat m1 m2 (同时显示文件ml和m2的内容)
cat m1 m2 > file (将文件ml和m2合并后放入文件file中)
十一、nl
1.命令格式
nl [选项]... [文件]...
2.命令参数
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n)
-b t :如果有空行,空的那一行不要列出行号(默认值)
-n :列出行号表示的方法,主要有三种:
-n ln :行号在萤幕的最左方显示
-n rn :行号在自己栏位的最右方显示,且不加 0
-n rz :行号在自己栏位的最右方显示,且加 0
-w :行号栏位的占用的位数
-p :在逻辑定界符处不重新开始计算
3.实例
3.1用nl列出2.txt的内容
nl 2.txt(文件中的空白行,nl不会追加上行号)
3.2用nl列出2.txt的内容,空白行也加行号
nl -b a 2.txt
十二、more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能
1.命令格式
more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ]
2.命令参数
+n 从笫n行开始显示
-n 定义屏幕大小为n行
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
-c 从顶部清屏,然后显示
-d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键出)”,禁用响铃功能
-l 忽略Ctrl+l(换页)字符
-p 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
-s 把连续的多个空行显示为一行
-u 把文件内容中的下画线去掉
4.常用操作
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more
5.实例
5.1 从文件的第三行开始显示内容
more +3 2.txt
5.2 设定每屏显示行数
more -5 2.txt
十三、less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件
1.命令格式
less [参数] 文件
2.命令参数
-e:文件内容显示完毕后,自动退出
-f:强制显示文件
-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度
-l:搜索时忽略大小写的差异
-N:每一行行首显示行号
-s:将连续多个空行压缩成一行显示
-S:在单行显示较长的内容,而不换行显示
-x<数字>:将TAB字符显示为指定个数的空格字符
十四、head与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾
1.命令格式
head [参数]... [文件]...
2.命令参数
-q 隐藏文件名
-v 显示文件名
-c<字节> 显示字节数
-n<行数> 显示的行数
3.实例
3.1显示文件的前n行
head -n 5 log1.log
十五、tail用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件
1.命令格式
tail[必要参数][选择参数][文件]
2.常用参数
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示行数
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束.
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
3.实例
3.1显示文件末尾的内容
tail -n 5 log1.log
3.2循环查看文件内容
tail -f test.log
3.3从第五行开始显示文件内容
tail -n +5 log1.log
十六、which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果
1.命令格式
which 可执行文件名称
2.命令参数
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p 与-n参数相同,但此处的包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息
3.实例
3.1查找文件、显示命令路径
which pwd ; which adduser ...
3.2找出cd这个命令
which cd (这是因为 cd 是bash 内建的命令! 但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的!)
十七、whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。whereis 程序还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力
1.命令格式
whereis [-bmsu] [BMS 目录名 -f ] 文件名
2.命令参数
-b 定位可执行文件。
-m 定位帮助文件。
-s 定位源代码文件。
-u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
-B 指定搜索可执行文件的路径。
-M 指定搜索帮助文件的路径。
-S 指定搜索源代码文件的路径。
十八、locate让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行
1.命令格式
Locate [选择参数] [样式]
2.命令参数
-e 将排除在寻找的范围之外。
-1 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
-f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。
-q 安静模式,不会显示任何错误讯息。
-n 至多显示 n个输出。
-r 使用正规运算式 做寻找的条件。
-o 指定资料库存的名称。
-d 指定资料库的路径
-h 显示辅助讯息
-V 显示程式的版本讯息
3.实例
3.1 查看和pwd相关的所有文件
locate pwd
3.2搜索etc目录下所有以sh开头的文件
locate /etc/sh
十九、find用于在文件树种查找文件,并作出相应的处理
1.命令格式
find pathname -options [-print -exec -ok ...]
2.命令参数
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } ;,注意{ }和;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
3.命令选项
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
另外,下面三个的区别:
-amin n 查找系统中最后N分钟访问的文件
-atime n 查找系统中最后n*24小时访问的文件
-cmin n 查找系统中最后N分钟被改变文件状态的文件
-ctime n 查找系统中最后n*24小时被改变文件状态的文件
-mmin n 查找系统中最后N分钟被改变文件数据的文件
-mtime n 查找系统中最后n*24小时被改变文件数据的文件
4.实例
4.1查找指定时间内修改过的文件
find -atime -2(超过48小时内修改过的文件)
4.2根据关键字查找
find -name “*.log”(在当前目录查找 以.log结尾的文件)
4.3按类型查找
find -type f -name “*.log”(查找当前目录以 .log结尾的普通文件)
4.4按照目录或文件的权限来查找
find /opt/soft/test/ -perm 777(查找/opt/soft/test/目录下权限为777的文件)
二十、find命令之exec
-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
{} 花括号代表前面find查找出来的文件名。
使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的。在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。 exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。
1.实例
1.1:ls -l命令放在find命令的-exec选项中
find . -type f -exec ls -l {} ; (find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出)
1.2在目录中查找更改时间在n日以前的文件并删除它们
find -type f -mtime +14 -exec rm {} ;(在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你)
1.3用exec选项执行cp命令
find . -name "*.log" -exec cp {} test3 ;
二十一、find之xargs(有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用)
1实例
1.1查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪个文件
find . -type f -print | xargs file
二十二、find命令的参数详解
1. 使用name选项: 不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.log的文件,使用~作为 'pathname'参数,波浪号~代表了你的$HOME目录
实例
1.1 查看当前目录以及子目录中"*.log"文件
find ~ -name "*.log" -print
1.2 当前目录及子目录中查找文件名以一个大写字母开头的文件
find . -name "[A-Z]*" -print
1.3在/etc目录中查找文件名以host开头的文件
find /etc -name "host*" -print
1.4让系统高负荷运行,就从根目录开始查找所有的文件
find / -name "*" -print
2.使用perm选项:按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法
2.1在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件
find . -perm 755 -print
3.忽略某个目录:如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。如果希望在test目录下查找文件,但不希望在test/test3目录下查找
find test -path "test/test3" -prune -o -print
4.使用find查找文件的时候怎么避开某个文件的目录
4.1在test 目录下查找不在test4子目录之内的所有文件
find test -path "test/test4" -prune -o -print
5.使用user和houser
5.1按文件属性查找文件
在$HOME目录中查找文件属主卫peida的文件
find ~ -user peida -print
5.2为了查找属主帐户已经被删除的文件,可以使用-nouser选项。在/home目录下查找所有的这类文件
find /home -nouser -print
6.使用group和nogroup
像user和nouser选项一样,针对文件所属于的用户组, find命令也具有同样的选项,为了在/apps目录下查找属于gem用户组的文件,可以用
find /apps -group gem -print
要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件
find / -nogroup-print
7.按照更改时间或访问时间等查找文件
系统根目录下查找更改时间在5日以内的文件,可以用:
find / -mtime -5 -print
8.查找比某一个文件新或者旧的文件
查找更改时间比文件2.txt新但比文件3.txt旧的文件
find -newer 2.txt ! -newer 3.txt
9.使用type选项
在/etc目录下查找所有的目录
find /etc -type d -print
10.使用size选项(1000c是1kb)
在当前目录下查找文件长度大于1M字节的文件
find . -size +1000000c -print
11.使用depth选项
find命令从文件系统的根目录开始,查找一个文件名为CON.FILE的文件
find / -name "CON.FILE" -depth -print
12.使用mount选项:在当前文件系统中查找文件,不进入其他文件系统
从当前目录开始查找位于本文件系统中文件名以xc结尾的文件
find . -name "*.XC" -mount -print
二十三、linux的命令结构:当在使用Linux的时候,如果您通过ls –l / 就会发现,在/下包涵很多的目录,比如etc、usr、var、bin ... ... 等目录,而在这些目录中,我们进去看看,发现也有很多的目录或文件。文件系统在Linux下看上去就象树形结构,所以我们可以把文件系统的结构形象的称为 树形结构。
当在使用Linux的时候,如果您通过ls –l / 就会发现,在/下包涵很多的目录,比如etc、usr、var、bin ... ... 等目录,而在这些目录中,我们进去看看,发现也有很多的目录或文件。文件系统在Linux下看上去就象树形结构,所以我们可以把文件系统的结构形象的称为 树形结构。
文件系统的是用来组织和排列文件存取的,所以她是可见的,在Linux中,我们可以通过ls等工具来查看其结构,在Linux系统中,我们见到的都是树形结构;比如操作系统安装在一个文件系统中,他表现为由/ 起始的树形结构。linux文件系统的最顶端是/,我们称/为Linux的root,也就是 Linux操作系统的文件系统。Linux的文件系统的入口就是/,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。
四种类型:
1.可分享的
可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;
2.不可分享的
自己机器上面运作的装置文件或者是与程序有关的socket文件等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了
3.不变的
有些数据是不会经常变动的,跟随着distribution而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等
4.可变动的
经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等
事实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义
/(root,根目录):与开机系统有关
/usr(unix software resource):于软件安装与执行有关
/var(variable):与系统运作过程有关