Gentooの創設者によるLinuxの基本。 パート1(2/4):ファイルとディレクトリの管理

マニュアルの最初の部分の翻訳を続けました。 ここから始めてください



この節では、ls、mkdir、touch、mv、cpなどのファイルシステムとファイルを操作するコマンドについて説明し、echoとcatの使用に影響します。 ファイルシステムのiノードについて通知されます。



Linuxコマンドの使用



lsの紹介



そして今、私たちはすぐにlsコマンドを実行します。 ほとんどの場合、すでにこのコマンドに精通しており、lsと入力すると現在の作業ディレクトリの内容のリストが取得されることを知っています。









 $ cd /usr 
      

$ ls

X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin gentoo-x86 include libexec portage share tmp distfiles i686-linux info local portage.old src






-aオプションを指定すると、「。」で始まる隠しファイルとディレクトリを含む完全なリストを表示できます。 次の例に示すように、ls -aは特別なバインドディレクトリ「。」も表示します。 および「..」:









 $ ls -a 
      

. bin gentoo-x86 include libexec portage share tmp .. distfiles i686-linux info local portage.old src X11R6 doc i686-pc-linux-gnu lib man sbin ssl






展開されたディレクトリリスト



lsを使用して、コマンドラインで1つ以上のディレクトリまたはファイルを指定することもできます。 ファイルを指定すると、lsはそのファイルのみを表示します。 また、ディレクトリを指定すると、lsはその内容を表示します。 -lオプションは、ディレクトリの内容リストでパーミッション、所有者、最終変更時刻、サイズを確認する必要がある場合に非常に便利です。









次の例では、-lオプションを使用してmy / usrディレクトリの内容を表示しました。









 $ ls -l /usr 
      

drwxr-xr-x 7 root root 168 Nov 24 14:02 X11R6 drwxr-xr-x 2 root root 14576 Dec 27 08:56 bin drwxr-xr-x 2 root root 8856 Dec 26 12:47 distfiles lrwxrwxrwx 1 root root 9 Dec 22 20:57 doc -> share/doc drwxr-xr-x 62 root root 1856 Dec 27 15:54 gentoo-x86 drwxr-xr-x 4 root root 152 Dec 12 23:10 i686-linux drwxr-xr-x 4 root root 96 Nov 24 13:17 i686-pc-linux-gnu drwxr-xr-x 54 root root 5992 Dec 24 22:30 include lrwxrwxrwx 1 root root 10 Dec 22 20:57 info -> share/info drwxr-xr-x 28 root root 13552 Dec 26 00:31 lib drwxr-xr-x 3 root root 72 Nov 25 00:34 libexec drwxr-xr-x 8 root root 240 Dec 22 20:57 local lrwxrwxrwx 1 root root 9 Dec 22 20:57 man -> share/man lrwxrwxrwx 1 root root 11 Dec 8 07:59 portage -> gentoo-x86/ drwxr-xr-x 60 root root 1864 Dec 8 07:55 portage.old drwxr-xr-x 3 root root 3096 Dec 22 20:57 sbin drwxr-xr-x 46 root root 1144 Dec 24 15:32 share drwxr-xr-x 8 root root 328 Dec 26 00:07 src drwxr-xr-x 6 root root 176 Nov 24 14:25 ssl lrwxrwxrwx 1 root root 10 Dec 22 20:57 tmp -> ../var/tmp






最初の列には、各アイテムのアクセス情報が表示されます。 後でそれを解釈する方法を説明します。 次の列には、ファイルシステムの各要素へのリンクの数が含まれています。後でこれに戻ります。 3番目と4番目の列は、それぞれ所有者とグループのリストです。 5列目はオブジェクトのサイズです。 6番目-オブジェクトの最後の変更時刻(mtime)。 そして最後に、オブジェクトの名前の最後の列。 ファイルがシンボリックリンクの場合、矢印->およびこのシンボリックリンクが指すパスが表示されます。









ディレクトリを見る



ディレクトリの中ではなくディレクトリを見たい場合があります。 この場合、-dオプションを指定できます。これは、lsにディレクトリを内部として扱うように指示します。









 $ ls -dl /usr /usr/bin /usr/X11R6/bin ../share 
      

drwxr-xr-x 4 root root 96 Dec 18 18:17 ../share drwxr-xr-x 17 root root 576 Dec 24 09:03 /usr drwxr-xr-x 2 root root 3192 Dec 26 12:52 /usr/X11R6/bin drwxr-xr-x 2 root root 14576 Dec 27 08:56 /usr/bin






