人生有极限,学无止境。目录管理绝对路径和相对路径我们知道Linux的目录结构是树形结构,最上面的目录是根目录/。其他目录可以通过挂载它们添加到树中,并通过卸载它们删除。在开始本教程之前,我们需要知道什么是绝对路径和相对路径。绝对路径:路径的写法,从根目录/开始,例如:目录/usr/share/doc。相对路径:路径的写法不是从/写的。比如从/usr/share/doc到/usr/share/man,可以写成:cd../man这就是相对路径的写法!处理目录的常用命令接下来我们看一些处理目录的常用命令:ls:列出目录cd:切换目录pwd:显示当前目录mkdir:新建目录rmdir:删除空目录cp:复制文件或目录rm:删除文件或目录mv:移动文件和目录,或修改文件和目录的名称可以使用man[command]查看各个命令的使用文档,如:mancp。ls(列出目录)在Linux系统中,ls命令可能是最常运行的。语法:[root@www~]#ls[-aAdfFhilnrRSt]目录名选项及参数:-a:所有文件,连同隐藏文件(以.开头的文件)一起列出(常用)-l:长数据字符串输出,包括文件属性和权限等;(常用)列出目录下所有文件(包括属性和隐藏文件)[root@www~]#ls-al~cd(切换目录)cd是ChangeDirectory的缩写,是用来改变工作目录的命令目录。语法:cd[相对路径或绝对路径]测试:#切换到用户目录[root@jiangwang/]#cdhome#使用mkdir命令创建jiangwang目录[root@jiangwanghome]#mkdirjiangwang#进入jiangwang目录[root@jiangwanghome]#cdjiangwang#回到上一级[root@jiangwangjiangwang]#cd..#回到根目录[root@jiangwangjiangwang]#cd/#表示回到你的家目录,也就是/root这个目录[root@jiangwangjiangwang]#cd~接下来再多操作几下应该就能很好的理解cd命令了。pwd(Displaythecurrentdirectory)pwd是PrintWorkingDirectory的缩写,是显示当前目录的命令。[root@jiangwangjiangwang]#pwd[-P]选项和参数:-P:显示实际路径,而不是使用连接(链接)路径。测试:#简单显示当前工作目录[root@jiangwang~]#pwd/root#如果是链接,要显示真实地址,可以使用-P参数[root@jiangwang/]#cdbin[root@jiangwangbin]#pwd-P/usr/binmkdir(createanewdirectory)如果要新建一个目录,那就用mkdir(makedirectory)。mkdir[-mp]目录名选项及参数:-m:配置文件的权限!直接配置,不用看脸默认权限(umask)~-p:帮你直接递归创建需要的目录(包括上层目录)!test:#进入我们的用户目录[root@jiangwang/]#cd/home#创建一个test文件夹[root@jiangwanghome]#mkdirtest#创建一个多级目录[root@jiangwanghome]#mkdirtest1/test2/test3/test4mkdir:cannotcreatedirectory'test1/test2/test3/test4':Nosuchfileordirectory#<==没有办法直接创建这个目录!#有了这个-p选项,就可以为你创建多层目录了![root@jiangwanghome]#mkdir-ptest1/test2/test3/test4#创建目录,权限为rwx--x--x。[root@jiangwanghome]#mkdir-m711test2[root@jiangwanghome]#ls-ldrwxr-xr-x2rootroot4096Mar1221:55testdrwxr-xr-x3rootroot4096Mar1221:56test1drwx--x--x2rootroot4096Mar1221:58test2rmdir(Deleteemptydirectory)Syntax:rmdir[-p]DirectorynameOptionsandparameters:-p:Deletewiththeprevious"empty"directoryTest:#See存在多少个目录?[root@jiangwanghome]#ls-ldrwxr-xr-x2rootroot4096Mar1221:55testdrwxr-xr-x3rootroot4096Mar1221:56test1drwx--x--x2rootroot4096Mar1221:58test2#可以直接删除,没问题[root@jiangwanghome]#rmdirtest#不能删除,因为还有内容![root@jiangwanghome]#rmdirtest1rmdir:failedtoremove'test1':Directorynotempty#使用-p选项立即依次删除test1/test2/test3/test4。[root@jiangwanghome]#rmdir-ptest1/test2/test3/test4注意:这个rmdir只能删除空目录,可以使用rm命令删除非空目录,后面会看到!cp(复制文件或目录)语法:[root@www~]#cp[-adfilprsu]源文件(source)目标文件(destination)[root@www~]#cp[options]source1source2source3....目录选项及参数:-a:相当于-pdr的意思,pdr请参考后面的说明;(常用)-p:将文件的属性一起复制,而不是使用默认属性(常用作备份);-d:如果源文件是一个链接文件(linkfile)的属性,则复制链接文件的属性而不是文件本身;-r:递归连续复制,用于目录复制行为;(常用)-f:表示强制,如果目标文件已经存在,打不开,去掉再试;-i:如果目标文件(destination)已经存在,会先询问覆盖时的动作(常用)-l:对链接文件做一个硬链接(hardlink),而不是复制文件本身。-s:复制成符号链接文件(symboliclink),即“快捷方式”文件;-u:仅当目标比源旧时才升级目标!测试:#找一个有文件的目录,我这里找到了根目录[root@jiangwanghome]#cd/root[root@jiangwang~]#lsinstall.sh[root@jiangwang~]#cd/home#复制根目录install.sh到主目录下[root@jiangwanghome]#cp/root/install.sh/home[root@jiangwanghome]#lsinstall.sh#再复制一遍,加-i参数,增加覆盖查询?[root@jiangwanghome]#cp-i/root/install.sh/homecp:overwrite'/home/install.sh'?y#n不被覆盖,y被覆盖rm(removefileordirectory)语法:rm[-fir]fileordirectory选项及参数:-f:表示强制,忽略不存在的文件,不会出现警告信息;-i:交互模式,删除前会询问用户是否行动-r:递归删除啊!最常用的目录被删除!这是一个非常危险的选择!!!测试:#删除刚刚在cp实例中创建的install.sh![root@jiangwanghome]#rm-iinstall.shrm:删除常规文件'install.sh'?y#如果加上-i选项,会主动询问,防止你删错文件名!#尽量不要在服务器上使用rm-rf/mv(移动文件和目录,或修改名称)语法:[root@www~]#mv[-fiu]sourcedestination[root@www~]#mv[options]source1source2source3....目录选项及参数:-f:force表示强制,如果目标文件已经存在,则不询问,直接覆盖;-i:如果目标文件(destination)已经存在,会询问是否覆盖!-u:如果目标文件已经存在,并且源比较新,那么测试会更新:#复制一个文件到当前目录[root@jiangwanghome]#cp/root/install.sh/home#新建文件夹test[root@jiangwanghome]#mkdirtest#将复制的文件移动到我们创建的目录下,并勾选[root@jiangwanghome]#mvinstall.shtest[root@jiangwanghome]#lstest[root@jiangwanghome]#cdtest[root@jiangwangtest]#lsinstall.sh#重命名文件夹并再次检查![root@jiangwangtest]#cd..[root@jiangwanghome]#mvtestmvtest[root@jiangwanghome]#lsmvtest基本属性了解文件属性Linux系统是一个典型的多用户系统,不同的用户在不同的顺序为了保护系统的安全,Linux系统对不同用户访问同一个文件(包括目录文件)的权限有不同的规定。在Linux中,我们可以使用ll或ls-l命令来显示文件的属性以及文件所属的用户和组。例如,在示例中,引导文件的第一个属性用“d”表示。“d”表示该文件在Linux中是一个目录文件。在Linux中,第一个字符表示该文件是目录、文件或链接文件等:当是[d]时,表示目录;当为[-]时表示文件;如果是[l],则表示链接文件(linkfile);如果是[b],表示设备文件中可以存储的接口设备(随机存取设备);如果是[c],表示设备文件中的串口设备,如键盘,鼠标(一次性读取设备)。在后面的字符中,以三个为一组,都是“rwx”三个参数的组合。其中,[r]代表可读(read),[w]代表可写(write),[x]代表可执行(execute)。需要注意的是,这三个权限的位置是不会变的。如果没有权限,会有一个减号[-]。每个文件的属性由左边第一部分的10个字符决定(如下图):从左到右用数字0-9表示。第0位决定文件类型,第1-3位决定owner(文件的所有者)拥有该文件的权限。第4~6位决定所属组(与所有者同组的用户)拥有该文件的权限,第7~9位决定其他用户拥有该文件的权限。其中:第1、4、7位数字表示读权限,如果用“r”字符表示则有读权限,如果用“-”字符表示则无读权限;第2、5、8位代表写权限,如果用“w”字符表示,则表示有写权限,如果用“-”字符表示,则没有写权限;第3、6、9位代表可执行权限,如果用“x”字符表示,表示有执行权限,如果用“-”字符表示,则没有执行权限。对于一个文件,它有一个特定的所有者,即拥有该文件所有权的用户。同时,在Linux系统中,用户是按组划分的,一个用户属于一个或多个组。文件拥有者以外的用户可以分为与文件拥有者同组的用户和其他用户。因此,Linux系统根据文件拥有者、与文件拥有者同组的用户、其他用户,规定了不同的文件访问权限。在上面的例子中,boot文件是一个目录文件,属主和属组都是root。修改文件属性1.chgrp:改变文件组chgrp[-R]组名文件名-R:递归改变文件组,即改变目录文件的组时,如果加上-R参数,则该目录下所有文件的属性组都会改变。2、chown:改变文件的属主,同时也可以改变文件所在的组。chown[-R]所有者名,文件名chown[-R]所有者名:组名,文件名3、chmod:改变文件的9个属性chmod[-R]设置xyz文件或目录linux文件有两种方式属性,一个是数字,一个是符号。Linux文件的基本权限有九种,分别是owner/group/others,每一种都有自己的读/写/执行权限。先回顾一下刚才的数据:该文件的权限字符为:“-rwxrwxrwx”,这九个权限是三个一组!其中,我们可以用数字来代表各个权限。各个权限的分数对照表如下:r:4w:2x:1每个身份(owner/group/others)的三个权限(r/w/x)分数需要累加。例如当权限为:[-rwxrwx---]时得分为:owner=rwx=4+2+1=7group=rwx=4+2+1=7others=---=0+0+0=0chmod770filename大家可以自己下去多测试!文件内容查看概述在Linux系统中使用如下命令查看文件内容:cat从第一行开始显示文件内容,tac从最后一行开始显示,可见tac是cat的反写!显示nl时,顺带输出行号!more逐页显示文件内容。less类似于more,但比more更好,它可以翻页!head只看前几行tail只看尾行可以使用man[command]查看各个命令的使用文档,如:mancp。cat从第一行开始显示文件内容语法:cat[-AbEnTv]选项及参数:-A:相当于-vET的集成选项,可以列出一些特殊字符而不是空格;-b:列出行号,只对非空行显示行号,空行不标行号!-E:显示结束换行符字节$;-n:打印行号,与-b选项不同的是,空行旁边会有行号;-T:将[tab]按钮显示为^I;-v:列出一些不可见的特殊字符测试:#查看网络配置:文件地址/etc/sysconfig/network-scripts/[root@jiangwang~]#cat/etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0BOOTPROTO=dhcpONBOOT=yestactac正好和cat命令相反,从最后一行开始显示文件内容,可见tac是从cat倒过来写的!如:[root@jiangwang~]#tac/etc/sysconfig/network-scripts/ifcfg-eth0ONBOOT=yesBOOTPROTO=dhcpDEVICE=eth0nl显示行号语法:nl[-bnw]文件选项及参数:-b:指定行号指定主要有两种方式:-ba:表示无论是否为空行,也列出行号(类似于cat-n);-bt:如果有空行,空行不列出行号(默认值);-n:列出行号的表示方式,主要有三种:-nln:行号显示在屏幕最左边;-nrn:行号显示在自己列的最右边,且不加0;-nrz:行号显示在自己字段的最右边,并加0;-w:行号字段占用的位数。测试:[root@jiangwang~]#nl/etc/sysconfig/network-scripts/ifcfg-eth01DEVICE=eth02BOOTPROTO=dhcp3ONBOOT=yesmore一页一页翻页。在more程序运行过程中,有几个按钮可以按下:Space键(空格):表示向下翻一页;Enter:表示调低“一行”;/string:表示在显示的内容中搜索关键字“string”;:f:立即显示文件名和当前显示的行数;q:表示立即离开,不再显示文件内容。b或[ctrl]-b:表示向后翻页,但是这个动作只对文件有用,对管道没有用。[root@jiangwangetc]#more/etc/csh.login....(中间省略)....--More--(28%)#重点在这一行!您的光标也将在这里等待您的命令less逐页翻页。下面的例子输出/etc/man.config文件的内容:less运行时可以输入的命令是:空白键:向下翻一页;[pagedown]:向下翻一页;[pageup]:向上翻一页;/string:向下搜索“string”函数;?string:向上搜索“string”函数;n:重复上一次搜索(与/或?!相关)N:反向重复上一次搜索(与/或?!相关)q:离开less程序;[root@jiangwangetc]#more/etc/csh.login....(中间省略).....:#这里可以等待你输入的命令!head取出文件的前几行语法:head[-nnumber]文件选项及参数:-n后面是数字,表示显示几行!默认显示前10行!如果你想显示前20行,你必须这样做:[root@jiangwangetc]#head-n20/etc/csh.logintail取出文件接下来的几行语法:tail[-nnumber]文件选项及参数:-n:后面跟数字,表示显示多少行。默认情况下,显示最后10行!如果你想显示最后20行,你必须这样做:[root@jiangwangetc]#tail-n20/etc/csh.),另一种称为符号链接(SymbolicLink)。在这种情况下,ln命令会创建硬链接。硬链接硬链接是指通过索引节点的连接。在Linux文件系统中,无论磁盘分区中存放什么类型的文件,都被分配了一个编号,称为索引节点编号(InodeIndex)。在Linux中,存在指向同一个inode的多个文件名。例如:A是B的硬链接(A和B都是文件名),那么A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B完全等同于文件系统。删除任何一个都不会影响对另一个的访问。硬链接的作用是让一个文件有多个有效的路径名,这样用户就可以对重要的文件建立硬链接,起到防止“误删”的作用。原因如上所述,因为目录的inode连接不止一个。只删除一个连接不会影响索引节点本身和其他连接。只有当最后一个连接被删除时,文件的数据块与目录的连接才会被释放。也就是说,一个文件真正被删除的条件是,与其相关的所有硬链接文件都被删除。另一种软链接称为符号链接(SymbolicLink),也称为软链接。软链接文件具有类似Windows的快捷方式。它实际上是一个特殊的文件。在符号链接中,文件实际上是一个文本文件,其中包含有关另一个文件位置的信息。例如:A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不同,A和B指向两个不同的inode,然后指向两个不同的数据块。但是A的数据块中只存放了B的路径名(可以根据这个找到B的目录项)。A和B之间存在“主从”关系,如果B被删除,A仍然存在(因为两者是不同的文件),只是指向了一个无效链接。测试:[root@jiangwang/]#cdhome/[root@jiangwanghome]#touchf1#创建测试文件f1[root@jiangwanghome]#lsf1jiangwangwww[root@jiangwanghome]#lnf1f2#创建f1一个硬链接文件f2[root@jiangwanghome]#ln-sf1f3#创建一个f1的符号链接文件f3[root@jiangwanghome]#ls-li#-i参数显示文件的inode节点信息923359-rw-r--r--2rootroot0Mar815:11f1923359-rw-r--r--2rootroot0Mar815:11f2923360lrwxrwxrwx1rootroot2Mar815:12f3->f1从上面的结果可以看出,硬链接文件f2和原始文件f1的inode节点相同,都是923359,但是符号链接文件的inode节点不同。#echo字符串输出>>f1输出到f1文件[root@jiangwanghome]#echo"我是f1文件">>f1[root@jiangwanghome]#catf1我是f1文件[root@jiangwanghome]#catf2我是f1file[root@jiangwanghome]#catf3我是f1file[root@jiangwanghome]#rm-ff1[root@jiangwanghome]#catf2我是f1file[root@jiangwanghome]#catf3cat:f3:Nosuchfileordirectory[root@jiangwanghome]#通过上面的测试可以看出:删除原文件f1后,硬链接f2不受影响,但是符号链接f1文件失效;可以据此做一些相关的测试,可以得到如下结论:删除符号链接f3对f1和f2没有影响;删除硬链接f2对f1和f3没有影响;删除原文件f1对硬链接f2没有影响,导致符号链接f3失效;同时删除原文件f1和硬链接f2,整个文件就真正删除了。
