第4章 更多的bash shell命令

本章将详细介绍Linux系统管理命令,演示如何通过命令行命令来探查Linux系统的内部信息,最后介绍一些可以用来操作系统上数据文件的命令。

4.1 监测进程
  跟踪运行在系统中的程序:探查进程、实时监测进程、结束进程。
  (0)相关命令:
   ①ps :探查进程。
   ②top :实时监测进程。
   ③kill -s 信号量 进程PID :向进程PID发送信号量。
   ④killall 进程名 :通过进程名而不是PID来结束进程。

  (1)探查进程(ps)
   ①使用ps命令监测进程,功能强大,但是参数特别多。默认情况下ps命令仅显示运行在当前控制台下属于当前用户的进程,包括:程序的进程ID(PID)、运行的终端(TTY)、进程已使用的CPU时间(TIME)、进程名(CMD)。

    $ps
    PID    TTY    TIME      CMD
    3081   pts/0  00:00:00  bash
    3209   pts/0  00:00:00  ps

   ②Linux系统中使用的GNU ps命令支持3种不同类型的命令行参数:Unix风格的参数(前面加单破折线)、BSD风格的参数(前面不加破折线)、GNU风格的长参数(前面加双破折线)。可以将GNU长参数和Unix或BSD风格的参数混用来定制输出,而Unix和BSD风格的参数一般不能混用。使用ps命令的关键不在于记住所有可用的参数,而是记住最有用的那些参数。大多数的管理员会记住自己最常用的参数。

   ③Unix风格的参数(Unix风格的参数是从贝尔实验室开发的AT&T Unix系统上原有的ps命令继承下来的)(下列仅包含部分):
    1°-A :显示所有进程。
    2°-N :显示与指定参数不符的所有进程。
    3°-a :显示除控制进程(session leader)和无终端进程外的所有进程。
    4°-d :显示除控制进程外的所有进程。
    5°-e :显示所有进程。
    6°-C cmdlist :显示包括在cmdlist列表中的进程。
    7°-G grplist :显示组ID在grplist列表中的进程。
    8°-U userlist :显示属主的用户ID在userlist列表中的进程。
    9°-g grplist :显示会话或组ID在grplist列表中的进程。
    10°-p pidlist :显示PID在pidlist列表中的进程。
    11°-s sesslist :显示会话ID在sesslist列表中的进程。
    12°-t ttylist :显示终端D在ttylist列表中的进程。
    13°-u userlist :显示有效用户ID在userlist列表中的进程。
    14°-F :显示更多额外输出(相对-f参数而言)。
    15°-O format :显示默认的输出列表以及format列表指定的特定列。
    16°-M :显示进程的安全信息。
    17°-c :显示进程的额外调度器信息。
   *18°-f :显示完整格式的输出。
    19°-j :显示任务信息。
   *20°-l :显示长列表。
    21°-o format :仅显示由format指定的列。
    22°-Y :不要显示进程标记(process flag,表明进程状态的标记)。
    23°-Z :显示安全标签(security context)信息。
    24°-H :用户级格式来显示进程(树状、用来显示父进程)。
    25°-n namelist :定义了WCHAN列显示的值。
    26°-w :采用宽输出模式,不限宽度显示。
    27°-L :显示进程中的线程。
    28°-V :显示ps命令的版本号。
   ④-f参数则扩展了输出。这些扩展包括:
    1°UID :启动这些进程的用户。
    2°PID :进程ID。
    3°PPID :父亲的进程号(若该进程是另外一个进程启动的)。
    4°C :进程生命周期中的CPU利用率。
    5°STIME :进程启动时的系统时间。
    6°TTY :进程启动时的终端设备。
    7°TIME :运行进程需要的累计CPU时间。
    8°CMD :启动的程序名称。
   ⑤-l参数输出一个长格式输出,使用-l参数多出的列:
    1°F :内核分配给进程的系统标记。
    2°S :进程的状态(O正在运行、S休眠、R可运行(等待运行)、T停止、Z僵化(进程已结束但是父进程不存在))。
    3°PRI :进程的优先级(越大的数字代表越低的优先级)。
    4°NI :谦让度值,用来参与决定优先级。
    5°ADDR :进程的内存地址。
    6°SZ :假如进程被换出,所需要交换空间的大致大小。
    7°WCHAN: 进程休眠的内核函数地址。

   ⑥BSD风格的参数(BSD是加州大学伯克利分校开发的一个Unix版本。它和AT&T Unix系统有许多细小的不同,导致了多年的Unix争论。Unix和BSD类型的参数有很多重叠的地方,只需要选择自己喜欢的格式即可)(在使用BSD参数时,ps命令会自动改变输出以模仿BSD格式):
    1°T :显示跟当前终端关联的所有进程。
    2°a :显示跟任意终端关联的所有进程。
    3°g :显示所有的进程,包括控制进程。
    4°r :仅显示运行中的进程。
    5°x :显示所有的进程,甚至包括未分配任何终端的进程。
    6°U userlist :显示归userlist列表中某用户ID所有的进程。
    7°p pidlist :显示PID在pidlist列表中的进程。
    8°t ttylist :显示所关联的终端在ttylist列表中的进程。
    9°O format :除了默认输出的列之外,还输出由format指定的列。
    10°X :按过去的Linux i386寄存器格式显示。
    11°Z :将安全信息添加到输出中。
    12°j :显示任务信息。
   *13°l :采用长模式。
    14°o format :仅显示由format指定的列。
    15°s :采用信号格式显示。
    16°u :采用基于用户的格式显示。
    17°v :采用虚拟内存格式显示。
    18°N namelist :定义在WCHAN列中使用的值。
    19°O order :定义显示信息列的顺序。
    20°S :将数值信息从子进程加到父进程上,比如CPU和内存的使用情况。
    21°c :显示真实的命令名称(用以启动进程的程序名称)。
    22°e :显示命令使用的环境变量。
    23°f :用分层格式来显示进程,表明哪些进程启动了哪些进程。
    24°h :不显示头信息。
    25°k sort :指定用以将输出排序的列。
    26°n :和WCHAN信息一起显示出来,用数值来表示用户ID和组ID。
    27°w :为较宽屏幕显示宽输出。
    28°H :将线程按进程来显示。
    29°m :在进程后显示线程。
    30°L :列出所有格式指定符。
    31°V :显示ps命令的版本号。
   ⑦l参数大部分的输出列跟使用Unix风格参数时的输出是一样的,只有一小部分不同:
    1°VSZ :进程在内存中的大小,以千字节(KB)为单位。
    2°RSS :进程在未换出时占用的物理内存。
    3°STAT :代表当前进程状态的双字符状态码。双字符状态码能比Unix风格输出的单字符状态码更清楚地表示进程的当前状态。第一个字符采用了和Unix风格S列相同的值(O正在运行、S休眠、R可运行(等待运行)、T停止、Z僵化(进程已结束但是父进程不存在))。第二个参数进一步说明进程的状态(<表示该进程运行在高优先级上、N表示该进程运行在低优先级上、L表明该进程有页面锁定在内存中、s表示该进程是控制进程、l表明该进程是多线程的、+表明该进程运行在前台)。

   ⑧GNU长参数:GNU长参数在由Unix或BSD类型参数改进后的ps命令中加入了另外一些参数,其中一些长参数复制了现有的Unix或BSD类型的参数,而另一些提供了新功能。
    1°--deselect :显示所有进程,命令行中列出的进程。
    2°--Group grplist :显示组ID在grplist列表中的进程。
    3°--User userlist :显示用户ID在userlist列表中的进程。
    4°--group grplist :显示有效组ID在grplist列表中的进程。
    5°--pid pidlist :显示PID在pidlist列表中的进程。
    6°--ppid pidlist :显示父PID在pidlist列表中的进程。
    7°--sid sidlist :显示会话ID在sidlist列表中的进程。
    8°--tty ttylist :显示终端设备号在ttylist列表中的进程。
    9°--user userlist :显示有效用户ID在userlist列表中的进程。
    10°--format format :仅显示由format指定的列。
    11°--context :显示额外的安全信息。
    12°--cols n :将屏幕宽度设置为n列。
    13°--columns n :将屏幕宽度设置为n列。
    14°--cumulative :包含已停止的子进程的信息。
   *15°--forest :用层级结构显示出进程和父进程之间的关系。
    16°--headers :在每页输出中都显示列的头。
    17°--no-headers :不显示列的头。
    18°--lines n :将屏幕高度设为n行。
    19°--rows n :将屏幕高度设为n排。
    20°--sort order :指定将输出按哪列排序。
    21°--width n :将屏幕宽度设为n列。
    22°--help :显示帮助信息。
    23°--info :显示调试信息。
    24°--version :显示ps命令的版本号。
   ⑨GNU长参数中一个着实让人喜爱的功能就是--forest参数。它会显示进程的层级信息,并用ASCII字符绘出可爱的图表。这种格式让跟踪子进程和父进程变得十分容易。

  (2)实时监测进程(top)
   ①top命令跟ps命令相似,能够显示进程信息,但它是实时显示的。

   ②输出的第一部分显示的是系统的概况
    1°第一行显示了当前时间、系统的运行时间、登录的用户数以及系统的平均负载。平均负载有3个值:最近1分钟的、最近5分钟的和最近15分钟的平均负载。值越大说明系统的负载越高。由于进程短期的突发性活动,出现最近1分钟的高负载值也很常见,但如果近15分钟内的平均负载都很高,就说明系统可能有问题。
    2°第二行显示了进程概要信息——top命令的输出中将进程叫作任务(task):有多少进程处在运行、休眠、停止或是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。
    3°第三行显示了CPU的概要信息。top根据进程的属主(用户还是系统)和进程的状态(运行、空闲还是等待)将CPU利用率分成几类输出。
    4°紧跟其后的两行说明了系统内存的状态。第一行说的是系统的物理内存:总共有多少内存,当前用了多少,还有多少空闲。后一行说的是同样的信息,不过是针对系统交换空间(如果分配了的话)的状态而言。
   ③最后一部分显示了当前运行中的进程的详细列表,有些列跟ps命令的输出类似:
    1°PID :进程的ID。
    2°USER :进程属主的名字。
    3°PR :进程的优先级。
    4°NI :进程的谦让度值。
    5°VIRT :进程占用的虚拟内存总量。
    6°RES :进程占用的物理内存总量。
    7°SHR :进程和其他进程共享的内存总量。
    8°S :进程的状态(D代表可中断的休眠状态,R代表在运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态)。
    9°%CPU :进程使用的CPU时间比例。
    10°%MEM :进程使用的内存占可用内存的比例。
    11°TIME+ :自进程启动到目前为止的CPU时间总量。
    12°COMMAND :进程所对应的命令行名称,也就是启动的程序名。
   ④默认情况下,top命令在启动时会按照%CPU值对进程排序。可以在top运行时使用多种交互命令重新排序。每个交互式命令都是单字符,在top命令运行时键入可改变top的行为。用户在top命令的输出上有很大的控制权。
    1°键入d允许你修改轮询间隔。
    2°键入q可以退出top。
    3°键入f可以选择显示的内容。按f键后会显示可选的列表,按a-z即可显示或隐藏对应的列,最后按回车键确定。按o键可以改变列的显示顺序。按小写的a-z可以将相应的列向右移动,最后按回车键确定。
    4°按大写的F或O键,然后按a-z可以将进程按相应列进行排序。而大写的R键可以将当前排序倒转。

  (3)进程信号(kill、killall)
   ①Linux沿用了Unix进行进程间通信的方法。进程之间通过信号来通信。进程的信号就是预定义好的一个消息,进程能识别它并决定忽略还是作出反应。进程如何处理信号是由开发人员通过编程来决定的。大多数编写完善的程序都能接收和处理标准Unix进程信号。
   ②全部的signal信号量:SIGHUP(1)、SIGINT(2)、SIGQUIT(3)、SIGILL(4)、SIGTRAP(5)、SIGABRT(6)、SIGBUS(7)、SIGFPE(8)、SIGKILL(9)、SIGUSR1(10)、SIGSEGV(11)、SIGUSR2(12)、SIGPIPE(13)、SIGALRM(14)、SIGTERM(15)、SIGCHLD(17)、SIGCONT(18)、SIGSTOP(19)、SIGTSTP(20)、SIGTTIN(21)、SIGTTOU(22)、SIGURG(23)、SIGXCPU(24)、SIGXFSZ(25)、SIGVTALRM(26)、SIGPROF(27)、SIGWINCH(28)、SIGIO(29)、SIGPWR(30)、SIGSYS(31)、SIGRTMIN(34)、SIGRTMIN+1(35)、SIGRTMIN+2(36)、SIGRTMIN+3(37)、SIGRTMIN+4(38)、SIGRTMIN+5(39)、SIGRTMIN+6(40)、SIGRTMIN+7(41)、SIGRTMIN+8(42)、SIGRTMIN+9(43)、SIGRTMIN+10(44)、SIGRTMIN+11(45)、SIGRTMIN+12(46)、SIGRTMIN+13(47)、SIGRTMIN+14(48)、SIGRTMIN+15(49)、SIGRTMAX-14(50)、SIGRTMAX-13(51)、SIGRTMAX-12(52)、SIGRTMAX-11(53)、SIGRTMAX-10(54)、SIGRTMAX-9(55)、SIGRTMAX-8(56)、SIGRTMAX-7(57)、SIGRTMAX-6(58)、SIGRTMAX-5(59)、SIGRTMAX-4(60)、SIGRTMAX-3(61)、SIGRTMAX-2(62)、SIGRTMAX-1(63)、SIGRTMAX(64)
    1°SIGHUP(1) :挂起。
    2°SIGINT(2) :中断。
    3°SIGQUIT(3) :结束运行。
    4°SIGKILL(9) :无条件终止。
    5°SIGSEGV(11) :段错误。
    6°SIGTERM(15) :尽可能终止。
    7°SIGCHLD(17) :无条件停止运行,但不终止。
    8°SIGCONT(18) :停止或暂停,但继续在后台运行。
    9°SIGSTOP(19) :在STOP或TSTP之后恢复执行。
   ③kill命令可通过进程ID(PID)给进程发信号。
    1°默认情况下,kill命令会向命令行中列出的全部PID发送TERM信号。(例:kill 3940)
    2°kill命令仅支持进程的PID而不能用命令名。
    3°使用kill对进程发送信号,必须是进程的属主或root用户。
    4°使用-s参数支持指定其他信号(用信号名或信号值)。(例:kill -s KILL 3940 等同于 kill -9 3940)
   ④killall命令支持通过进程名而不是PID来结束进程。
    1°killall命令也支持通配符,这在系统因负载过大而变得很慢时很有用。(例如:killall http*)
    2°以root用户身份登录系统时,使用killall命令要特别小心,因为很容易就会误用通配符而结束了重要的系统进程。这可能会破坏文件系统。

