回想起来,从事linux运维工做已近5年之久了,平常工做中会用到不少常规命令,以前简单罗列了一些命令:http://www.cnblogs.com/kevingrace/p/5985486.html
今天在这里,详细总结下运维工做中经常用到的一些操做命令(依据本人使用经验而言):html
[Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/var']node
错误提示:没有可用的临时目录 可能缘由:系统的inodes或磁盘空间占满了。清理下inodes空间便可,好比发现/var/spool/clientmqueue/目录里面有大量小文件,清理下一些无用文件。
文件系统结构和基本操做命令 mysql
chmod命令:改变权限linux
经常使用用法:chmod -R xxxx FILE 含义:设置文件或者目录的权限属性,加上R选项,表示递归设置目录下文件和目录的权限属性 上面有4个x,每一个x的值为0-7,若是少于4个,那么默认在前面用0值补全,即“77”等价于“0077”。为了简单起见,咱们每次使用的时候,都指定4个x好了。 第一个"x":设置SUID(4),SGID(2),STICKY(1) 第二个"x":设置文件属主的r权限(4),w写权限(2),x执行权限(1) 第三个"x":设置文件所属组的r权限(4),w写权限(2),x执行权限(1) 第四个"x":设置其余用户的r权限(4),w写权限(2),x执行权限(1) 备注: 设置了SUID,会把文件属主的"rwx"中的x替换为s[文件属主具备x权限]或者S[文件属主不具备x权限] 设置了SGID,会把文件所属组的"rwx"中的x替换为s[文件所属组具备x权限]或者S[文件所属组不具备x权限] 设置了STICKY,会把其余用户的"rwx"中的x替换为t[其余用户具备x权限]或者T[其余用户不具备x权限] 另外有一个问题须要注意: 1)在清除通常文件的SUID,SGID,STICKY权限的时候,可使用"chmod 0xxx"的形式 2)在清除目录的SUID,SGID权限的时候,不可使用"chmod 0xxx"的形式。在[1]中也提到了一个解决方案, 就是在原先的4个x的基础上,再加一个或多个前置x,咱们取1位0好了,即"0xxxx"的形式。 综上,咱们使用"0xxxx"(指定5位)来设置文件属主,文件所属组,其余用户的rwx权限和SUID,SGID,STICKY权限。
chown命令:改变属主web
经常使用用法:chown [-R] OWNER FILE 含义:改变文件的全部者,加上R选项,表示递归 一般使用时会加上改变所属组的部分,即"所属者.所属组" 或者 "所属者:所属组" chown [-R] OWNER.GROUP FILE chown [-R] OWNER:GROUP FILE
chgrp命令:改变属组正则表达式
经常使用用法:chgrp [-R] GROUP FILE 含义:将FILE的用户组改成GROUP,若是指定了-R选项,那么递归改变
rm命令:删除文件redis
经常使用用法:rm -rf FILE 含义:删除文件 -r:若是FILE是目录,那么递归删除目录; -f:若是FILE是只读文件,再也不提醒,直接删除
find命令:查找文件sql
1、经常使用用法 find path [-maxdepth N] test 2、含义与选项 2.一、含义 在指定路径下,找到符合条件的文件和目录。 2.二、选项表示的意思 "path":表示查找范围的路径。 "-maxdepth N":表示查找的最深深度为N层。 "test":查找须要知足的条件。 3、经常使用的test 3.一、关于文件时间的几个test test 说明 -amin n 以最后访问文件block节点中数据的时间为判断依据,以多少个分钟为单位 -atime n 以最后访问文件block节点中数据的时间为判断依据,以多少个24小时为单位 -cmin n 以最后修改文件inode节点中元数据的时间为判断依据,以多少个分钟为单位 -ctime n 以最后修改文件inode节点中元数据的时间为判断依据,以多少个24小时为单位 -mmin n 以最后修改文件block节点中数据的时间为判断依据,以多少个分钟为单位 -mtime n 以最后修改文件block节点中数据的时间为判断依据,以多少个24小时为单位 须要注意:在以上6个选项中,数字"n"有3种形式,分别是:n,+n,-n 为了更加透彻完整地理解,能够概括获得以下结论。 3.1.1)以"多少个分钟"为单位的选项 第一种状况"n"为"n" (FileTime-(NowTime-n*UNIT))>0 && (FileTime-(NowTime-n*UNIT))<=UNIT 第二种状况"n"为"+n" (FileTime-(NowTime-n*UNIT))<0 第三种状况"n"为"-n" (FileTime-(NowTime-n*UNIT))>0 "n"和"-n"的状况具备必定的重复区域,即某个时刻"n"可以找到某个文件,"-n"也可以找到相同的文件。 3.1.2)以"多少个24小时"为单位的选项 第一种状况"n"为"n" (FileTime-(NowTime-(n+1)*UNIT))>0 && (FileTime-(NowTime-(n+1)*UNIT))<=UNIT 第二种状况"n"为"+n" (FileTime-(NowTime-(n+1)*UNIT))<0 第三种状况"n"为"-n" (FileTime-(NowTime-n*UNIT))>0 注意:这里没有"n+1",避免了"n"和"-n"的状况下的重复区域。 特别备注: 1)在上述描述中,系统当前时间(NowTime)和文件相应字段的时间(FileTime)都表示成以秒为单位;在以"多少个分钟"为单位的选项中, UNIT=60(1分钟有60秒),在以"多少个24小时"为单位的选项中,UNIT=24*60*3600(24小时有24*60*3600秒) 2)加了"-daystart"选项后,NowTime就变为当日午夜时间 3.1.3)举一些例子来看 先假设系统当前时间是"2015-06-09 13:35:50"。 示例1 那么find . -amin 10命令,查找的文件的"atime"范围: 2015-06-09 13:25:51 -- 2015-06-09 13:26:50 示例2 那么find . -amin -10命令,查找的文件的"atime"范围: 2015-06-09 > 13:25:50[所以,"2015-06-09 13:26:30"就既能经过-amin 10获得,也能经过-amin -10获得] 示例3 那么find . -amin +10命令,查找的文件的"atime"范围: 2015-06-09 < 13:25:50 示例4 那么find . -atime 5命令,查找的文件的"atime"范围: 2015-06-03 13:35:51 -- 2015-06-04 13:35:50 示例5 那么find . -atime -5命令,查找的文件的"atime"范围: 2015-06-04 > 13:35:50 示例6 那么find . -atime +5,查找的文件的"atime"范围 2015-06-03 < 13:35:50 3.二、关于文件权限的test test 说明 -perm mode 目的文件的权限跟"mode"一致 -perm -mode 目的文件的权限包含了"mode" -perm /mode 目的文件的权限跟"mode"有交集 3.三、关于文件类型的test 关于文件类型的test为"-type c",其中"c"表示文件类型特征码,对于文件类型特征码的介绍: b block (buffered) special c character (unbuffered) special d directory p named pipe (FIFO) f regular file l symbolic link; s socket D door (Solaris) 3.四、关于文件所属用户的test "-user uname":表示属于"uname"这个用户的文件,"uname"能够是"用户名称",也能够是"用户ID,即uid"。 3.五、关于文件所属用户组的test "-group gname":表示属于"gname"这个用户组的文件,"gname"能够是"用户组名称",也能够是"用户组ID,即gid"。 3.六、关于文件名称的test "-name pattern":文件名符合"pattern"这个正则表达式的文件。 4、其余 "find"命令的完整定义: find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] 可是在使用"find"命令的时候,通常不解析遇到的软符号连接文件,若是解析的话很容易形成递归死循环,而咱们通常也不使用调试和优化选项, 所以"-H","-L","-P","-D","-O"这些选项通常不经常使用。 "expression"中包括了"options","tests","actions",以及它们之间的"operators"这四个部分。可是"options"通常也没有什么用,除了 "-maxdepth"这个"option"],"actions"也比较复杂,于是咱们能够选择先使用简单的"find"命令,找出符合条件的文件,而后再经过管道或者 脚本的方式进行操做。 所以,最终"-H","-L","-P","-D","-O","expression"中的"options","actions","operators"都不须要。
ln命令:创建符号连接文件shell
经常使用用法:ln [-s] TARGET LINK_NAME 含义: 有-s选项,表示创建到TARGET的软符号连接文件,软符号连接文件的文件名为LINK_NAME 没有-s选项,表示创建到TARGET的硬符号连接文件,硬符号连接文件的文件名为LINK_NAME 注意:当一个区分好比/分区空间快爆满时,能够将这个分区下的大文件先mv到别的大分区下(好比home区分),而后再将这个大文件从home分区软连接回到/分区下
mount命令数据库
格式:mount [-参数] [设备名称] [挂载点] 其中经常使用的参数有: -a 安装在/etc/fstab文件中类出的全部文件系统。 -f 假装mount,做出检查设备和目录的样子,但并不真正挂载文件系统。 -n 不把安装记录在/etc/mtab 文件中。 -r 讲文件系统安装为只读。 -v 详细显示安装信息。 -w 将文件系统安装为可写,为命令默认状况。 -t 指定设备的文件系统类型,常见的有: ext2 linux目前经常使用的文件系统 msdos MS-DOS的fat,就是fat16 vfat windows98经常使用的fat32 nfs 网络文件系统 iso9660 CD-ROM光盘标准文件系统 ntfs windows NT/2000/XP的文件系统 auto 自动检测文件系统 -o 指定挂载文件系统时的选项,有些也可写到在/etc/fstab中。经常使用的有: defaults 使用全部选项的默认值(auto、nouser、rw、suid) auto/noauto 容许/不容许以 –a选项进行安装 dev/nodev 对/不对文件系统上的特殊设备进行解释 exec/noexec 容许/不容许执行二进制代码 suid/nosuid 确认/不确认suid和sgid位 user /nouser 容许/不容许通常用户挂载 codepage=XXX 代码页 iocharset=XXX 字符集 ro 以只读方式挂载 rw 以读写方式挂载 remount 从新安装已经安装了的文件系统 loop 挂载回旋设备 须要注意: 挂载点必须是一个已经存在的目录,这个目录能够不为空,但挂载后这个目录下之前的内容将不可用,umount之后会恢复正常。 使用多个参数的时候,-o只用一次,参数之间用半角逗号隔开: [root@redis-new01 ~]# mount –o remount,rw / 例如要挂载windows下文件系统为FAT32的D盘,通常而言在Linux下这个分区对应/dev/hda5,根据具体的分区状况会有不一样, 这里就以hda5来举例说明: [root@redis-new01 ~]# mkdir /mnt/hda5 //建立hda5的目录做为挂载点,位置和目录名可自定义// [root@redis-new01 ~]# mount -t vfat /dev/hda5 /mnt/hda5 通常而言,Linux会自动探测分区的文件系统,除非让你指定时,不然-t vfat 能够省掉。 [root@redis-new01 ~]# mount /dev/hda5 /mnt/hda5 这样就能够进入/mnt/hda5目录去访问分区中的资源了。 =====为何mount上分区后显示不了中文文件为问号/乱码?===== 显示问号代表你的系统中没有可识别使用的中文字体,请先安装中文字体。确保你的系统已经能够很好的显示中文。显示为乱码通常是mount默认 使用的文件系统编码和文件系统中文件的实际编码不一致形成的。要想正常显示中文文件,mount时须要用到 -o 参数里的codepage和iocharset 选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文通常用cp936或gb2312。 [root@redis-new01 ~]# mount –o iocharset=gb2312 codepage=936 /dev/hda5 /mnt/hda5 通常来讲 mount –o iocharset=cp936 /dev/hda5 /mnt/hda5 就能够解决问题了。 若是这样作了之后还有问题,请尝试UTF-8编码: [root@redis-new01 ~]# mount –o iocharset=utf8 /dev/hda5 /mnt/hda5 =====为何mount上去之后分区普通用户不可写?===== mount时加上 –o umask=000 便可: [root@redis-new01 ~]# mount –o umask=000, iocharset=cp936 /dev/hda5 /mnt/hda5 =====为何mount上去后的分区中的文件都变成短文件名了?===== 这是文件系统挂错的缘由,将FAT32挂载成FAT16时就会出现这种状况,先umount,而后用 –t vfat 从新挂载便可解决问题。 [root@redis-new01 ~]# mount –t vat /dev/hda5 /mnt/hda5 =====为何不能mount ntfs分区?====== 这是内核不支持NTFS文件系统的缘由,请从新编译内核或者安装内核的NTFS文件系统支持包,以使得内核有NTFS文件系统的支持。 =====如何挂载U盘和mp3?===== 若是计算机没有其它SCSI设备和usb外设的状况下,插入的U盘的设备路径是 /dev/sda1,用命令: [root@redis-new01 ~]# mkdir /mnt/u [root@redis-new01 ~]# mount /dev/sda1 /mnt/u 挂载便可。 =====能够直接使用iso文件吗?===== 能够,就是mount的这一选项使得Linux下有免费虚拟光驱的说法,具体用法是: [root@redis-new01 ~]# mkdir /mnt/iso [root@redis-new01 ~]# mount –o loop linux.iso /mnt/iso 固然,挂载之后挂载点/mnt/iso也是只读的。 =====怎么不能够mount iso文件?===== 通常而言,大多数的发行版使用的内核均已将loop设备的支持编译进去了,可是也有没有的状况,因此请确保系统所使用的内核支持loop设备。 第二种状况是iso文件被放置到了NTFS或其它只读文件系统中了。挂载loop 设备必需要求挂载到一个可写的分区中,目前Linux内核对NTFS 文件系统的写支持很是有限,请将iso文件复制到其它可写文件系统中后再挂载。 =====如何挂载光驱和软驱===== 通常来讲CDROM的设备文件是/dev/hdc,软驱的设备名是/dev/fd0 [root@redis-new01 ~]# mkdir /mnt/cdrom [root@redis-new01 ~]# mount /dev/hdc /mnt/cdrom //挂载光驱 // [root@redis-new01 ~]# mkdir /mnt/floppy [root@redis-new01 ~]# mount /dev/fd0 /mnt/floppy //挂载软驱 // =====为什么挂载的CD-ROM不能显示中文文件?===== 使用 –o iocharset=cp936 选项通常能解决问题,不然使用utf-8编码。 [root@redis-new01 ~]# mount –o iocharset=cp936 /dev/hdc /mnt/cdrom =====如何开机自动挂载分区?===== 每次挂载都要输入那么长的命令的确是繁琐了些,只要将分区信息写到/etc/fstab文件中便可实现系统启动的自动挂载,例如对于/dev/hda5的自动挂载添加以下的行便可: /dev/hda5 /mnt/hda5 vfat defaults,iocharset=cp936, rw 0 0 ===== 如何挂载samba 分区?===== [root@redis-new01 ~]# mkdir /mnt/share [root@redis-new01 ~]# mount -t smbfs -o username=root,password=abc,codepage=936,iocharset=gb2312//192.168.1.100/share /mnt/share 若是中文显示不正常请尝试UTF-8编码。固然能够写到fstab中实现自动挂载。 =====mount --bind是什么意思?===== mount --bind 是将一个目录中的内容挂载到另外一个目录上,用法是 [root@redis-new01 ~]# mount --bind olddir newdir 该命令使得本身搭建的FTP要共享某个目录的时候变得特别方便。若是要取消mount用命令: [root@redis-new01 ~]# mount --move olddir newdir 便可。 若是mount --bind 也想写入fstab中的话格式以下: olddir newdir none bind 0 0 =====umount基本用法是?===== 譬如 /dev/hda5 已经挂载在/mnt/hda5上,用一下三条命令都可卸载挂载的文件系统 [root@redis-new01 ~]# umount /dev/hda5 [root@redis-new01 ~]# umount /mnt/hda5 [root@redis-new01 ~]# umount /dev/hda5 /mnt/hda5 =====为何umount的时候老显示 device busy?===== 这是由于有程序正在访问这个设备,最简单的办法就是让访问该设备的程序退出之后再umount。 可能有时候用户搞不清除到底是什么程序在访问设备,若是用户不急着umount,则能够用: [root@redis-new01 ~]# umount -l /mnt/hda5 来卸载设备。选项 –l 并非立刻umount,而是在该目录空闲后再umount。 还能够先用命令 ps aux 来查看占用设备的程序PID,而后用命令kill来杀死占用设备的进程,这样就umount的很是放心了。 方法一: # fuser -m -v /nfs_old/ /nfs_old/: root 2699 ..c.. bash root 2999 ..c.. su 如上所示,有两个进程占用了,将其kill掉,再从新取消挂载。 # kill -9 2699 2999 # umount /nfs_old/ 方法二: # umount -l /nfs_old/ 方法三: # fuser -km /nfs_old/ =========================案例说明========================= 在作项目时,客户须要FTP同时访问两个目录,即实现一个ftp帐号同时访问两个目录。要清楚,在建FTP时,都是一个用户对应一个目录, 当FTP用户登陆后,就只访问当前目录。但若是须要访问到其余目录,这个该如何解决呢? 刚开始觉得使用连接能够实现这个功能,可是发现连接成功了,可是使用ftp是不能够访问的,不成功。 最终解决方法:使用mount的方法,把目录挂到,原来的目录中。 例如: 用户test要同时访问到目录/data一、/data2 在test用户家目录下新建两个目录test一、test2 然把把/data一、/data2挂到对应的test一、test2 [root@huanqiu ~][root@redis-new01 ~]# mkdir /home/test/{test1,test2} [root@huanqiu ~][root@redis-new01 ~]# mount --bind /data1 /home/test/test1 [root@huanqiu ~][root@redis-new01 ~]# mount --bind /data2 /home/test/test2 这样就可使用test帐号登录ftp后,同时访问到/data一、/data2目录了。
mkdir命令:创建目录
经常使用用法: 含义:建立目录; 若是是建立层次目录结构(即建立连级目录),就加上-p参数。 例如: mkdir test1 test2 ... mkdir -p test/test1/test2/test3 mkdir test/test{1,2,3,4,5}
tar命令:打包
解压 语法:tar [主选项+辅选项] 文件或者目录 使用该命令时,主选项是必需要有的,它告诉tar要作什么事情,辅选项是辅助使用的,能够选用。 主选项: c 建立新的档案文件。若是用户想备份一个目录或是一些文件,就要选择这个选项。至关于打包。 x 从档案文件中释放文件。至关于拆包。 t 列出档案文件的内容,查看已经备份了哪些文件。 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!由于不可能同时压缩与解压缩。 辅助选项: -z :是否同时具备 gzip 的属性?亦便是否须要用 gzip 压缩或解压? 通常格式为xx.tar.gz或xx. tgz -j :是否同时具备 bzip2 的属性?亦便是否须要用 bzip2 压缩或解压?通常格式为xx.tar.bz2 -v :压缩的过程当中显示文件!这个经常使用 -f :使用档名,请留意,在 f 以后要当即接档名喔!不要再加其余参数! -p :使用原文件的原来属性(属性不会依据使用者而变) --exclude FILE:在压缩的过程当中,不要将 FILE 打包! --remove-files:打包后将源文件删除 经常使用的结构: tar tar.gz tar.bz2 好比将文件file1打包上上面三种格式,分别是: tar -vcf file.tar file #将文件file打包成tar格式,打包参数-c tar -vxf file.tar -C /mnt #将file.tar包解压到目标目录/mnt上,解包参数-x,-C是解压到哪一个目标目录下 tar -zvcf file.tar.gz file tar -zvxf file.tar.gz -C /mnt tar -jvcf file.tar.bz2 file tar -jvxf file.tar.bz2 -C /mnt 示例一: [root@localhost ~]# ll /mnt/kevin.txt -rw-r--r--. 1 root root 0 Jun 8 03:03 /mnt/kevin.txt [root@localhost ~]# tar -zvcf /opt/kevin-`date +%Y%m%d`.tar.gz /mnt/kevin.txt --remove-files tar: Removing leading `/' from member names /mnt/kevin.txt [root@localhost ~]# ll /opt/ -rw-r--r--. 1 root root 118 Jun 8 03:03 kevin-20180608.tar.gz [root@localhost ~]# ll /mnt/kevin.txt ls: cannot access /mnt/kevin.txt: No such file or directory 示例二:将整个 /etc 目录下的文件所有打包成为 /tmp/etc.tar [root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩! [root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩 [root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩 特别注意: 在参数 f 以后的文件档名是本身取的,咱们习惯上都用 .tar 来做为辨识。 若是加 z 参数,则以 .tar.gz 或 .tgz 来表明 gzip 压缩过的 tar file ~ 若是加 j 参数,则以 .tar.bz2 来做为附档名啊~ 上述指令在执行的时候,会显示一个警告讯息: tar: Removing leading `/" from member names 这是关于绝对路径的特殊设定。 示例三:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件? [root@linux ~]# tar -ztvf /tmp/etc.tar.gz 由於咱们使用 gzip 压缩,因此要查阅该 tar file 内的文件时, 就得要加上 z 这个参数了!这很重要的! 示例四:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下 [root@linux ~]# cd /usr/local/src [root@linux src]# tar -zxvf /tmp/etc.tar.gz 在预设的状况下,咱们能够将压缩档在任何地方解开的!以这个示例来讲 我先将工做目录变换到 /usr/local/src 底下,而且解开 /tmp/etc.tar.gz 则解开的目录会在 /usr/local/src/etc ,另外,若是您进入 /usr/local/src/etc 则会发现,该目录下的文件属性与 /etc/ 可能会有所不一样喔! 示例五:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已 [root@linux ~]# cd /tmp [root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd 我能够透过 tar -ztvf 来查阅 tarfile 内的文件名称,若是单只要一个文件, 就能够透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了! 示例六:我要备份 /home, /etc ,但不要 /home/dmtsai [root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc 另外:tar命令的C参数 [root@linux ~]# tar -cvf file2.tar /home/usr2/file2 tar: Removing leading '/' from members names home/usr2/file2 该命令能够将/home/usr2/file2文件打包到当前目录下的file2.tar中, 须要注意的是:使用绝对路径标识的源文件,在用tar命令压缩后,文件名连同绝对路径(这里是home/usr2/,根目录'/'被自动去掉了)一并被压缩进来。使用tar命令解压缩后会出现如下状况: [root@linux ~]# tar -xvf file2.tar [root@linux ~]# ls …… …… home …… …… 解压缩后的文件名不是想象中的file2,而是home/usr2/file2。 [root@linux ~]# tar -cvf file2.tar -C /home/usr2 file2 该命令中的-C dir参数,将tar的工做目录从当前目录改成/home/usr2,将file2文件(不带绝对路径)压缩到file2.tar中。 注意:-C dir参数的做用在于改变工做目录,其有效期为该命令中下一次-C dir参数以前。 使用tar的-C dir参数,一样能够作到在当前目录/home/usr1下将文件解压缩到其余目录, 例如: [root@linux ~]# tar -xvf file2.tar -C /home/usr2 而tar不用-C dir参数时是没法作到的: [root@linux ~]# tar -xvf file2.tar /home/usr2 tar: /tmp/file: Not found in archive tar: Error exit delayed from previous errors
unrar命令:解压RAR文件
1、经常使用用法 unrar x "rar文件名" 2、含义与选项 2.一、含义 解压rar文件到当前目录,并保存原压缩文件目录结构。 2.二、选项 “x”:解压时保存原压缩文件目录结构 示例: 查看rar包中的内容: [root@redis-new01 ~]# unrar l *.rar 或者 [root@redis-new01 ~]# unrar v *.rar 测试rar包是否能解压成功: [root@redis-new01 ~]# unrar t *.rar 解压到当前文件夹: [root@redis-new01 ~]# unrar e *.rar 解压到指定文件夹: [root@redis-new01 ~]# unrar x *.rar /tmp =========================================================== zip命令用来压缩文件。gzip是个使用普遍的压缩程序,文件经它压缩事后,其名称后面会多处“.gz”扩展名。 1)用法: gzip [选项参数][-s <压缩字尾字符串>] [文件...] 或 gzip [选项参数][-s <压缩字尾字符串>] [目录] 2)功能: gzip是个使用普遍的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为".gz"。 事实上gzip就是gzip的硬链接,所以不管是压缩或解压缩,均可经过gzip指令单独完成。 3)选项参数: -d --decompress --uncompress 解开压缩文件; -v --verbose 显示指令执行过程; -l --list 列出压缩文件的相关信息; -r --recursive 递归处理,将指定目录下的全部文件及子目录一并处理; -A --catenate: 新增文件到已存在的备份文件; -B 设置区块大小 -c 把解压后的文件输出到标准输出设备 示例一 [root@redis-new01 ~]# gzip * [root@redis-new01 ~]# ll 总用量 12 -r-xr-xr-x. 1 sunjimeng root 411 5月 9 07:59 head_text.gz -r-xr-xr-x. 1 root sunjimeng 67 5月 9 08:15 less1.gz -r-xr-xr-x. 1 root sunjimeng 80 5月 9 08:16 less2.gz 示例二 [root@redis-new01 ~]# gzip -d * //解压当前目录的全部文件 [root@redis-new01 ~]# gzip * //解压并不能像压缩时那样什么参数都不带,须要带解压命令-d gzip: head_text.gz already has .gz suffix -- unchanged gzip: less1.gz already has .gz suffix -- unchanged gzip: less2.gz already has .gz suffix -- unchanged [root@redis-new01 ~]# gzip -d * [root@redis-new01 ~]# ll 总用量 12 -r-xr-xr-x. 1 sunjimeng root 664 5月 9 07:59 head_text -r-xr-xr-x. 1 root sunjimeng 45 5月 9 08:15 less1 -r-xr-xr-x. 1 root sunjimeng 57 5月 9 08:16 less2 示例三 [root@redis-new01 ~]# gzip -v * head_text: 42.3% -- replaced with head_text.gz less1: 4.4% -- replaced with less1.gz less2: 1.8% -- replaced with less2.gz [root@redis-new01 ~]# gzip -dv * head_text.gz: 42.3% -- replaced with head_text less1.gz: 4.4% -- replaced with less1 less2.gz: 1.8% -- replaced with less2 示例四 [root@redis-new01 ~]# gzip -l * [root@redis-new01 ~]# gzip -l * compressed uncompressed ratio uncompressed_name 411 664 42.3% head_text 67 45 4.4% less1 80 57 1.8% less2 558 766 30.3% (totals) [root@redis-new01 ~]# ll 总用量 12 -r-xr-xr-x. 1 sunjimeng root 411 5月 9 07:59 head_text.gz -r-xr-xr-x. 1 root sunjimeng 67 5月 9 08:15 less1.gz -r-xr-xr-x. 1 root sunjimeng 80 5月 9 08:16 less2.gz 示例五 [root@redis-new01 ~]# tar -cvf Dir.tar Dir Dir/ Dir/head_text.gz Dir/less1.gz Dir/less2.gz [root@redis-new01 ~]# ll 总用量 12 dr-xr-xr-x. 2 root sunjimeng 55 5月 24 07:28 Dir -rw-r--r--. 1 root root 10240 5月 24 07:34 Dir.tar [root@redis-new01 ~]# gzip -v Dir.tar Dir.tar: 92.1% -- replaced with Dir.tar.gz [root@redis-new01 ~]# gzip -l Dir.tar.gz compressed uncompressed ratio uncompressed_name 833 10240 92.1% Dir.tar 示例六 [root@redis-new01 ~]# tar cvf Dir1.tar -R Dir 块 0:Dir/ 块 1:Dir/head_text.gz 块 3:Dir/less1.gz 块 5:Dir/less2.gz [root@redis-new01 ~]# tar -cvf Dir2.tar Dir Dir/ Dir/head_text.gz Dir/less1.gz Dir/less2.gz [root@redis-new01 ~]# tar -cvf Dir3.tar -R Dir 块 0:Dir/ 块 1:Dir/head_text.gz 块 3:Dir/less1.gz 块 5:Dir/less2.gz 示例七 [root@redis-new01 ~]# gzip -vr findDir //递归的压缩子文件夹下的文件 gzip: findDir/Dir/head_text.gz already has .gz suffix -- unchanged gzip: findDir/Dir/less1.gz already has .gz suffix -- unchanged gzip: findDir/Dir/less2.gz already has .gz suffix -- unchanged gzip: findDir/Dir.tar.gz already has .gz suffix -- unchanged findDir/Dir1.tar: 92.1% -- replaced with findDir/Dir1.tar.gz findDir/Dir2.tar: 92.1% -- replaced with findDir/Dir2.tar.gz findDir/Dir3.tar: 92.1% -- replaced with findDir/Dir3.tar.gz [root@redis-new01 ~]# ls -l findDir 总用量 16 -rw-r--r--. 1 root root 833 5月 24 07:34 Dir.tar.gz -rw-r--r--. 1 root root 834 5月 24 07:43 Dir3.tar.gz -rw-r--r--. 1 root root 834 5月 24 07:39 Dir2.tar.gz -rw-r--r--. 1 root root 834 5月 24 07:39 Dir1.tar.gz dr-xr-xr-x. 2 root sunjimeng 55 5月 24 07:28 Dir [root@redis-new01 ~]# ls -l findDir/Dir 总用量 12 -r-xr-xr-x. 1 root sunjimeng 80 5月 9 08:16 less2.gz -r-xr-xr-x. 1 root sunjimeng 67 5月 9 08:15 less1.gz -r-xr-xr-x. 1 sunjimeng root 411 5月 9 07:59 head_text.gz 示例八 [root@redis-new01 ~]# gzip -rdv Dir //递归的解压目录下的全部.gz的文件 [root@redis-new01 ~]# ls -l Dir 总用量 12 -r-xr-xr-x. 1 sunjimeng root 411 5月 9 07:59 head_text.gz -r-xr-xr-x. 1 root sunjimeng 67 5月 9 08:15 less1.gz -r-xr-xr-x. 1 root sunjimeng 80 5月 9 08:16 less2.gz [root@redis-new01 ~]# gzip -rdv Dir Dir/head_text.gz: 42.3% -- replaced with Dir/head_text Dir/less1.gz: 4.4% -- replaced with Dir/less1 Dir/less2.gz: 1.8% -- replaced with Dir/less2 [root@redis-new01 ~]# ls -l Dir 总用量 12 -r-xr-xr-x. 1 sunjimeng root 664 5月 9 07:59 head_text -r-xr-xr-x. 1 root sunjimeng 45 5月 9 08:15 less1 -r-xr-xr-x. 1 root sunjimeng 57 5月 9 08:16 less2 [root@redis-new01 ~]# gzip -r Dir [root@redis-new01 ~]# ls -l Dir 总用量 12 -r-xr-xr-x. 1 sunjimeng root 411 5月 9 07:59 head_text.gz -r-xr-xr-x. 1 root sunjimeng 67 5月 9 08:15 less1.gz -r-xr-xr-x. 1 root sunjimeng 80 5月 9 08:16 less2.gz [root@redis-new01 ~]# gzip -dv Dir gzip: Dir is a directory -- ignored
zip/unzip
命令名:zip 功能说明:压缩文件。 语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工 做目录>][-ll][-n <字 尾字符串>][-t <日 期时间>][-<压 缩效率>][压 缩文件][文件...][-i <范本样式>][-x <范本样式>] 补充说明:zip是个使用普遍的压缩程序,文件经它压缩后会另外产生具 有".zip"扩展名 的压缩文件。 参 数: -A 调 整可执行的自动解压缩文件。 -b<工做目录> 指 定暂时存放文件的目录。 -c 替 每一个被压缩的文件加上注释。 -d 从 压缩文件内删除指定的文件。 -D 压 缩文件内不创建目录名称。 -f 此 参数的效果和指定"-u"参 数相似,但不只更新既有文件,若是某些文件本来不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。 -F 尝 试修复已损坏的压缩文件。 -g 将 文件压缩后附加在既有的压缩文件以后,而非另行创建新的压缩文件。 -h 在 线帮助。 -i<范本样式> 只 压缩符合条件的文件。 -j 只 保存文件名称及其内容,而不存听任何目录名称。 -J 删 除压缩文件前面没必要要的数据。 -k 使 用MS-DOS兼容格 式的文件名称。 -l 压 缩文件时,把LF字符 置换成LF+CR字 符。 -ll 压 缩文件时,把LF+CR字 符置换成LF字符。 -L 显 示版权信息。 -m 将 文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。 -n<字尾字符串> 不 压缩具备特定字尾字符串的文件。 -o 以 压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。 -q 不显 示指令执行过程。 -r 递 归处理,将指定目录下的全部文件和子目录一并处理。 -S 包 含系统和隐藏文件。 -t<日期时间> 把 压缩文件的日期设成指定的日期。 -T 检 查备份文件内的每一个文件是否正确无误。 -u 更 换较新的文件到压缩文件内。 -v 显 示指令执行过程或显示版本信息。 -V 保 存VMS操做系统的文 件属性。 -w 在 文件名称里假如版本编号,本参数仅在VMS操 做系统下有效。 -x<范本样式> 压 缩时排除符合条件的文件。 -X 不 保存额外的文件属性。 -y 直 接保存符号链接,而非该链接所指向的文件,本参数仅在UNIX之 类的系统下有效。 -z 替 压缩文件加上注释。 -$ 保 存第一个被压缩文件所在磁盘的卷册名称。 -<压缩效率> 压 缩效率是一个介于1-9的 数值。 示例1: 压缩test.MYI [root@mysql test]# zip test1.zip test.MYI adding: test.MYI (deflated 42%) [root@mysql test]#ll -rw-r--r-- 1 root root 1033755 09-24 10:03 test1.zip 压缩率为8的 [root@mysql test]# zip test2.zip -8 test.MYI adding: test.MYI (deflated 42%) [root@mysql test]#ll -rw-r--r-- 1 root root 1033451 09-24 10:03 test2.zip 示例2: 将当前目录下的全部文件和文件夹所有压缩成test.zip文件,-r表示递归压缩子目录下全部文件 [root@mysql test]# zip -r test.zip ./* 打包目录 [root@mysql test]# zip test2.zip test2/* 示例3: 删除压缩文件test1.zip中test.MYI文件 [root@mysql test]# zip -d test1.zip test.MYI 删除打包文件目录下的文件 [root@mysql test]# zip -d test2.zip test2/ln.log deleting: tests/ln.log 示例4: 向压缩文件中test1.zip中添加test. MYI文件 [root@mysql test]# zip -m test1.zip test. MYI 示例5: 压缩文件时排除某个文件 [root@mysql test]# zip test3.zip tests/* -x tests/ln.log ===================================================== 命令名: unzip 功 能说明:解压缩zip文 件 语 法:unzip [-cflptuvz][-agCjLMnoqsVX][-P <密 码>][.zip文 件][文件][-d <目录>][-x <文件>] 或 unzip [-Z] 补充说明:unzip为.zip压缩文件的解压缩程序。 参 数: -c 将 解压缩的结果显示到屏幕上,并对字符作适当的转换。 -f 更 新现有的文件。 -l 显 示压缩文件内所包含的文件。 -p 与-c参数相似,会将解压缩的结果显示到屏幕上,但不会执行任 何的转换。 -t 检 查压缩文件是否正确。,但不解压。 -u 与-f参数相似,可是除了更新现有的文件外,也会将压缩文件中 的其余文件解压缩到目录中。 -v 执 行是时显示详细的信息。或查看压缩文件目录,但不解压。 -z 仅 显示压缩文件的备注文字。 -a 对 文本文件进行必要的字符转换。 -b 不 要对文本文件进行字符转换。 -C 压 缩文件中的文件名称区分大小写。 -j 不 处理压缩文件中原有的目录路径。 -L 将 压缩文件中的所有文件名改成小写。 -M 将 输出结果送到more程 序处理。 -n 解 压缩时不要覆盖原有的文件。 -o 不 必先询问用户,unzip执 行后覆盖原有文件。 -P<密码> 使 用zip的密码选项。 -q 执 行时不显示任何信息。 -s 将 文件名中的空白字符转换为底线字符。 -V 保 留VMS的文件版本信 息。 -X 解 压缩时同时回存文件原来的UID/GID。 [.zip文件] 指定.zip压缩文件。 [文件] 指定 要处理.zip压缩文 件中的哪些文件。 -d<目录> 指 定文件解压缩后所要存储的目录。 -x<文件> 指 定不要处理.zip压 缩文件中的哪些文件。 -Z unzip -Z等 于执行zipinfo指 令。 示例1:将压缩文件text.zip在当前目录下解压缩。 [root@mysql test]# unzip test.zip 示例2:将压缩文件text.zip在指定目录/tmp下解压缩,若是已有相同的文件存在,要求unzip命令不覆盖原先的文件。 [root@mysql test]# unzip -n test.zip -d /tmp 示例3:查看压缩文件目录,但不解压。 [root@mysql test]# unzip -v test.zip 示例4:将压缩文件test.zip在指定目录tmp下解压缩,若是已有相同的文件存在,要求unzip命令覆盖原先的文件。 [root@mysql test]# unzip -o test.zip -d tmp/
pwd命令:打印当前目录
经常使用用法:pwd [-P] 含义: 打印当前目录 不含"-P"选项,表示打印当前目录,若是目录路径中包含连接文件,不进行解析 含有"-P"选项,表示打印当前目录,若是目录路径中包含连接文件,则进行解析 #echo $PWD 打印当前所在路径
umask命令:文件默认权限
经常使用用法:umask [mask] 含义: 一、没有"mask"参数,表示打印当前的mask设置值 二、有"mask"参数,表示设置当前的mask值为"mask" 三、mask值的用途 mask值表示建立文件时默认须要减去的权限 建立通常文件时,默认的权限是"0666-mask",即0666减去umask码值 建立目录时,默认的权限是"0777-mask",即0777减去umask码值 注意,以上的相减操做不能经过数字形式直接相减,这会产生错误,须要经过对应的rwx形式进行操做 好比"0666-0003" 数字直接相减结果是:0663 正确的方式是:"rw-rw-rw-"减去"-------wx",结果为"rw-rw-r--" 四、mask设置值是跟当前的shell环境相关联的设置
which命令:在$PATH变量指定的路径中查找文件
经常使用用法:which -a filename 含义: 在$PATH变量指定的路径中查找全部文件名为filename的文件,并将全部找到的文件的路径打印出来 备注: 1)须要所有匹配,而不能是部分匹配 好比 “which ps”的结果是"/bin/ps" "which p"的结果是空白,"/bin/ps"不是合法结果 2)须要匹配文件名,与路径中的目录名匹配不符合要求 好比 "which bin"的结果是空白,"/bin/ps"不是合法结果
whereis命令:在标准的Linux下的几个目录中查找文件相关联的源代码,帮助文档,二进制文件
经常使用用法:whereis filename 含义:基于"/var/lib/mlocate/mlocate.db"数据库,在标准的Linux下的几个目录中查找filename相关联的源代码,帮助文档,二进制文件 好比"whereis man",匹配到的帮助文档为"/usr/share/man/man7/man.7.gz /usr/share/man/man1/man.1.gz",匹配到的二进制文件为"/usr/bin/man /usr/bin/X11/man /usr/local/man /usr/share/man" 好比"whereis kernel",匹配到的源代码"/usr/src/linux-headers-3.16.0-30/kernel /usr/src/linux-headers-3.16.0-30-generic/kernel" 备注: 1)因为是在标准的几个目录中查找,于是扩展性不强 2)经过总体匹配,而不是部分匹配 "whereis ma"不能匹配到"/usr/bin/man" 3)匹配文件名,而不是匹配路径中的目录名 "whereis bin"不能匹配到"/bin/ps"
locate命令:基于“/var/lib/mlocate/mlocate.db”这个数据库查找文件
经常使用用法:locate [-i] PATTERN 含义: 1)查找包含"PATTERN"的文件路径 2)整个查找过程基于"/var/lib/mlocate/mlocate.db"这个数据库 3)系统天天更新一次"/var/lib/mlocate/mlocate.db"数据库 4)能够经过"updatedb"命令手动更新"/var/lib/mlocate/mlocate.db"数据库
file命令:打印推测获得的文件类型
经常使用用法:file -i filename 含义: 打印filename指代的文件的类型和编码格式,没有命令可以确切知道某个文件的编码格式,只能是推测,所以获得的最终文件编码格式不必定是正确的 -i选项:以“mime type”形式打印文件类型和编码格式
stat命令:打印文件信息
经常使用用法:stat 文件路径 含义:打印文件的一些详细信息 好比如今有一个"readme"文件,执行"stat readme"命令,可得如图1所示结果。有一个"Desktop"目录,执行"stat Desktop"命令,可得 [root@huanqiu ~]# stat web.xml File: `web.xml' Size: 2438 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 2764173 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-08 17:25:51.994707928 +0800 Modify: 2016-09-08 17:25:48.595682668 +0800 Change: 2016-09-08 17:25:48.595682668 +0800 [root@huanqiu ~]# stat sudoers/ File: `sudoers/' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: fd00h/64768d Inode: 2817544 Links: 2 Access: (0700/drwx------) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-10-20 15:05:06.551702069 +0800 Modify: 2016-01-21 18:35:44.286016733 +0800 Change: 2016-01-21 18:35:44.286016733 +0800 输出信息中属性的解释以下: File:文件名称 Size:文件的大小,这个大小是文件的使用大小(关于文件的“使用大小”和“占用大小”可见《Ext文件系统中,文件的“占用大小”和“使用大小”》)。注意,若是是目录文件,该属性值并无累加统计该目录文件下的子文件的使用大小 Blocks:这个Blocks不是指"inode/block"体系中的block数量。其实指的是某种容量单元的数量。不过能够经过公式“Blocks*单个该种容量单元所含字节数/一个block节点所含字节数”换算获得须要的block节点数量,其中单个该种容量单元所含字节数,可经过"stat --format=%B readme"得到。假如单个该种容量单元的含有字节数为512B,一个block节点含有字节数为4096B,如今Blocks=8,那么block节点数量=1。注意,这个属性极易混淆 IO Block:optimal I/O transfer size hint "regular file":该值表示文件类型 Device:设备号 Inode:Inode节点号 Links:文件的硬连接计数 Access:文件读取执行权限相关信息 Uid:文件所属用户的信息 Gid:文件所属组的信息 Access:atime Modify:mtime Change:ctime Birth:文件建立时间,通常状况下不存在该属性值
basename命令:去除路径前缀和后缀
经常使用用法:basename NAME [SUFFIX] 含义: 给定一个文件名路径,除去前导的目录名,若是指定了SUFFIX,那么也除去SUFFIX指定的后缀,把最终结果打印出来 好比 basename include/stdio.h .h 除去前导的目录名"include/",获得stdio.h 指定SUFFIX=.h,那么除去.h后缀,最后获得stdio 打印stdio
dirname命令:获取路径的目录部分
经常使用用法:dirname NAME 含义: 给定一个文件名路径,除去最后一部分名称内容,接着除去冗余的后导"/",打印最终结果; 若是文件名路径中不包含"/",那么最后打印"." -------------------------------------------------------------------------------------------------- 扩展小提示: 截取目录的方法,有如下两种: 1)dirname命令:用于取给定路径的目录部分。这个命令不多直接在shell命令行中使用,通常把它用在shell脚本中,用于取得脚本文件所在目录, 而后将当前目录切换过去。 其实就是取所给路径的倒数第二级及其以前的路径部分,以下: [root@jenkins-server Shell]# dirname main/protected/xqsjmob/themes/tpl2/common/page_statistics.tpl main/protected/xqsjmob/themes/tpl2/common [root@jenkins-server Shell]# dirname /usr/local/tomcat7/webapps/jenkins/scripts/Shell /usr/local/tomcat7/webapps/jenkins/scripts [root@jenkins-server Shell]# dirname FF_Online.sh #取的结果既是当前路径目录下 . 2)能够用${pathname%/*}截取掉pathname后面的文件部分。 下面比较下这两种方法的效果:即dirname取的是倒数第二级及其以上级的路径,而${pathname%/*}取的是"删除最后一个/符号后的路径部分" [root@jenkins-server Shell]# pathname=/usr/bin/sort; echo $(dirname $pathname) ${pathname%/*} /usr/bin /usr/bin You have new mail in /var/spool/mail/root [root@jenkins-server Shell]# pathname=/usr/bin/sort/; echo $(dirname $pathname) ${pathname%/*} /usr/bin /usr/bin/sort [root@jenkins-server Shell]# pathname=/usr/; echo $(dirname $pathname) ${pathname%/*} / /usr [root@jenkins-server Shell]# pathname=/usr; echo $(dirname $pathname) ${pathname%/*} /
du命令:查看文件大小
1、经常使用用法 du -sh [--apparent-size] 文件路径(文件能够是目录,也能够是通常文件) 2、含义与选项 2.一、含义 当文件为通常文件时,估算该通常文件的大小;当文件为目录时,估算"该目录自身的大小+目录下全部子文件(递归进行)的大小"。 2.二、选项表示的意思 "-s":当du命令的操做对象是一个目录时,不打印该目录下子文件的大小统计状况,只打印目录整体的大小统计状况 "-h":以人类可读形式展现文件大小 "--apparent-size":当不加该选项时,"文件大小"是指文件的"占用大小";当加了该选项后,"文件大小"是指文件的"使用大小"。 3、实验 如今有一个"test1"目录,其下有一个"test2"目录,"test2"目录下有一个"test3"目录,在"test3"目录下有一个"test4.txt"文件,以下所示: [root@redis-new01 ~]# ll -d test1 drwxr-xr-x 3 root root 4096 Oct 27 21:17 test1 [root@redis-new01 ~]# ls test1/ test2 [root@redis-new01 ~]# ls test1/test2/ test3 [root@redis-new01 ~]# ls test1/test2/test3/ test4.txt "test1"目录对应1个block节点(大小为4096B),"test2"目录也对应1个block节点(大小为4096B),"test3"目录也对应1个block节点(大小为4096B), "test4.txt"文件也对应1个block节点(大小为4096B),而"test4.txt"这个通常文件对应的block节点中实际使用的空间大小为12B。 1)以下命令 [root@redis-new01 ~]# du -h test1 8.0K test1/test2/test3 12K test1/test2 16K test1 这是由于: 16K=test1自身的4K+test2自身的4K+test3自身的4K+test4.txt的4K。 2)以下命令 [root@redis-new01 ~]# du -sh test1 16K test1 这是由于: 16K=test1自身的4K+test2自身的4K+test3自身的4K+test4.txt的4K,而且只显示最终的test1目录的整体大小。 3)以下命令 [root@redis-new01 ~]# du -sh --apparent-size test1 13K test1 这是由于: 根据右侧值向上取整获得13K=12K+12B=test1自身的4K+test2自身的4K+test3自身的4K+test4.txt的12B,而且只显示最终的test1目录的整体大小。