Linxu的读书笔记一些特殊的目录:.代表本级目录..代表上级目录-代表上一级工作目录~代表当前用户所在的主文件夹~account代表账号主文件夹目录的相关操作使用cd(切换目录)pwd(显示当前目录)$pwd[-P]#参数-P:显示当前路径而不是使用连接(链接)路径mkdir(new新建目录)$mkdir[-mp]目录名#parameter-m:configure文件的权限,直接设置,不用看默认权限#parameter-p:直接递归创建需要的目录(包括上层目录)。#比如创建一个rwx--x--x权限的目录$mkdir-m711test2#创建多层目录$mkdir-ptest1/test2/test3/test4rmdir(删除空目录)$rmdir[-p]directoryName#parameter-p:连同上层空目录一起删除#比如删除上面创建的多层目录$rmdir-ptest1/test2/test3/test4注意这个rmdir只能删除空目录.如果要删除目录下的所有内容,使用:rm-rtest关于执行文件路径的变量:$PATH当我们执行一个命令,比如ls时,系统会根据PATH设置去到PATH定义的各个目录查询名为ls的可执行文件。如果PATH定义的目录下有多个名为ls的可执行文件,则先找到的同名命令先执行。#你可以使用echo$PATH查看定义了哪些目录$echo$PATHoutput:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/游戏:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin每个目录之间用冒号:隔开,每个目录都有一个序号。对于要执行未在PATH变量中设置的目录的命令,可以使用绝对路径来执行该命令。或者进入命令的可执行文件目录,使用“./command”(如“./ls”)执行。如果要在任意目录下执行命令,需要将命令的可执行文件路径添加到PATH当中。$PATH="$PATH":/directory文件和目录管理ls(查看文件和目录)$ls[-aAdfFhilnrRSt]目录名$ls[--color={never,auto,always}]目录名$ls[--full-time]目录名#参数-a:所有文件,连同隐藏文件一起列出(以.开头的文件)#-A:列出所有文件,连同隐藏文件,但不包括.and..Adirectory#-d:只列出目录本身,不列出目录中的文件数据#-f:直接列出结果,不排序(ls默认会按文件名排序)#-F:根据文件、目录等信息给出额外的数据结构,如*代表可执行文件,/代表目录,=代表socket文件,|standsforFIFOfiles#-h:以人类可读的方式列出文件容量(如GB、KB等)#-i:列出inode号#-l:列出长数据字符串,包括文件属性和权限和其他数据#-n:列出UID和GID,不是用户名和用户组名#-r:将排序结果倒序输出,比如原文件名从小到大,倒过来就是从大到小#-R:和子目录的内容一起列出,表示会显示该目录下的所有文件#-S:文件按容量排序#-t:按时间排序#--color=never:不根据文件特征给颜色显示#--color=always:显示颜色#--color=auto:让系统根据设置判断是否给颜色#--full-time:全时模式输出(includingyear,month,day,hour,minute)#--time=[atime,ctime]:输出访问时间或更改权限属性时间(ctime),不是内容更改时间copy,deleteandmove:cp,rm,mvcp(复制文件)cp命令不仅可以复制文件,还可以创建链接文件(快捷方式)、两个文件的新旧比较并更新、复制整个目录等功能。$cp[-adfilprsu]源文件目标文件$cp[options]source1source2source3....directory#参数-a:复制文件的所有特征,包括用户、权限、时间等(如果操作用户不修改文件用户的属主和用户组权限不能复制,只能复制权限时间等属性)#-d:如果源文件是连接文件的属性,则复制连接文件attributeinsteadofthefileitself#-f:强制复制,如果目标文件已经存在,打不开,删除它自己再试试#-p:连同文件的属性一起复制过去,而不是使用默认属性#-r:递归连续复制,用于目录的复制行为#-s:复制为符号链接文件,即快捷方式文件#-u:如果目标文件比源文件旧,则目标文件将被更新。#如果有两个以上的源文件,最后一个目标文件必须是一个目录。rm(删除文件或目录)$rm[-fir]文件或目录#参数-f:强制删除,忽略不存在的文件,不会出现警告信息#-i:交互模式,会询问用户是否操作删除前#-r:递归删除,最常用于目录删除,比较危险参数#如果要删除的文件名以-开头,如“-”,需要删除文件的路径写出来是为了避免被系统误判为参数,比如"rm./-aaa-"或者"rm---aaa-"mv(移动文件和目录,或者重命名)$mv[-fiu]源文件目标文件$mv[option]source1source2source3...directory#参数-f:强制移动,如果目标文件已经存在,不会要求直接覆盖#参数-i:如果目标文件已经存在,会询问是否覆盖#-u:如果目标文件已经存在,源比较新,则更新#如果有多个源文件或目录,那么最后一个目标文件必须是“directory”,表示全部移动数据到目录获取路径的文件名和目录名#获取文件名$basename/etc/sysconfig/network#结果:network#获取目录名$dirname/etc/sysconfig/network#结果:查看内容/etc/sysconfig文件,直接查看文件内容cat(从第一行开始显示文件内容)$cat[-AbEnTv]#参数-A:相当于-vET的集成参数,可以列出一些特殊字符而不是空格#-b:列出行号,只非空行显示行号,空行不标行号#-E:末尾显示换行符$#-n:打印行号,空行会有行号,与-b的参数不同#-T:将[Tab]键显示为^I#-v:列出一些不可见的特殊字符#例如$cat/etc/issuetac(reverselisting)fromlastline到first行倒序显示在屏幕上$tac/etc/issuenl(加行号打印)$nl[-bnw]file#参数-b:-ba表示是否为空行,也列出行号#-bt表示如果有空行,不在空行上列出行号#-n:-nln表示行号显示在屏幕最左边#-nrn表示行号显示在自己字段最右边,不加0#-nrz表示行号显示在自己字段最右边,加0#-w:行号字段占用的位数,例如nl-w3/etc/issue表示行号占用3位,可以翻页查看更多(一页一页)$more/etc/man.config如果more后面的文件内容大于屏幕输出的行数,可以使用以下按键进行一些操作:/string:表示查询显示内容中的关键字“string”。如果要重复查询同一个字符串,可以按n:f立即显示文件名和当前文件名。显示行数q表示立即离开more,不再显示文件内容b或[ctrl]-b表示翻页,但此操作只对文件有用,对管道less无用(逐页翻页)$less/etc/man.config查询命令包括:??空格键:向下翻一页[PageDown]:向下翻一页[PageUp]:向上翻一页/string:查询字符串向下?String:向上查询Stringn:重复查询同一个字符串(与/或?相关)N:反向重复查询同一个字符串q:留less程序数据选择head(取出前几行)$head[-nnumber]file#参数-n:后面跟一个数字,代表显示多少行。默认显示10行。#例如$head-n20/etc/man.config#如果不打印最后100行,只打印前几行$head-n-100/etc/man.configtail(去掉最后几行)$tail[-nnumber]file#Parameter-n:后面跟数字代表显示几行的意思,默认显示最后10行。#-f:表示继续检查后面连接的文件名,直到按下[ctrl]-c才结束tail的检测。#例如$tail-n20/etc/man.config#如果只想列出第100行之后的数据$tail-n+100/etc/man.config#如果想显示第11到20行/etc/man.config$头-n20/etc/man.config|tail-n10#这里涉及管道命令和非纯文本文件:od如果我们要检查的文件不是文本文件,可以使用od命令行检查$od[-tTYPE]文件TYPE包括有以下类型:a:使用默认字符输出c:使用ASCII字符输出d[size]:使用小数输出,每个整数占用sizebytesf[size]:使用浮点数输出,每个整数占用sizebyteso[size]:使用八进制输出,每个整数占用sizebytesx[size]:使用十六进制输出,每个整数占用size字节修改文件时间或新建文件:touch文件有3种时间修改时间(mtime)当文件内容数据改变,这个时间会改变statustime(ctime)当文件的状态发生改变时,这个时间会改变,比如权限和属性改变时atime文件内容的访问时间(atime)如果使用,它会改变读取时间,例如使用cat读取文件。ls默认会显示文件的mtime$touch[-acdmt]file#参数-a:只修改访问时间#-c:只修改文件的时间,如果文件不创建新文件doesnotexist#-d:可以跟要修改的日期代替当前日期,也可以使用-date="dateandtime"#-m:只修改mtime#-t:修改的时间可以befollowedinsteadofcurrenttime,formatis[YYMMDDhhmm]文件和目录的默认权限和隐藏权限umask(文件的默认权限)umask是指定当前用户创建文件或目录权限默认值#显示默认新建文件或目录权限$umask#0002权限与后3位有关,分数代表需要从默认值中减去的权限,即user为0,未授权移除权限,所以需要移除的权限---,group也是0,代表需要移除的权限---,other为2,代表已经被移除的执行权限removed,则需要去掉的权限-w-#加参数-S以符号类型显示默认权限$umask-S#u=rwx,g=rwx,o=rx新建文件时:(-rw-rw-rw-)-(--------w-)=-rw-rw-r--创建新目录时:(drwxrwxrwx)-(d-------w-)=drwxrwxr-x#如果想改变umask的默认值,直接在它后面加上值$umask002即可。这在假定文件服务器(例如FTP服务器)时非常重要。涉及到你的用户是否可以进一步使用文件chattr(设置文件的隐藏属性)的问题。使用chattr设置,但该命令只能对Ext2/Ext3文件系统生效删除一个特殊参数,其他已经存在的参数不会改变=:只有下面的参数A:设置属性A时,如果你有权限访问这个文件,它的访问时间atime不会被修改,可以帮助慢机器通过避免I/O速度较慢的机器过度访问磁盘。S:一般情况下,文件都是异步写入磁盘的。如果加上这个S属性,当你修改任何文件时,修改都会同步写入磁盘。a:该文件只能添加数据,不能删除或修改数据。只有root可以设置此属性。c:自动压缩文件,读取时自动解压,存储时先压缩再存储。d:在执行dump程序时,设置d属性可以防止文件被dump备份。i:文件不能被删除、重命名、建立连接、写入或添加数据。只有root可以设置此属性。s:如果文件被删除,它将从这个硬盘空间中彻底删除。u:与s相反,如果文件被删除,数据内容实际上还保存在磁盘上,可以用来找回文件。常用的属性设置有a和i,只有root可以设置#比如$touchtest$chatter+itest此时不能删除文件$chatter-itestlsattr(显示文件隐藏属性)$lsattr[-adR]文件或目录参数:-a:显示隐藏文件的属性-d:如果连接到目录,只列出目录本身的属性,而不列出目录中的文件名-R:将SetUID一起列出与子目录的数据。可以看到/usr/bin/passwd目录有s权限,也就是SUID特殊权限root@5195bf486175:/tmp#ls-ld/tmp;ls-l/usr/bin/passwddrwxrwxrwt4rootroot4096Dec1300:20/tmp-rwsr-xr-x1rootroot59640Mar232019/usr/bin/passwdSUID仅对二进制程序有效。执行者需要对程序有x的可执行权限。此权限仅在程序运行期间有效。执行者将获得程序所有者的许可。比如/usr/bin/passwd只有root可读,有强制写权限,但是我们nancy等个人用户可以修改自己的密码,所以在执行passwd的过程中会临时获得root权限,设置GID的时候s标志在文件属主的x项中为SUID,则s在用户组x时调用SetGID,SGID。StickyBit的SBIT目前只对目录有效,即当用户对某个文件夹进行w操作时,可以修改该目录下任何人新建的文件,如果给该目录添加SBIT权限,那么这个用户只能修改自己创建的文件,不能删除别人创建的文件。这些权限代表的数字:4是SUID2,SGID1是SBIT如果要修改文件权限为-rwsr-xr-x,原来的权限是755,需要加上s的权限,需要改权限为4755请注意,s和t替换了x权限。例如,rwsr-sr-t也可以使用符号来添加这些权限。比如u+s,g+s,o+tfile(查看文件类型)可以使用file来查询文件属于ASCII还是数据文件,还是二进制,是否使用动态函数库vagrant@vagrant-ubuntu-trusty-64:/tmp$file~/.bashrc/home/vagrant/.bashrc:ASCIItextcommandandfileQuerywhich(找到执行文件)要知道命令的完整文件名放在哪里,可以使用which命令查找$which[-a]命令参数:-a列出了PATH目录下所有可以找到的命令,而不仅仅是第一个找到的命令。vagrant@vagrant-ubuntu-trusty-64:/tmp$whichifconfig/sbin/ifconfig文件名一般先用whereis或者locate查,如果没查到就用find(查的速度慢),find是直接搜索harddisk,whereis和locate是数据库文件,用于查找记录文件(可能会发现被删除的文件或者找不到最新的文件,数据库每天创建一次,可以使用updatedb更新数据库)$whereis[-bmsu]文件或目录参数:-b:只寻找二进制格式的文件-m:只寻找描述文件手动路径下的文件-s:只寻找source源文件-u:寻找其他没有包含的特殊文件以上三个选项root@5195bf486175:/tmp#whereisnginxnginx:/usr/sbin/nginx/usr/lib/nginx/etc/nginx/usr/share/nginx$locate[-ir]关键字参数:-i:忽略case-r的区别:后面是正则表达式的显示方式vagrant@vagrant-ubuntu-trusty-64:/tmp$locatepasswd/etc/passwd/etc/passwd-/etc/cron.daily/passwd/etc/init/passwd.conf/etc/pam.d/chpasswd/etc/pam.d/passwd/etc/security/opasswd/usr/bin/gpasswd...后面省略...$find[PATH][option][action]选项及参数与Time相关的选项有:-atime、-ctime、-mtime,以-mtime为例-mtimen:n天前1天内容被更改过的文件;-mtime+n:n天前(不包括n天本身)内容被改变的文件-mtime-n:n天后(包括当天)内容被改变的文件-newerfile:文件是一个existingfile,listingnewerthanfile该文件的文件名#列出系统上过去24小时内更改过的文件$find/-mtime0$find/-mtime3#查找/etc下的文件,如作为如果文件日期比/etc/passwd新,则会列出$find/etc-newer/etc/passwd+4表示文件大于或等于5天前-4表示文件在4天内或更短4表示当天的文件4-5用户或组名相关参数-uidn:n为用户的账号ID(UID),记录在/etc/passwd中-gidn:n为组名ID(GID),GID记录在/etc/group中-username:name是用户账号的名字-groupname:name是组的名字-nouser:寻找/etc/group中不存在的文件拥有者-nogroup:寻找文件的所有者组/etc/group中不存在的文件#搜索/home下属于nancy的文件$find/home-usernancy#搜索不属于任何用户的文件$find/-nouser可以通过这些与用户相关的参数找到某个用户与系统中用户创建的文件权限和名称相关的参数-namefilename:搜索文件名为filname的文件-size[+-]SIZE:搜索比SIZE大(+)或小(-)的文件,这个size的规格是:c代表Byte,k代表1024Bytes,所以要找一个大于50KB的文件"size+50KB"-typeTYPE:搜索文件类型为TYPE,主要类型有:普通普通文件f、设备文件b、c、目录d、链接文件l、socket文件s、FIFO文件p-perm模式:搜索文件权限为just的文件等于mode,例如-rwsr-xr-x的属性是4755-perm-mode:搜索文件权限必须包含mode的所有权限。比如我们要搜索-rwxr--r--(即0744),那么-rwsr-xr-x也会被列出来,因为它还包含rwxr--r--属性-perm/mode:搜索文件permissions包括任意模式的权限文件,比如我们搜索-rwxr-xr-x,即-perm/755,如果属性有-rw--------也会搜索得到#find名为passwd的文件$find/-namepasswd#查找文件名中包含关键字passwd的文件$find/-name*passwd*#查找/run目录,文件类型socket的文件名是什么$find/run-types#在文件中搜索包含SGID或SUID或SBIT的属性$find/-perm/7000#7000is--s--s--t,那么只要包含Ifs或t,就会列出可以执行的附加动作:-execcommand:command是另外一个命令,-exec后面可以跟附加命令来处理搜索到的结果-print:打印结果到屏幕上,此操作是默认操作#使用ls-l列出找到的文件$find/usr/bin/usr/sbin-perm/7000-execls-l{}\;#{}代表find#找到的内容\;表示命令结束位置