4.2 监测磁盘空间
  (0)相关命令:
   ①mount :输出当前系统上挂载的设备列表。
   ②mount -t type device directory :手动在虚拟目录中挂载设备。
   ③umount directory|device :卸载设备。
   ④df :查看所有已挂载磁盘的使用情况。
   ⑤du :显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。这一方法可以用来快速判断是否有超大文件。

  在Linux系统上有几个命令行命令可以用来帮助管理存储媒体。
  (1)挂载存储媒体:Linux文件系统将所有的磁盘都并入一个虚拟目录下。在使用新的存储媒体之前,需要把它放到虚拟目录下。这项工作称为挂载(mounting)。在如今的图形化桌面环境里,大多数Linux发行版都能自动挂载特定类型的可移动存储媒体(比如:CD-ROM、软盘、U盘等)。若用的发行版不支持自动挂载和卸载可移动存储媒体,就必须手动完成。
   ①Linux用来挂载媒体的命令为mount。默认情况下,mount命令会输出当前系统上挂载的设备列表:

   ②mount命令提供如下四部分信息(上面例子的最后一行输出中,U盘被GNOME桌面自动挂载到了挂载点/media/disk。vfat文件系统类型说明它是在Windows机器上被格式化的):
    1°媒体设备文件名。
    2°媒体挂载到虚拟目录的挂载点。
    3°文件系统类型。
    4°已挂载媒体的访问状态。
   ③手动在虚拟目录中挂载设备,需要以root用户身份登陆,或是以root用户身份运行sudo命令:mount -t type device directory
    1°type参数指定了磁盘被格式化的文件系统类型。Linux可以识别非常多的文件系统类型(详见第一章)。如果是和windows PC共用这些存储设备,通常得使用下列文件系统类型:vfat(windows长文件系统)、ntfs(windowsNT、XP、Vista以及windows 7中广泛使用的高级文件系统)、iso9660(标准CD-ROM文件系统)。大多数U盘和软盘会被格式化成vfat文件系统;而数据CD则必须使用iso9660文件系统类型。
    2°后面两个参数定义了该存储设备的设备文件位置以及挂载点在虚拟目录中的位置。例如:将U盘/dev/sdb1手动挂载到/media/disk:mount -t vfat /dev/sdb1 /media/disk
    3°媒体设备挂载到了虚拟目录后,root用户就有了对该设备的所有访问权限,而其他用户的访问则会被限制。可以通过目录权限(详见第七章)指定用户对设备的访问权限。
   ④若用到mount命令的一些高级功能,则可用参数:
    1°-a :挂载/etc/fstab文件中指定的所有文件系统。
    2°-f :使用mount命令模拟挂载设备,但并不真的挂载。
    3°-F :和-a参数一起使用时,会同时挂载所有文件系统。
    4°-v :详细模式,将会说明挂载设备的每一步。
    5°-I :不启用任何/sbin/mount.filesystem下的文件系统帮助文件。
    6°-l :给ext2、ext3或XFS文件系统自动添加文件系统标签。
    7°-n :挂载设备,但不注册到/etc/mtab已挂载设备文件中。
    8°-p num :进行加密挂载时,从文件描述符num中获得密码短语。
    9°-s :忽略该文件系统不支持的挂载选项。
    10°-r :将设备挂载为只读的。
    11°-w :将设备挂载为可读写的(默认参数)。
    12°-L label :将设备按指定的label挂载。
    13°-U uuid :将设备按指定的uuid挂载。
    14°-O :和-a参数一起用,限制命令只作用到特定的一组文件系统上。
    15°-o :给文件系统添加特定的选项。-o参数允许在挂载文件系统时添加一些以逗号分隔的额外选项。常用的选项:ro(以只读形式挂载)、rw(以读写形式挂载)、user(允许普通用户挂载文件系统)、check=none(挂载文件系统时不进行完整性校验)、loop(挂载一个文件)。

  (2)卸载存储媒体:从Linux系统上移除一个可移动设备时,不能直接从系统上移除,而应该先卸载。卸载设备使用umount命令:umount directory|device。
   ①umount命令支持通过设备文件或挂载点来指定要卸载的设备:umount directory|device。
   ②若有任何程序正在使用设备上的文件,系统不会允许卸载它。
    [root@testbox mnt]$ umount /home/rich/mnt
    umont:/home/rich/mnt:device is busy
    [root@testbox mnt]$ cd /home/rich
    [root@testbox rich]$ umont /home/rich/mnt
    [root@testbox rich]$ ls -l mnt
    total 0
    [root@testbox rich]$

  (3)df命令:查看所有已挂载磁盘的使用情况。
   ①df命令会显示每个有数据的已挂载文件系统,命令输出如下:

    1°Filesystem :设备的设备文件位置。
    2°1K-blocks :能容纳多少个1024字节大小的块。
    3°Used :已用了多少个1024字节大小的块。
    4°Available :还有多少个1024字节大小的块可用。
    5°Filesystem :已用空间所占的比例。
    6°Mounted on :设备挂载到哪个挂载点上。
   ②-h参数会按照用户易读的形式显示。
   ③Linux后台一直有进程操作文件。df是基于当前Linux系统的磁盘使用情况。

  (4)du命令:显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。这一方法可以用来快速判断是否有超大文件。
   ①du命令会显示当前目录下的所有的文件、目录和子目录的磁盘使用情况,它会以磁盘块为单位来表明每个文件或目录占用了多大存储空间。对于标准大小的目录来说,这个输出会是一个比较长的列表。下面是du命令的部分输出:

    注:每行输出左边的数值是每个文件或目录占用的磁盘数。注意,这个列表是从目录层级的最底部开始,然后按照文件、子目录、目录逐级向上。
   ②一般来说,直接使用du命令作用不大。常用的参数:
    1°-c :显示所有已列出文件总的大小。
    2°-h :按照用户宜读的格式输出大小(使用K、M、G为单位)。
    3°-s :显示每个输出参数的总计。