再帰およびiノードリスト



したがって、-dを使用してディレクトリを見ることができますが、逆に-Rを使用することもできます。ディレクトリ内を見るだけでなく、ファイルが含まれるすべてのディレクトリを再帰的に見ることもできます。 このオプションのサンプル出力はマニュアルに含めません(通常は非常に膨大なため)が、いくつかのls -Rおよびls -Rlコマンドを試して、この仕組みを理解してください。









最後に、-iオプションを使用して、ファイルシステムリスト内のオブジェクトのiノード数を表示できます。









 $ ls -i /usr 
      

1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin 1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share 8316 distfiles 1517 include 776 man 23779 src 43 doc 1386 info 93892 portage 36737 ssl 70744 gentoo-x86 1585 lib 5132 portage.old 784 tmp






iノードの概念



各ファイルシステムオブジェクトには、iノード番号と呼ばれる一意のインデックスが割り当てられます。 これは当たり前のことのように思えるかもしれませんが、iノードの概念は、ファイルシステムのほとんどの操作を理解するために非常に重要です。 たとえば、リンク「。」を考えます。 各ディレクトリに表示される「..」 「..」ディレクトリが実際に何であるかを完全に理解するために、最初に/ usr / localの iノード番号を調べます。









$ ls -id /usr/local

5120 /usr/local








ディレクトリ/ usr / localのinode番号は5120です。次に、 / usr / local / bin / ..のiノード番号を見てみましょう









$ ls -id /usr/local/bin/..

5120 /usr/local/bin/..








ご覧のとおり、ディレクトリ/ usr / local / bin / ../ usr / localと同じ番号になっています! この衝撃的な啓示にどう対処できるか見てみましょう。 以前は、 / usr / local自体がディレクトリであると想定していました。 さて、実際にはディレクトリがiノード番号5120であることがわかり、このiノードを指す少なくとも2つの要素(「リンク」と呼ばれる)が見つかりました。 / usr / local/ usr / local / bin / ..は両方とも5120番目のiノードへのリンクです 。 このiノードはディスク上の1か所にしか存在しませんが、それでも多くのリンクがあります。









実際、ls -dlコマンドを使用して、この5120 iノードにつながるリンクの総数を確認することもできます。









 $ ls -dl /usr/local 
      

drwxr-xr-x 8 root root 240 Dec 22 20:57 /usr/local






左側の2列目を見ると、ディレクトリ/ usr / local (inode 5120)が8回参照されていることがわかります。 私のシステムでは、次のパスがこのiノードにつながります。









/usr/local

/usr/local/.

/usr/local/bin/..

/usr/local/games/..

/usr/local/lib/..

/usr/local/sbin/..

/usr/local/share/..

/usr/local/src/..








mkdir



新しいディレクトリを作成するために使用されるmkdirコマンドを簡単に見てみましょう。 次の例では、3つの新しいディレクトリtictac 、およびtoeをすべて/ tmp内に作成します。









$ cd /tmp

$ mkdir tic tac toe








デフォルトでは、mkdirコマンドは親ディレクトリを作成しません。 最後の(作成された)要素まで存在する必要があります。 したがって、 won / der / fulサブディレクトリを作成する場合は、3つの別個のmkdirコマンドを実行する必要があります。









$ mkdir won/der/ful

