情報メディア論 => ファイルの圧縮と展開

here, img logo!

ファイルの圧縮と展開(UNIX編)

  1. UNIX のファイル操作 command / tool
    1. ファイル名の一覧"ls"(listの意味)
    2.   % ls                 (現directoryの一覧表示)
         image1.gif   index.html   media/ sample/
        % ls sample          ("sample"directoryの中の一覧表示)
         file1.txt   smpl01/   smpl02/   smpl03/
        % ls sample/smpl02   ("sample"の中の"smpl02"directoryの中の一覧表示)
         awk/   keijo.all   kyouin   sh/   tex/
      
    3. ファイルの複写"cp" (copyの意味)
    4.   % cp image1.gif img2.gif  (元image1.gifを先img2.gifに複写、
                                   複写先のファイルががない場合は新たに生成する)
      
    5. ファイルの削除"rm" (removeの意味)
    6.   % rm -i img2.gif        ("img2.gif"を削除、"-i" を付けるとyes/noを確認してから実行)
         rm: remove img2.gif? y ("y"を入力なら削除、"n"なら削除中止)
      
    7. ファイル名の変更と移動"mv" (moveの意味)
    8.   % mv hobby.html hobby1.htm  (元のファイル名hobby.htmlを先のhobby1.htmに変更)
        % mv hobby1.htm media       (mediaというdirectoryがあるならhobby1.htmをmediaの
                           中に移動する、なければhobby1.htmをmediaというファイル名に変更)
      
    9. ファイルの印刷"lpr" (line printの意味、BSD系、第1実習室のLBPに出力される)
    10.   % lpr  印刷したいファイル名
  2. ファイルのグループ化と階層化 command / tool
    1. ディレクトリの例

      "public" directoryにある"sample" directoryの構成は以下のように1つのfile"file1.txt"と3つの sub-directory (smpl01, smpl02, smpl03) から成っている。"smple02" directoryもその中に幾つかのdirectoryを持っている。

      public/  index.html, image1.gif, hobby.html, ...
      media/ paint1.gif, paint.html, excel1.gif, logo.jpg, photo.html...
      sample/ file1.txt
      smpl01/ music, sort.data
      smpl02/ awk/ form.a, kamoku.dat, programs
      keijo.all, kyouin
      sh phone.d, scripts, sed.s
      tex/ sample1.tex, semi1.tex 
      smpl03/ awks, c-shell, sh.word

      ファイルをこのようにグループ化したり階層化するには、cp (copy), mv (move), rm (remove) と共に次のような command / tool を組合わせて利用する。

    2. 現在ディレクトリの変更"cd" (change directoryの意味)
    3.   % cd               (current directoryをhome directoryに変更)
        % cd public        (上の指令の直後に行なうと、current directoryを "public" に変更)
        % cd ~/public      (同上、ただしどこで作業していてもユーザの"public" に戻る)
        % cd ..            (直前のdirectoryの1つ上のdirectoryにcurrent directoryを変更)
      directoryを表す記号

    4. ファイルへの経路 (path)と経路名
    5. 現在ディレクトリの表示(確認)"pwd" (print working directoryの意味)
    6.   % cd ~/public      (current directoryをpublic変更、ユーザ名を i98001 とする)
        % pwd              (現在ディレクトリを絶対経路名で表示する)
         /home4/i98001/public
      

    7. ディレクトリの作成"mkdir" (make directoryの意味)
    8.   % cd ~/public/sample
        % mkdir smpl04          ("sample" の中に "smpl04" directoryを作る)
      

    9. ディレクトリの削除"rmdir" (remove directoryの意味)
    10.   % ls
         file1.txt   smpl01/   smpl02/   smpl03/   smpl04/
        % rmdir smpl04          ("smpl04" directoryを削除)
        % ls                    ("smpl04" directoryが削除されたことを確認)
         file1.txt   smpl01/   smpl02/   smpl03/ 
      

    11. ディスク領域の使用量の表示 "du" (disk usageの意味)
        % du ~                  (自分の全使用量を表示する)
        7       ./Mail/mbox#1
        33      ./Mail/mbox#2
        45      ./Mail
        5       ./public/sample
        15      ./public/image
        53      ./public
        125                     (全使用量は 125 block, 1block = 1024 byte)
        % ls -s Mail            ("Mail"の使用量を表示する、結果は横に並べて表示する)
        total 45
        10 mail/     7 mbox#1/       25 mbox#2/      1 mlfldrs1~old     1 mlfldrs1
        % du public             ("public"の使用量を表示する、結果は縦に表示する)
        ...   ...
      

  3. ファイルの圧縮と展開、書庫ファイルの作成
    1. ファイルの圧縮 "gzip, cpmpress"
    2.   % cd ~/public/sample/smpl02/awk
        % ls -l kamoku.dat       ("ls" に "-l" を付けるとファイルのサイズを表示する)
       -rw-r--r--  1 i98001      14879 Nov 22 16:44 kamoku.dat
       "kamoku.dat"のサイズは 14879 byte である。
        % gzip  kamoku.dat
        % ls                     (圧縮されたファイル名には ".gz" が付く)
         form.a   kamoku.dat.gz   programs
        % ls -l kamoku.*         ("*" は任意の文字列にmatchする)
       -rw-r--r--  1 i98001       5540 Nov 22 16:44 kamoku.dat.gz
       "kamoku.dat"のサイズは 5540 byteに圧縮された。
      

    3. ファイルの展開 "gunzip, uncompress"
    4.   % ls                     (圧縮されたファイル名があるか?)
         form.a   kamoku.dat.gz   programs
        % gunzip kamoku.dat
        % ls -l kamoku*
       -rw-r--r--  1 i98001      14879 Nov 22 16:44 kamoku.dat
        展開された"kamoku.dat"のサイズは元の14879 byte に戻った。
      

    5. 書庫ファイルの作成 "tar" (tape archiveの意味)
    6.   % tar cvf sample.tar sample
          ...   ...
        % ls -l sample*
      

    7. 書庫ファイルからの復元も "tar"
    8.   % tar tvf sample.tar
          ...   ...
        % tar xvf sample.tar
          ...   ...
        % ls -l sample*
      

  4. Unix実習 (ファイルの圧縮と展開、書庫ファイルの作成)
  5. (current directoryを自分の"public"に変えて、サンプルを current "." へ複写)

      % cd ~/public
      % ls                                       (またはpwdで作業場所を確認)
      % cp ~test01/doc/sample.tar.gz .           (注意! "." へ複写)
      % ls -l sample*          (copyされた"sample.tar.gz"のサイズなどを確認)
      -rw-r--r--  1 i98001      24908 Nov 22 17:51 sample.tar.gz
    

    (圧縮された書庫ファイルの展開)

      % gunzip sample.tar      
      % ls -l sample.tar*      (書庫ファイル"sample.tar"の展開を確認)
      -rw-r--r--  1 i98001     122880 Nov 22 17:51 sample.tar 
    

    (書庫ファイルからの復元)

      % tar tvf sample.tar     (書庫ファイルが持つ元のファイル情報を表示するのみ)
      rwxr-xr-x8889/1000      0 Nov 22 16:59 1999 sample/
      rwxr-xr-x8889/1000      0 Nov 22 16:55 1999 sample/smpl01/
      rw-r--r--8889/1000    817 Nov 22 16:54 1999 sample/smpl01/music
      ..........
      % tar xvf sample.tar     (実際に書庫ファイルから元のファイル群を復元)
      x sample/smpl01/music, 817 bytes, 2 tape blocks
      x sample/smpl01/sort.data, 2140 bytes, 5 tape blocks
      x sample/smpl02/sh/phone.d, 157 bytes, 1 tape blocks (復元の状況が報告される)
      ..........
      % ls  sample             (復元された"sample"のdirectory構成などを表示)
      file1.txt  smpl01/    smpl02/    smpl03/
      % ls -l sample*          (元のファイル群を確認してみる)
      -rw-r--r--  1 i98001     122880 Nov 22 19:51 sample.tar
    
      sample:                   (構成やサイズや日時は元のファイル情報)
      total 25
      -rw-r--r--  1 i98001        157 Nov 22 16:58 file1.txt
      drwxr-xr-x  2 i98001       8192 Nov 22 16:55 smpl01/
      drwxr-xr-x  5 i98001       8192 Nov 22 16:49 smpl02/
      drwxr-xr-x  2 i98001       8192 Nov 22 16:53 smpl03/
    
      % du sample               (サイズの確認、単位は 1block=1Kbyte=1024 byte)
      12      sample/smpl01
      39      sample/smpl02/sh
      17      sample/smpl02/tex
      38      sample/smpl02/awk
      128     sample/smpl02
      11      sample/smpl03
      160     sample                  (全体で 160 block)
    
    (書庫ファイルの作成)
      % tar cvf sample.tar sample    (書庫ファイル"sample.tar"の作成)
      a sample/smpl01/music 2 blocks
      a sample/smpl01/sort.data 5 blocks
      a sample/smpl02/sh/phone.d 1 blocks   (書庫化の報告)
       ...........
      a sample/smpl03/sh.word 2 blocks      (1blockは1024byteのサイズ)
      a sample/smpl03/awks 2 blocks
      a sample/file1.txt 1 blocks
      % ls -l sample*                (書庫ファイルの確認、書庫ファイルのサイズは約122K)
      drwxr-xr-x  5 i98001       8192 Nov 22 16:58 sample/
      -rw-r--r--  1 i98001     122880 Nov 22 17:11 sample.tar 
    
    (書庫ファイルの圧縮)
      % gzip sample.tar              (書庫ファイル"sample.tar"の圧縮)
      % ls -l sample.tar*            (書庫ファイル"sample.tar"の圧縮を確認)
      -rw-r--r--  1 i98001      24908 Nov 22 17:15 sample.tar.gz
    
      % ls
       ...     sample/    sample.tar.gz    ...
    
    (圧縮された書庫ファイルが保管されているので元のsampleの内容を一括削除する)
      % rm -r sample                   ("rm"は"rm -i"の別名になっているので
      rm: remove file1.txt? y          削除の確認が必要)
      rm: remove smpl01/music? y
      rm: ...   ...
      % ls
       ...     sample.tar.gz    ...     ("sample/"が一括削除されたことを確認)
    
    (すべて正しく働くことを確認したので "sample.tar.gz" のみを残して他は削除しておく)