4.3 处理数据文件
  (0)相关命令
   ①sort filename :对文本文件中的数据行进行排序。
   ②grep [options] pattern [file] :在大文件中搜索一行数据。
   ③tar function [options] object1 object2 :归档数据。

  当有大量数据时,通常很难处理这些信息并提取有用信息。Linux提供了一些有用的命令工具来处理大量数据。
  (1)排序数据sort
   sort命令是对数据进行排序的。默认情况下,sort命令按照会话指定的默认语言的排序规则对文本文件中的数据行排序。
   ①默认情况下,sort命令会把数字当作字符来执行标准的字符排序。使用-n参数,它会告诉sort命令把数字识别为数字而不是字符,并按值排序。
   ②Linux的日志文件经常会在每行的起始位置有一个时间戳,用来表明事件是什么时候发生的。使用-M参数,sort命令就能识别三字符的月份名,并相应地排序。
   ③还有一些方便的sort参数可用,第一个是单破折线表示的参数,第二个是双破折线表示的参数:
    1°-b  --ignore-leading-blanks :排序时忽略起始的空白。
    2°-C  --check=quiet :不排序,如果数据无序也不要报告。
    3°-c  -check :不排序,但检查输入数据是不是已排序;未排序的话,报告。
    4°-d  --dictionary-order :仅考虑空白和字母,不考虑特殊字符。
    5°-f  --ignore-case :默认情况下,会将大写字母排在前面;这个参数会忽略大小写。
    6°-g  --general-number-sort :按通用数值来排序(跟-n不同,把值当浮点数来排序,支持科学计数法表示的值)。
    7°-i  --ignore-nonprinting :在排序时忽略不可打印字符。
    8°-k  --key=POS1[,POS2] :排序从POS1位置开始;如果指定了POS2的话,到POS2位置结束。
    9°-M  --month-sort :用三字符月份名按月份排序。
   10°-m  --merge :将两个已排序数据文件合并。
   11°-n  --numeric-sort :按字符串数值来排序(并不转换为浮点数)。
   12°-o  --output=file :将排序结果写出到指定的文件中。
   13°-R  --random-sort :按随机生成的散列表的键值排序。
           --random-source=FILE :指定-R参数用到的随机字节的源文件。
   14°-r  --reverse :反序排序(升序变成降序)。
   15°-S  --buffer-size=SIZE :指定使用的内存大小。
   16°-s  --stable :禁用最后重排序比较。
   17°-T  --temporary-directory=DIR :指定一个位置来存储临时工作文件。
   18°-t  --field-separator=SEP :指定一个用来区分键位置的字符。
   19°-u  --unique :和-c参数一起使用时,检查严格排序;不和-c参数一起用时,仅输出第一例相似的两行。
   20°-z  --zero-terminated :用NULL字符作为行尾,而不是用换行符。

  (2)搜索数据grep
   在大文件中找到一行数据,使用grep命令来查找: grep [options] pattern [file]
   ①grep命令会在输入或指定的文件中查找包括匹配指定模式的字符的行。
   ②默认情况下,grep命令使用基本的Unix风格的正则表达式来匹配模式,其采用特殊字符来定义怎样查找匹配的模式。
   ③grep命令非常流行,常用的选项参数:
    1°-v :反向搜索(输出不匹配该模式的行)。
    2°-n :搜索结果显示行号。
    3°-c :只要知道有多少行含有匹配的模式。
    4°-e :若要指定多个匹配模式,使用-e参数来指定每个模式。例如:grep -e a -e b file1
    5°-r :递归查找整个目录及子目录的全部文件。
    6°-i :忽略大小写。
    7°-w :匹配整个单词。
    8°-E :匹配扩展的正则表达式。
   ④egrep命令是grep的一个衍生,支持POSIX扩展正则表达式。POSIX扩展正则表达式含有更多的可以用来指定匹配模式的字符。
   ⑤fgrep则是另外一个版本,支持将匹配模式指定为用换行符分隔的一列固定长度的字符串。这样就可以把这列字符串放到一个文本中,然后在fgrep命令中用其在一个大型文件中搜索字符串了。

  (3)压缩数据
   Linux包含了多种文件压缩工具。下列为Linux上的文件压缩工具:

   ①Linux compress命令是一个相当古老的UNIX档案压缩指令,压缩后的档案会加上一个.Z延伸名以区别未压缩的档案,压缩后的档案可以以uncompress解压。若要将数个档案压成一个压缩档,必须先将档案tar起来再压缩。
   ②bzip2是常用数据压缩命令,压缩比例比gzip高,压缩后的文件名后缀为.bz2。压缩后文件可直接load至hive数据库。
   ③Linux gzip是Linux上最流行的压缩工具,压缩比例可手工调整。gzip软件包包含有下面的工具:
    1°gzip :用来压缩文件。
    2°gzcat :用来查看压缩过的文本文件的内容。
    3°gunzip :用来解压文件。
   ④zip压缩是Microsoft Windows常用的压缩工具。Linux zip工具是Windows上PKZIP工具的Unix实现。

  (4)归档数据tar
   虽然zip命令能够很好地将数据压缩和归档进单个文件,但它不是Unix和Linux中的标准归档工具。目前,Unix和Linux上最广泛使用的归档工具是tar命令。tar命令最开始是用来将文件写到磁带设备上归档的,然而它也能把输出写到文件里,这种用法在Linux上已普遍用来归档数据了。
   注:使用tar程序打出来的包成为tar包,tar命令本身不进行数据压缩,但可以在打包或者解包的同时调用其他的压缩程序,比如gzip、bzip2。生成tar包后,就可以用其它的程序来进行压缩了。
   tar命令的格式: tar function [options] object1 object2 ...
   ①function参数
    1°-A  --concatenate :将一个已有tar归档文件追加到另一个已有tar归档文件。
    2°-c  --create :创建一个新的tar归档文件。
    3°-d  --diff :检查归档文件和文件系统的不同之处。
    4°    --delete :从已有tar归档文件中删除。
    5°-r  --append :追加文件到已有tar归档文件末尾。
    6°-t  --list :列出已有tar归档文件的内容。
    7°-u  --update :将比tar归档文件中已有的同名文件新的文件追加到该tar归档文件中。
    8°-x  --extract :从已有tar归档文件中提取文件。
   ②options:常见的参数
    1°-C dir :切换到指定目录。
    2°-f file :输出结果到文件或设备file。
    3°-j :将输出重定向给bzip2命令来压缩内容。
    4°-p :保留所有文件权限。
    5°-v :在处理文件时显示文件。
    6°-z :将输出重定向给gzip命令来压缩内容。
   ③tar命令使用举例(常用)
    1°创建一个归档文件test.tar,含有test1和test2目录内容。例如:tar -cvf test.tar test1/ test2/
    2°列出tar文件test.tar的归档内容(但并不是提取文件)。例如:tar -tf test.tar
    3°提取tar文件test.tar归档内容。例如:tar -xvf test.tar
    4°打包并压缩文件。例如:tar -zcvf test.tar.gz test1/ test2/
    5°解压缩包并提取文件。例如:tar -zxvf test.tar.gz

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值