mkdir: cannot create directory `won/der/ful': No such file or directory

$ mkdir won

$ mkdir won/der

$ mkdir won/der/ful








ただし、mkdirには非常に便利なオプション-pがあります。このオプションは、mkdirに、欠落している親ディレクトリを作成するように指示します(以下を参照)。









$ mkdir -p easy/as/pie







全体として、非常に簡単です。 mkdirコマンドの詳細については、man mkdirと入力して指示を読んでください。 同じことは、bashに組み込まれているcdを除く、ここで説明するほとんどすべてのコマンド(たとえば、man ls)に当てはまります。









触る



ここで、ファイルとディレクトリのコピー、名前変更、移動に使用されるcpおよびmvコマンドを見ていきます。 ただし、touchコマンドを使用して/ tmpにファイルを作成することにより、レビューを開始します。









$ cd /tmp

$ touch copyme








touchコマンドは、「mtime」(最終変更時刻-約Per。)ファイルが存在する場合に更新します(出力ls -lの6番目の列を思い出してください)。 ファイルが存在しない場合、新しい空のファイルが作成されます。 これで、サイズがゼロの/ tmp / copymeファイル作成されます









エコー



ファイルが存在するので、データを追加してみましょう。 これを行うにはechoコマンドを使用します。このコマンドは引数を取り、標準出力に出力します。 まず、echoコマンド自体:









$ echo "firstfile"

firstfile








そして今、同じechoコマンドですが、出力リダイレクトがあります:









$ echo "firstfile" > copyme







大なり記号は、 copymeというファイルにエコー出力を書き込むようシェルに指示します。 このファイルは、存在しない場合は作成され、存在する場合は上書きされます。 ls -lと入力すると、copymeファイルのサイズは10バイトであることがわかります。これは、firstfileという単語と改行が含まれているためです。









 $ ls -l copyme 
      

-rw-r--r-- 1 root root 10 Dec 28 14:13 copyme






猫とcp



端末でファイルの内容を表示するには、catコマンドを使用します。









$ cat copyme

firstfile








これで、メインのcpコマンド呼び出しを使用して、元のcopymeからcopymeファイルを作成できます。









$ cp copyme copiedme







以下では、これらが本当に異なるファイルであることを確認します。 異なるiノード番号があります。









 $ ls -i copyme copiedme 
      

648284 copiedme 650704 copyme






mv



次に、mvコマンドを使用して、 copyedmeの名前をmovedmeに変更します 。 iノード番号は同じままです。 ただし、iノードを指すファイル名は変更されます。









 $ mv copiedme movedme 
      

$ ls -i movedme

648284 movedme






移動先ファイルが元のファイルと同じファイルシステムにある限り、移動したファイルのiノード番号は変わりません。 ガイドの第3部でファイルシステムを詳しく見ていきます。









mvについて話している間、このコマンドをどのように使用できるかを見てみましょう。 mvは、ファイルの名前を変更する機能に加えて、1つまたは複数のファイルをディレクトリ階層内の別の場所に移動できます。 たとえば、 / var / tmp / myfile.txtをディレクトリ/ home / drobbins (これは私の家)に移動するには、 次のように入力します(または〜-約Per。を使用できます)。









$ mv /var/tmp/myfile.txt /home/drobbins







その後、 myfile.txt/home/drobbins/myfile.txtに移動されます 。 また、 / home / drobbins/ var / tmpとは異なるファイルシステムにある場合、mvコマンドはmyfile.txtを新しいファイルシステムにコピーし、古いファイルシステムから削除します。 ご想像のとおり、 myfile.txtがファイルシステム間を移動すると、新しい場所にあるmyfile.txtは新しいiノード番号を取得します。 これは、各ファイルシステムに独自のiノード番号のセットがあるためです。









mvを使用して、複数のファイルを1つのディレクトリに移動することもできます。 たとえば、 myfile1.txtmyarticle3.txt/ home / drobbinsに移動するには、次のように入力します。









$ mv /var/tmp/myfile1.txt /var/tmp/myarticle3.txt /home/drobbins







継続するには...






著者について



ダニエル・ロビンス



Daniel Robbinsは、Gentooコミュニティの創設者であり、Gentoo Linuxオペレーティングシステムの作成者です。 ダニエルは妻のメアリーと元気な娘2人とニューメキシコに住んでいます。 彼はFuntooの創設者兼代表でもあり、 IBM developerWorks 、Intel Developer Services、およびC / C ++ Users Journalの技術記事を数多く執筆しています。









クリス・ハウザー



クリスハウザーは、1994年にテイラー大学(米国インディアナ州)の管理者チームに参加し、コンピューターサイエンスと数学の学士号を取得して以来、UNIXサポーターです。 その後、Webアプリケーション、ビデオ編集、UNIXドライバー、暗号化保護など、さまざまな分野で働きました。 現在、Sentry Data Systemsで働いています。 Chrisは、Gentoo LinuxやClojureなどの多くの無料プロジェクトにも貢献し、 The Joy of Clojureの共同執筆者でもあります。









アロン・グリフィス



Iron Griffisはボストンに住んでおり、ここ10年間、Hewlett-PackardでTru64、Linux、Xen、KVM仮想化セキュリティ認証用のUNIXネットワークドライバー、最近ではHP ePrintプラットフォームなどのプロジェクトに従事しました。 プログラミングの暇な時間に、Ayronは、自転車に乗ったり、ビットをジャグリングしたり、ボストンのプロ野球チームRed Socksを応援したりする際に、プログラミングの問題を消し去ることを好みます。








All Articles