最近、顧客サイトにログインして活動ログファイルを取得する際に、いくつかのlinuxコマンドに出くわしたが、linuxのファイルタイプや、Linux OSのファイルタイプを知るための簡単なコマンドも勉強した。
Linux は4つの基本的なファイルタイプを使用します:
- 普通のファイル
- ディレクトリ
- シンボリックリンク
- ブロックとキャラクターデバイスファイル
ファイルのタイプを判断するには ls -lコマンドを実行して出力行のそれぞれの最初の文字を読み取ります。
典型的な ls コマンドの出力は次のとおりです:
$ ls -l
total 8
-rw-r- 1 root root 22 Oct 6 15:33 anormalfile
brw-rw– 2 root disk 41, 0 May 5 1998 blockdev
crw-rw- 2 root root 5, 0 May 5 1998 characterdev
drwxr-xr-x 2 root root 4096 10月6日 15:33 subdir
lrwxrwx 1 root root 11 Oct 6 15:35 symbolic -> anormalfile
通常のファイルはダッシュ(-)から、ディレクトリはdから、シンボリックリンクはlから、ブロックデバイスはbから、キャラクターデバイスはcからはじまります。
普通のファイル
普通のファイルは、実行プログラムを含むあらゆる種類のデータで構成されることができます。
ディレクトリ
ディレクトリは他のファイルやディレクトリを含み、それらへのポインタを提供するファイルである。
これは整理棚におけるフォルダと同様の機能で、関連するファイルを組織的にグループ化することができる。 しかし、フォルダは通常ファイルのみを含むことができるのに対し、ディレクトリはしばしばサブディレクトリと呼ばれる追加のディレクトリを含むことができます。
シンボリックリンク
シンボリック – またはソフト – リンクは、完全に別のファイルの名前と場所を指します。 したがって、リンクを開く、コピーする、移動する、またはその他の方法で参照するとき、その操作は実際には参照されたファイル上で実行されます。 この区別は、通常、ユーザーには見えません。 参照されるファイルが削除されたり名前が変更されたりすると、リンクは壊れ、それを開こうとするとエラーが発生します。
また、ハードリンクを作成することもできます。 ハード・リンクは、通常のファイルとまったく同じように、ファイル内の実際のデータを指し示します。 したがって、元のファイルと同じデータを指すハードリンクは、名前以外には違いがなく、どちらも普通のファイルと見なすことができます。 ハードリンクは、そのリンクの数によってのみ、他の普通のファイルと区別することができます。 リンクの数は,ls -lのリストの2番目のフィールドに表示される.
デバイスファイル
Linux が使用するすべての物理デバイスは、デバイスファイルによって表現されます。 キャラクタ・スペシャル・ファイルは、Linuxと1文字ずつ、またはシリアルでやり取りするデバイスを表しています。 プリンターやターミナルがこのタイプのデバイスの例である。 ブロック特殊ファイルは、ハードディスクやフロッピーディスク、CD-ROM など、データのブロックを使用して Linux と対話するデバイスを表します。
すべてのデバイスファイルは /dev ディレクトリに含まれています。 そのため、特別なコマンドや構文を使用することなく、これらのデバイス間で簡単にデータを移動、コピー、転送することができます。
ファイル名とパス名
すべてのファイルには、最大 256 文字からなるファイル名が割り当てられます。 この名前は、大文字と小文字の混合、数字、およびピリオド、ダッシュ、アンダースコアなどの特定の句読点で構成できます。 たとえば、コンマのようなフィールドセパレータを表す文字や、シェルにとって特別な意味を持つ他の特殊文字を使用することはできません。 使用できない特殊文字は、
! @ # $ % ^ & * ( ) { } ‘ ” \ パス名
パス名を使って、コマンドラインからディレクトリ間を移動することができます。 パス名を使うには,Linuxファイルシステムのディレクトリ構造を理解する必要がある. Linuxファイルシステムの最上位ディレクトリはルートディレクトリで,スラッシュ(/)で表されます. ルートディレクトリの下にはトップレベルのディレクトリがあり、その後に 1 つ以上のサブディレクトリが続きます。Linux ファイルシステムのファイル構造
相対パス名または絶対パス名を使ってディレクトリ間を移動することができます。 例えば、ホームディレクトリから expenses ディレクトリに移動したい場合、cd expenses
と入力します。
相対パス名は、ファイルまたはディレクトリ名で始まるか、現在のディレクトリへのシンボリック参照 (.) やその親ディレクトリ (…) へのシンボル参照を使用できますが、フォワードスラッシュは使用できません。
Linux ファイルシステムの簡単な例
絶対パス名は、ルートディレクトリ (/) からの完全パス名を表示します。 例えば、次のコマンドは、現在のディレクトリから、ルートディレクトリの下にある usr ディレクトリの applic サブディレクトリに直接移動することができます:cd /usr/applic
ノード、ブロック、特殊ファイル
ノード
すべてのファイルには固有の inode 番号が割り当てられています。 inodeは、ファイルの位置と属性を定義する構造体である。 ファイルのinode番号は、lsコマンドの-iオプションで確認することができる。 ファイルのinodeに含まれる情報は、stat filename構文で確認できます。 このコマンドの出力 (stat results) は、「results」ファイルの inode に関連する情報を表示します。$ stat results
File: “results”
Size: 8
Filetype: 通常ファイル
Mode: (0644/-rw-r–r–)
Uid: ( 0/ root)
Gid: ( 0/ root)
Device: 3,7 Inode: 123256 リンク 1
Access: Tue Jul 25 16:45:00 2000 (00072.18:31:07)
Modify: Thu Jul 20 12:35:20 2000 (00077.22:40:47)
Change: Thu Jul 20 12:35:20 2000 (00077.22:40:47)この例では、表示される属性として、ファイル タイプ、ファイル サイズ、所有者のユーザー ID (UID) 、それに関連するハード リンク数、ファイルの作成時刻、アクセス時刻、変更時刻などがあります。 ファイル名は、関連する inode 番号とともにディレクトリに格納されます。 stat コマンドの例では、ファイル名は入力した filename パラメータから取得します。
ブロック
Linux ファイルシステムでは、ファイルはディスクスペースの同じ大きさのセグメントであるブロックに格納されています。 一般に、ブロックのサイズは512バイトから32キロバイトまでと、Linuxのインストール状況によって異なります。 ファイルの最大サイズは、ファイル・システムで使用されるブロック・サイズに依存します。 たとえば、ext2 ファイル システムで 512 バイトのブロックを使用する場合、最大ファイル サイズは 2 GB です。ディスク システムはブロックサイズのチャンクでデータを取得するため、ブロック サイズが大きいほど、アクセスがより効率的になります。 大きなブロックを作成することの問題は、ディスク領域を浪費してしまうことです。 たとえば、ブロックサイズが4KBで、ほとんどのファイルに数バイトのデータしか含まれていない場合、各ファイルに対して4096バイトのディスク領域のほとんどが無駄になる。 しかし、ブロック サイズを小さくすると、ディスク アクセスの効率が相対的に低下します。
df などの一部のコマンドは、インストールが異なるブロック サイズでファイルを格納していても、ディスク情報を 1 KB ブロックで出力します。 システムのブロックサイズを確認する簡単な方法は、ディスク使用量を表示する du コマンドを使用することです。 この例では、「m」で始まるすべてのファイルのディスク使用量が表示されます。
$ du -h m*
36k mail
4.0k mail.rc
12k mailcap
12k mailcap.vga
4.0k man.config
4.0k mc.global
148k midi
40k mime-magic
104k mime-magic.dat
8.0k mime.types
4.0k minicom.users
0 motd
4.0k mtabこの例では、ディスク上のファイルサイズをブロックサイズ単位で表示し、この場合は 4.0 KB となる。
特殊ファイル
他のファイルタイプに加えて、Linux では特殊ファイルを使用します。これは、アクセスされると固有の機能を果たす、システムで定義されたファイルです。特殊ファイルとその機能
例えば、コマンドからの不要な出力を取り除く必要がある場合、出力を /dev/null ファイルにリダイレクトすることが可能である。 この例では、find コマンドによって生成されたすべてのエラーは、標準エラーから /dev/null にリダイレクトされます。
$ find / -n myfile 2> /dev/null