ファイルとその操作は、現代のコンピューティングの中心にあります。すべてのUnixライクなシステムのコア原則の1つでさえ、システム上のすべてのものをファイルとして記述することです。これは、事実上すべてのLinuxシステムに当てはまります。ディレクトリからデバイスまで、Linuxディストリビューションはシステム上のすべてのものをファイルとして扱います。現在、システムには、これらのファイルを保存および管理する手段も組み込む必要があります。ここでLinuxファイルシステムが活躍します。 Linuxは多数のファイルシステムをサポートし、それらのさまざまな操作を実装しているため、Linuxでファイルシステムがどのように機能するかについての知識を読者に提供する必要があると感じています。
Linuxファイルシステムの基礎
Linuxファイルシステムは、システムデータの保存と管理を担当します。ファイルシステムは、データの保存と取得の背後にあるメカニズムとして定義できます。ファイルシステムは通常、ユーザーインタラクションを提供する論理レイヤー、さまざまなファイル操作用のAPIなど、いくつかのレイヤーで構成されています。
Linuxのインストール全体が/付近で解決されることに気付いたかもしれません。 点。これはファイルシステムのルートと呼ばれ、基本的にシステムの開始点です。いくつかのディレクトリが含まれており、そのほとんどが歴史的な意味を持っています。 Linuxおよびその他のUnixのファイルシステム階層については、このガイドの後半で説明します。
追加のコンポーネントをマウントポイントにマウントすることで、このファイルシステム階層に接続できます。マウントされると、ユーザーはこのポイントを使用して新しいファイルシステムをトラバースできます。次のセクションでは、これを行う方法を説明します。では、システムはこれらのファイルシステムをどのように追跡しているのでしょうか。つまり、事前定義されたパーティションテーブルを使用して、iノード(開始点)、境界、名前、およびこれを行うためのその他の情報を決定します。
Linuxパーティションマネージャを使用してパーティションテーブルを定義する場合、ファイルシステムには複数の種類があることに気付くかもしれません。一般的な例としては、NTFS、FAT、およびEXTがあります。 Linuxは、後で説明するように、さまざまな種類のファイルシステムをサポートしています。
Linuxファイルシステム構造の発見
Linuxファイルシステムは、元のUnixファイルシステムと非常によく似ています。最新のコンピューティングの革新は新しいトレンドの増加に役立っていますが、ファイルシステム階層はその歴史的な重要性のためにほとんど同じままです。このセクションでは、適切な例を使用してこの階層の概要を説明しました。コマンドラインインタプリタ、別名Linuxシェルに精通していることを前提としています。
デフォルトでは、ユーザーには / home / USERが表示されます ログインするたびにディレクトリ。ターミナルでpwdと入力すると、これを確認できます。 Linuxでディレクトリ階層を視覚化するための事実上のユーティリティの1つであるツリーを使用します。これは、sudo aptinstalltreeを発行することでUbuntuで取得できます。
---
現在のディレクトリでツリーを実行すると、複雑で不可解な構造になっている可能性があります。これは、ツリーがこの場所の各要素(つまり、画像、ドキュメント、ダウンロードなど)を再帰的にトラバースし、それらを組み合わせた最終的な構造を作成するために発生します。ただし、 -Lを追加することはできます このコマンドの深さを指定するフラグ。
$ tree -L 1
このコマンドを実行すると、開始点の第1レベルのコンポーネントのみで構成される単純なツリーのような構造が得られます。この値を増やすと、より透明で堅牢な視覚化が得られます。 cdコマンドを使用して、ファイルシステム内の場所を変更できます。さて、Linuxのすべてがファイルであることを前に説明しました。したがって、ディレクトリはファイルである必要があります。確かにそうです。
ディレクトリは、他のファイル(別名その子要素)の名前を含む単なる特別なファイルです。新しいLinuxインストールには、いくつかの組み込みディレクトリが付属しています。以下でそれらについて説明します。システムをよりよく理解するのに役立ちます。
まず、cd /を使用してシステムのルートに移動し、lsを実行します。これにより、これらのデフォルトディレクトリがすべて表示されます。それらの目的を見つけるために読み続けてください。
/ bin
これには、マシンにインストールされているさまざまなプログラムの実行可能ファイルであるバイナリが含まれています。多くのシステムでは、これは実際のディレクトリとしては存在しませんが、 / usr / binへのシンボリックリンクとして機能します。 ディレクトリ。
/ boot
システムの起動に必要なすべての重要なファイルはここにあります。何をしているのかわからない限り、このディレクトリの内容を試してはいけません。そうしないと、システム自体が破損し、機能が中断する可能性があります。
/ dev
/ devディレクトリには、システムのデバイスファイルが含まれています。これらは、USBドライブ、ハードディスクドライブ、Webカメラなどのファイル表現です。
/ etc
歴史的に、 / etc ディレクトリは、さまざまな雑多なファイルを保持するために使用されました。ただし、現在では、システム全体の構成ファイルをこのディレクトリに保存するのが標準的な規則です。ユーザー名/パスワード、ネットワーククレデンシャル、パーティションのマウントポイントなどの情報がここに保存されます。
/ホーム
これは、ユーザーの個人用ディレクトリです。マシンのユーザー数に基づいて、複数のサブディレクトリを格納できます。ユーザーが「マニアック」であるとすると、ディレクトリ/ home/maniacが割り当てられます。ログインすると、ターミナル内に/ home/maniacディレクトリが表示されます。 :〜$とも呼ばれます Bashシェルで。
/ lib
システムライブラリはここにあります。これらは、アプリケーションがいくつかのタスクを実行するために使用するコードのスニペットです。それらの例には、ウィンドウを描画したりファイルを送信したりするコードスニペットが含まれています。
/メディア
このディレクトリは、外部ストレージなどのプラグアンドプレイデバイスのマウントポイントです。これは、Linuxファイルシステムに比較的新しく追加されたものです。
/ mnt
古くて不機嫌なUnix管理者は、このディレクトリを使用してオンデマンドデバイスまたはパーティションを手動でマウントしました。使用頻度は低いですが、歴史的に重要であるため、Linuxファイルシステムに残ります。
/ opt
オプションの略で、オプションのシステムファイルを保持することを目的としています。管理者は、ソースからインストールしたサードパーティのアプリケーションをホストするためにこれを使用することがよくあります。
/ proc
プロセスファイル、カーネルモジュール、および同様の動的データをホストします。これを妨害しないでください。そうしないと、システムが陳腐化する可能性があります。
/ root
/ homeのように しかし、システムのスーパーユーザーのために。これは、rootアカウントに切り替えたときに表示されるディレクトリです。
/ run
これは、Linuxシステムプロセスで使用される一時データを保持するために使用されます。何をしているのかわからない限り、ここを台無しにしないでください。
/ sbin
/ binのように ただし、システムに不可欠なバイナリのみを保持します。 ls、cd、cpなどのさまざまな日常的に使用されるユーティリティがここにあります。それらを操作しないでください。
/ usr
さまざまな情報が保存されている「あらゆる種類の場所に使用」。バイナリ、ライブラリ、アイコン、マニュアルなどを含めることができます。
/ srv
サーバーディレクトリ。 Webアプリのソースファイルが含まれ、他の通信プロトコルが含まれています。
/ sys
/ devなどの別の仮想ディレクトリ 。機密情報が含まれているため、ユーザーが自分が何をしているのかを理解していない限り、実験しないでください。
/ tmp
システムの再起動時に削除される一時的な値を保持するために使用されます。
/ var
このディレクトリの本来の目的は、すべての可変ファイルをホストすることでした。現在では、ログやキャッシュなどを保存するためのサブディレクトリがいくつか含まれています。
ルートにいくつかの追加のディレクトリがある可能性があります。通常、特定のLinuxディストリビューションの対象であり、システムによって異なる場合があります。
Linuxファイルシステム階層の検査
標準のコマンドラインツールを使用して、ファイルシステム階層をすばやく移動できます。この目的で最もよく使用されるLinuxターミナルコマンドのリストをまとめました。次のセクションについていくのが難しい場合は、向こうに向かいます。
したがって、端末を起動すると、 / home / USERに移動します。 :〜$が指す場所 サイン。 cd / etcのようなcd(ディレクトリの変更)コマンドを使用して、新しい場所に移動できます。以下に示すように、treeコマンドを使用して、現在のディレクトリの単純な視覚化構造を生成します。
$ tree -L 1
ls -lコマンドを使用して、ファイルのタイプを表示できます。出力の最初のセクションは、処理しているファイルの種類を示しています。たとえば、現在のディレクトリに、Picturesというサブディレクトリとtestというテキストファイルが含まれているとします。このディレクトリでls-lコマンドを発行し、これら2つの要素に関する情報を含む行を検索します。
Picturesフォルダを含む行がdで始まることがわかります 、ディレクトリのように。一方、テストの行の開始要素は –である必要があります 、通常のファイルを示します。デバイスやソケットなどの他のファイルも同様に表されます。特別なファイルはcを使用して示されます 、 sを使用するソケット 、 pのパイプ 、 bでデバイスをブロックする 、および lとのシンボリックリンク 。
ファイルの種類を判別するために使用できるもう1つの堅牢なコマンドは、ファイルです。 コマンド自体。上記の例では、コマンドファイルPicturesを実行すると、結果「ディレクトリ」が生成されます。さらに、ファイルテストでは、単純なテキストファイルを示すASCIIテキストのようなものが生成されるはずです。
$ファイルファイル名
マウントを使用することもできます 階層内の特定の場所にファイルシステムを接続するためのコマンド。次のコマンドは、 / dev / sdbをマウントします デバイスから/home / USER / devices 。
$ sudo mount / dev / sdb / home / USER / devices
これで、ユーザーは選択した場所からこのデバイスのコンテンツにアクセスできます。ブロックデバイスの名前を見つけるには、 lsblkを使用できます 指図。同様に、 lspci PCIデバイスの検出に使用できます。lsusb USBを一覧表示するには、および lsdev すべてのデバイスを一覧表示します。
ファイルの種類とアクセス許可について
すでに述べたように、Linuxファイルシステムにはいくつかのファイルタイプがあります。それぞれに独自の目的がありますが、主に通常のファイルとディレクトリを扱います。通常のファイルには、ソースコード、実行可能ファイル、ドキュメント、音楽などの日常的なファイルが含まれます。ディレクトリは、他のファイルの名前を保持する単純なファイルです。一方、特殊ファイルは、パイプやソケットなどの低レベルのシステムコンポーネントです。通常、これらはLinuxカーネルによって処理されます。
現在、パーミッションはまったく異なる概念であり、Linuxユーザーにとって非常に重要です。システム管理スキルを上手に使いたい場合は、それらを明確に理解する必要があります。 Linuxは、他のUnixと同様に、ファイルのアクセス許可を使用して、ユーザーがファイルに対して持つ特権の量を決定します。
権限により、ユーザーは、許可されているシステムのコンテンツにのみアクセスまたは変更できるようになります。これは、Linuxシステムのセキュリティの背後にある最も重要な側面です。 Linuxのファイル権限はそれ自体が非常に重要なトピックであるため、後のガイドで詳しく説明します。今日は、基本に固執します。
以前、ファイルタイプを決定するためにls-lコマンドを使用しました。開始列の最初の文字を見るだけで判断しました。さて、これは許可を指示する列です。 ls -lを再度実行しますが、特定のファイル/ディレクトリで実行します。
出力の最初のセクションには、 –で区切られた3つのフィールドが含まれている必要があります シンボル。最初の文字はファイルタイプを示します。 –になります 前に述べたように、通常のファイルの場合。次の部分には、セット {r、w、x}の1つ以上の文字が含まれている必要があります 。たとえば、 rwの場合 、次に、ユーザーはそれに読み取り(r)および書き込み(w)アクセスできます。もしそうなら( rwx )、ユーザーには読み取り、書き込み、および実行(x)権限があります。
では、このセクションがユーザーのアクセス制御を示している場合、なぜ2つの同様のセクションがあるのでしょうか。これらは、グループおよび他のユーザーの権限です。 Unixはマルチユーザーシステムであるため、ファイルシステムは、異なるユーザーが同じシステムを同時に使用できるように設計されています。すべてのユーザーは、システムにアクセスするために使用できる独自のログインとパスワードのペアを持っていました。権限は、特定のユーザーが特定のコンテンツをどの程度制御できるかを定義するだけです。
chmod を使用して、一部のコンテンツの権限を変更できます 、および chown コマンド。それらは無料のガイドで示されます。
さまざまなLinuxファイルシステムタイプの概要
Linuxベースのオペレーティングシステムには複数のファイルシステムタイプがあります。一般的なLinuxファイルシステムタイプは、ext3、ext4、zfs、FAT、XFS、およびBtrfsです。このリストには間違いなく他にもたくさんあります。簡単にそれらの概要を説明します。適切なファイルシステムタイプを見つけることは、通常、ユーザーの要件によって異なります。 Linuxを始めるユーザーには、ext4ジャーナリングファイルシステムを使い続けることをお勧めします。
Linuxファイルシステムには複数の種類があるため、それらについてある程度の知識を持っていることが不可欠だと考えています。ここでは、Linuxで広く使用されている10種類のファイルシステムを紹介します。
1。 EXTファイルシステム
ext(Extended File System)は、Linux用に特別に設計されており、現在までに4つのバージョンがあります。それらは、ext、ext2、ext3、およびext4です。最新のディストリビューションのほとんどは、extとext2のサポートを提供していません。 ext3バージョンはジャーナリングを実装しました。これは、偶発的な電源障害が発生した場合にデータの破損を防ぐ機能です。 ext4バージョンがリリースされて以来、使用量は比較的減少しています。 Ext4は、最新のディストリビューションのデフォルトのファイルシステムタイプです。
2。 BtrFS
「Bツリーファイルシステム」は、オラクルが開発した革新的なファイルシステムです。これは、標準のLinuxファイルシステムタイプにはない驚くべき機能を提供します。それらのいくつかには、外出先でスナップショットを撮る機能、ドライブプーリング機能、オンラインデフラグ、および透過的な圧縮方法が含まれます。多くの人がBtrFSを「BetterFS」と発音し、Linuxサーバーやパーソナルワークステーションの次の大きなファイルシステムタイプであると考えています。
3。 ReiserFS
ReiserFSは、汎用コンピューティングに使用できるもう1つのジャーナルベースのファイルシステムです。 Linuxでサポートされており、オープンソースのGNUGPLライセンスを備えています。 ReiserFSは、当時比較的新しい機能のいくつかにより、初期の段階でかなりの支持を得ました。その中には、オンラインからボリュームのサイズを変更する機能、内部の断片化を減らすためのテールパッキング、メタデータのみのジャーナリングが含まれていました。 ReiserFSの開発は、主任開発者が刑務所で服役しているために行き詰まっています。
4。 ZFS
ZFSは、Sun Microsystemsによって開発され、現在Oracleによって保守されている堅牢なファイルシステムおよびボリュームマネージャです。これは、大容量のストレージ、効率的な圧縮技術、最新のRAIDモデル、データ重複排除、およびその他の多くの機能をサポートする非常に強力なファイルシステムです。 ZFSは、Mac OS、およびFUSEに加えて、ほとんどのLinuxおよびBSDディストリビューションで利用できます。 UbuntuユーザーはここでZFSの詳細を知ることができます。
5。 XFS
XFSは、Silicon Graphicsによって開発されたExt4のようなファイルシステムであり、2001年からLinuxで使用できます。標準のext4ファイルシステムにある多くの機能を提供しますが、その機能の一部が制限されます。 XFSは、ファイルの断片化をより効果的に検出するために、遅延割り当てと呼ばれる手法を利用します。そのため、LinuxNASおよびSANストレージの設定に適しています。大きなファイルではうまく機能しますが、小さなファイルを大量に処理する場合は非常に遅くなります。
6。 JFS
JFSは、IBMが開発したLinuxファイルシステムである「JournaledFileSystem」の頭字語です。 CPUリソースの使用が限られていることで知られており、大きなファイルと複数の小さなファイルのコレクションの両方でパフォーマンスが大幅に向上します。さらに、システム管理者はパーティションのサイズを動的に変更できます。ただし、この機能は拡大のみをサポートし、縮小はサポートしません。
7。ハンマー
HAMMERは、DragonFlyBSDバージョン用に開発された非常に堅牢なファイルタイプです。これは、64ビットシステムのみをサポートする高可用性ファイルシステムです。 Hammerは、B +ツリーを使用して、無制限のNFSエクスポート可能なスナップショット、履歴保持、チェックサム、マスター-マルチスレーブ操作などの機能を実装します。また、データのオンデマンド重複排除と透過的な圧縮もサポートしています。
8。脂肪
FATまたはファイルアロケーションテーブルは、柔軟性と堅牢な機能セットで知られるファイルシステムのクラスです。人気のあるFATファイルシステムには、FAT 16、FAT32、exFAT、vFATなどがあります。これらは、古いWindowsマシンに組み込まれているため、最も広く使用されているファイルシステムの1つです。 Linuxは、高性能で知られる一般的なFATファイルシステムの幅広いセットをサポートしています。
9。 NTFS
NTFS(New Technology File System)は、多くのユーザーにとってもう1つの一般的なファイルシステムタイプです。これは、最新のWindowsマシンのデフォルトのファイルシステムであり、Linuxおよびその他のBSDシステムでサポートされています。 NTFSは、パフォーマンスを向上させるためにいくつかの手法を実装しており、ジャーナルファイルシステムです。代替データストリーム、さまざまな圧縮方法、サイズ変更、スパースファイル、その他多くの機能をサポートしています。
10。 cramfs
圧縮ROMファイルシステム(別名cramfs)は、組み込みシステムで最も広く使用されているファイルシステムタイプの1つです。これは、システムが最初に画像を解凍しなくても画像を読み取ることができる、読み取り専用のファイルシステムにすぎません。これが、多くのLinuxディストリビューションがinitrdイメージとインストールイメージにそれを使用する理由です。
Linuxにはさらに多くのファイルシステムタイプがあります。さらに、ユーザーはファイルシステム構造に複数のタイプのパーティションをアタッチできます。確かに、それは広く行われている慣習です。 Linuxファイルシステムの特別なタイプの1つは、スワップです。これは実際にはファイルシステムではなく、仮想メモリを実装するために使用される手法です。
Linuxでのファイルシステムタイプの確認
Linuxでは、ユーザーが同時に複数の種類のファイルシステムを使用できるため、ファイル操作を実行する前にファイルシステムの種類を確認する必要があることがよくあります。コマンドラインからパーティションのファイルシステムタイプを判別するためのいくつかの従来の方法の概要を説明します。
1。 dfコマンドを使用したファイルシステムタイプの識別
以下のdfコマンドを使用して、Linuxのファイルシステムタイプを判別できます。 Linux dfコマンドの例を確認して、dfコマンドの詳細を理解してください。
$ df -T /
出力列Typeの下にルート(/)のファイルシステムタイプが生成されます。
2。 fsckコマンドを使用したファイルシステムタイプの識別
fsck(File System Check)コマンドは、パーティションのファイルシステムタイプを判別するために使用できます。 -N フラグはエラーチェックを無効にするために使用されます。
$ fsck -N /
このコマンドは、ファイルシステムタイプとそのブロックIDを出力する必要があります。
3。 lsblkコマンドを使用したファイルシステムタイプの識別
lsblkコマンドは、Linuxマシンでブロックデバイスを表示するために使用されます。 -fを追加できます lsblkにファイルシステムタイプを表示するように指示するためのフラグ。
$ lsblk -f
すべてのブロックデバイスを、タイプ、マウントポイント、および可用性とともに印刷します。
4。マウントコマンドを使用したファイルシステムタイプの識別
前に説明したように、マウントは、デバイスまたはパーティションをファイルシステム内の選択した場所に接続するために使用されます。また、grepとともに使用して、現在マウントされているLinuxファイルシステムのファイルタイプを判別することもできます。
$マウント| grep "^ / dev"
マウントされているすべてのパーティションとそのタイプが表示されます。
5。 blkidコマンドを使用したファイルシステムタイプの識別
blkidコマンドは、ブロックデバイスのプロパティを出力するために使用されます。次の例に示すように、ファイルシステムタイプも表示されます。
$ blkid / dev / sda9
追加情報が含まれています。 Linuxのcutコマンドを使用して、特定の情報を抽出できます。
$ blkid / dev / sda9 |カット-d''-f 3
6。ファイルコマンドを使用したファイルシステムタイプの識別
fileコマンドは、ファイルとディレクトリに関する情報を出力します。 -sLを追加する fileのオプションを使用すると、ファイルシステムの種類も判別できます。
$sudoファイル-sL/dev / sda9
パーティション/dev/sda9のファイルシステムタイプを出力します。
7。 fstabファイルを使用したファイルシステムタイプの識別
fstabファイルには、ファイルシステムのタイプを判別するためにシステムが使用する情報が含まれています。以下に示すように、これを使用してファイルシステムのタイプを取得できます。
$ cat / etc / fstab
このコマンドは、パーティションのファイルシステムタイプを他の情報と一緒に出力します。
8。 partedコマンドを使用したファイルシステムタイプの識別
partedコマンドは、Linuxでファイルシステムの種類を判別するための最も便利な方法の1つです。以下に示すように、それを使用することができます。
$ sudo parted -l </ pre>このコマンドは、Linuxファイルシステムタイプおよびその他の情報とともにすべてのパーティションを出力する必要があります。システム内のすべてのファイルシステムのタイプを判別する必要がある場合は、この方法を使用してください。
9。 inxiコマンドを使用したファイルシステムタイプの識別
ユーザーがファイルシステムの種類を確認できるもう1つの便利なコマンドは、inxiです。次のコマンドを使用して、すべてのパーティションのファイルシステムタイプを検出できます。
$ inxi -pすべてのデバイスをタイプ情報と一緒に印刷します。
10。 mtabファイルを使用したファイルシステムタイプの識別
mtabファイルをgrepして、マウントされたファイルシステムのタイプ情報を取得することもできます。以下のコマンドは、これを行う方法を示しています。
$ cat / etc / mtab | grep "/ dev / sd *"現在マウントされているデバイスの情報の種類が出力されます。
終わりの考え
Linuxファイルシステムは、お気に入りのLinuxディストリビューションのさまざまな側面をカバーしています。ソフトウェアエンジニアリングの観点から、Linuxがファイルシステムを構造化する方法について説明し、この階層を効果的にトラバースするためのさまざまなコマンドを指示しました。 Linuxのファイルシステムタイプは、特定のファイルシステムの論理エンティティを示します。広く使用されている10種類のLinuxファイルシステムの概要を説明し、ターミナルからこれを判断する方法を示しました。ファイルシステムを1つのガイドに含めることは非常に困難ですが、編集者は不可能を実現するために最善を尽くしました。混乱が生じたり、さらに質問がある場合は、コメントを残してください。
Linux