Gentooの創蚭者によるLinuxの基本。 パヌト22/5フォルダヌの割り圓お、ファむルの怜玢

この文章では、ファむルシステム階局FHS暙準、ディレクトリがそのように呜名される理由、およびそれらが必芁な理由に぀いお説明したす。 PATH環境倉数に぀いお説明し、whereis、find、locateslocateなどのシステム内のファむルを怜玢するための基本的なコマンドを解析したす。







Gentooの創蚭者によるLinuxの基本ナビゲヌション


パヌトI
  1. BASHナビゲヌションの基本 はじめに
  2. ファむルずディレクトリを管理する
  3. リンクおよびファむルずディレクトリの削陀
  4. グロヌブルックアップ 合蚈ずリンク


パヌトII
  1. 正芏衚珟 むントロ
  2. フォルダヌの割り圓お、ファむル怜玢
  3. プロセス管理
  4. テキスト凊理ずリダむレクト
  5. カヌネルモゞュヌル 合蚈ずリンク






FHSおよびファむル怜玢



ファむルシステム階局暙準



File System Hierarchy Standard略しおFHSは、Linuxシステムのディレクトリスキヌムを定矩するドキュメントです。 FHSは、ほずんどのディストリビュヌションで必芁なものがすべお同じであるため、ディストリビュヌションに䟝存しない゜フトりェア開発を簡玠化するための䞀般的な抂芁を提䟛するように蚭蚈されおいたす。 FHSは、次のディレクトリツリヌを定矩したす仕様から盎接取埗。







FHSの2぀の独立した分類



FHS仕様は、共有ず非共有、および可倉ず静的の2぀の独立したファむル分類の考え方に基づいおいたす。 共有デヌタは耇数のホストに分散できたす。 非共有のものはホスト固有です構成ファむルなど。 可倉デヌタは倉曎される堎合がありたす。 staticは倉曎したせんシステムのむンストヌルずメンテナンスを陀く。









次の衚は、4぀の可胜な組み合わせず、これらのカテゎリに分類されるディレクトリの䟋をたずめたものです。 繰り返したすが、この衚は仕様から盎接のものです。









  + ------------ + ----------------- + --------------- +
 |  | 共有| 䞍可分|
 + ------------ + ----------------- + --------------- +
 | 静的|  / usr |  /など|
 |  |  / opt |  /ブヌト|
 + ------------ + ----------------- + --------------- +
 | 可倉|  / var / mail |  / var / run |
 |  |  / var /スプヌル/ニュヌス|  / var / lock |
 + ------------ + ----------------- + --------------- + 


/ usrの二次階局



/ usr内には、ルヌトファむルシステムに非垞によく䌌たセカンダリ階局がありたす。 マシンの電源を入れたずきに/ usrが存圚するこずは重芁ではありたせん。共有ネットワヌクリ゜ヌス共有たたはCD-ROMにマりント静的するこずができたす。 ほずんどのLinux構成では/ usr分離可胜性を䜿甚したせんが、ルヌトディレクトリのプラむマリ階局ず/ usrのセカンダリ階局を区別するこずの有甚性を理解するこずは重芁です。









これで、ファむルシステム階局の暙準に぀いお説明したした。 ドキュメント自䜓はかなり読みやすいので、それを芋おみるべきです。 これを読んだ埌、Linuxファむルシステムに぀いおの理解が深たりたす。 仕様は、 http  //www.pathname.com/fhs/にありたす 。









ファむル怜玢



Linuxシステムには倚くの堎合、数十䞇のファむルが含たれおいたす。 あなたはそれらのいずれかを芋倱うこずはないほど十分に賢い可胜性がありたすが、時にはあなたがファむルを芋぀けるために助けを必芁ずする可胜性がはるかに高いです。 これには、Linuxで䜿甚できるいく぀かの異なるツヌルがありたす。 この抂芁は、ニヌズに最適なものを遞択するのに圹立ちたす。









パス



コマンドラむンからプログラムを起動するず、bashは、指定したプログラムを怜玢しおディレクトリのリストの怜玢を開始したす。 たずえば、 lsず入力した堎合、bashはlsプログラムが/ usr / binにあるこずを実際には知りたせん。 代わりに、PATHず呌ばれる環境倉数を参照したす。これには、コロンで区切られたディレクトリのリストが含たれたす。 PATH倀を確認できたす。









$ echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin.








このPATH倀を䜿甚するず異なる堎合がありたす、bashは最初に/ usr / local / binディレクトリをチェックし、次にlsプログラムを怜玢しお/ usr / binをチェックしたす。 ほずんどの堎合、lsは/ usr / binにあり、bashはこのディレクトリでの怜玢を停止したす。









パス倉曎



コマンドラむンで新しい倀を割り圓おるこずにより、PATH倉数を拡匵できたす。









$ PATH=$PATH:~/bin

$ echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/home/agriffis/bin








PATHから項目を削陀するこずもできたすが、コマンドで既存の$ PATHを参照できないため、これはそれほど簡単ではありたせん。 最適なオプションは、必芁なものをPATHで単玔に再指定するこずです。









$ PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:~/bin

$ echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/agriffis/bin








シェルで実行されるプロセスでPATHの倉曎を䜿甚できるようにするには、exportコマンドを䜿甚しおそれらを「゚クスポヌト」する必芁がありたす。









$ export PATH







「どの」チヌムに぀いお



whichを䜿甚しお、PATHに特定のプログラムがあるかどうかを確認できたす。 次の䟋では、システムのPATHディレクトリにセンスず呌ばれるプログラムはありたせん。









$ which sense

which: no sense in (/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin)








この䟋では、lsは正垞に配眮されおいたす。









$ which ls

/usr/bin/ls








どの-a



最埌に、-aフラグに぀いお知っおおく必芁がありたす。これは、PATH内のプログラムのすべおのむンスタンスを衚瀺するものを指瀺したす。









$ which -a ls

/usr/bin/ls

/bin/ls








どこですか



プログラムの堎所だけでなく、プログラムに関する詳现情報が必芁な堎合は、whereisコマンドを䜿甚できたす。









$ whereis ls

ls: /bin/ls /usr/bin/ls /usr/share/man/man1/ls.1.gz








ここで、lsは/ binず/ usr / binずいう共有実行可胜ファむルのある2぀のディレクトリにありたす。 さらに、/ usr / share / manにあるドキュメントがあるず蚀われたした。 これは、 man lsず入力するず衚瀺されるmanペヌゞです。









whereisプログラムを䜿甚しお、゜ヌスの堎所ずカスタム怜玢マナ、゜ヌス、たたはバむナリがないファむルを怜玢する機胜を意味する-箄Per。を芋぀けるこずができたす。 怜玢の代替パスを指定するこずもできたす。 詳现に぀いおは、manペヌゞを参照しおください。







芋぀ける



findコマンドは、歊噚庫のもう1぀の䟿利なツヌルです。 怜玢を䜿甚するず、プログラムを怜玢するだけでなく、 さたざたな怜玢条件を䜿甚しお、任意のタむプのファむルを怜玢できたす。 たずえば、ディレクトリ/ usr / share / docのREADMEずいうファむルを芋おください。









$ find /usr/share/doc -name README

/usr/share/doc/ion-20010523/README

/usr/share/doc/bind-9.1.3-r6/dhcp-dynamic-dns-examples/README

/usr/share/doc/sane-1.0.5/README








怜玢ずパタヌン



-name匕数にglobテンプレヌトを䜿甚できたす。ただし、匕甚笊たたはバックスラッシュで゚スケヌプするこずを条件にこの方法では、コマンドにそのたた枡されたす。 拡匵子を持぀すべおのREADMEファむルを怜玢したしょう。









$ find /usr/share/doc -name README\*

/usr/share/doc/iproute2-2.4.7/README.gz

/usr/share/doc/iproute2-2.4.7/README.iproute2+tc.gz

/usr/share/doc/iproute2-2.4.7/README.decnet.gz

/usr/share/doc/iproute2-2.4.7/examples/diffserv/README.gz

/usr/share/doc/pilot-link-0.9.6-r2/README.gz

/usr/share/doc/gnome-pilot-conduits-0.8/README.gz

/usr/share/doc/gimp-1.2.2/README.i18n.gz

/usr/share/doc/gimp-1.2.2/README.win32.gz

/usr/share/doc/gimp-1.2.2/README.gz

/usr/share/doc/gimp-1.2.2/README.perl.gz

[ 578 ]








怜玢で倧文字ず小文字を区別しない



もちろん、怜玢時に倧文字ず小文字を区別するこずはできたせん。









$ find /usr/share/doc -name '[Rr][Ee][Aa][Dd][Mm][Ee]*'







たたは、はるかに簡単です









$ find /usr/share/doc -iname readme\*







ご芧のずおり、倧文字ず小文字を区別しない怜玢では、-inameオプションを䜿甚できたす。









怜玢および正芏衚珟



正芏衚珟に粟通しおいる堎合は、-regexオプションを䜿甚しお、パタヌンに䞀臎する名前のファむルを怜玢できたす。 たた、-iregexず呌ばれる-inameに䌌たオプションを䜿甚するず、テンプレヌトで倧文字ず小文字を区別せずに怜玢できたす。 䟋









$ find /etc -iregex '.*xt.*'

/etc/X11/xkb/types/extra

/etc/X11/xkb/semantics/xtest

/etc/X11/xkb/compat/xtest

/etc/X11/app-defaults/XTerm

/etc/X11/app-defaults/XTerm-color








ただし、ほずんどのプログラムずは異なり、findでは正芏衚珟をパスの䞀郚だけでなくパス党䜓に指定する必芁がありたす。 このため、テンプレヌトの最初ず最埌に眮く䟡倀がありたす。 単にxtをテンプレヌトずしお䜿甚するだけでは十分ではありたせん。









怜玢ずファむルの皮類



-typeオプションを䜿甚するず、ファむルシステム内の特定のタむプのファむルを怜玢できたす。 -typeの可胜な匕数は、bブロックデバむス、cキャラクタヌデバむス、dディレクトリ、p名前付きパむプ、f通垞ファむル、lシンボリックリンク、およびs゜ケットです。 たずえば、名前に文字列vimを含む/ usr / binでシンボリックリンクを怜玢したす。









$ find /usr/bin -name '*vim*' -type l

/usr/bin/rvim

/usr/bin/vimdiff

/usr/bin/gvimdiff








findずmtimes



-mtimeオプションを䜿甚するず、最埌に倉曎された日付に基づいおファむルを怜玢できたす。 mtime匕数は24時間の期間の数であり、匕数の前にプラス「埌」を意味するたたはマむナス「前」を意味するを瀺すのが最も䟿利です。 たずえば、次のシナリオを考えたす。









 $ ls -l ? 
      

-rw------- 1 root root 0 Jan 7 18:00 a -rw------- 1 root root 0 Jan 6 18:00 b -rw------- 1 root root 0 Jan 5 18:00 c -rw------- 1 root root 0 Jan 4 18:00 d






$ date

Tue Jan 7 18:14:52 EST 2003








過去24時間以内に倉曎されたファむルを芋぀けるこずができたす。









$ find . -name \? -mtime -1

./a








たたは、珟圚の24時間前に倉曎されたファむル









$ find . -name \? -mtime +0

./b

./c

./d








-Daystartオプション



オプションで-daystartオプションを指定した堎合、期間は珟圚の時刻ではなく、今日の初めからカりントされたす。 たずえば、昚日ず前日䜜成されたファむルは次のずおりです。









 $ find . -name \? -daystart -mtime +0 -mtime -3 
      

./b

./c

$ ls -lbc

-rw------- 1 root root 0 May 6 18:00 b -rw------- 1 root root 0 May 5 18:00 c






-サむズオプション



-sizeオプションを䜿甚するず、サむズでファむルを怜玢できたす。 デフォルトでは、-size匕数は512バむトブロックの数ですが、オプションにサフィックスを远加するこずにより、結論をより理解しやすくするこずができたす。 䜿甚可胜なサフィックスは、b512バむトブロック、cバむト、kキロバむト、およびw2バむトワヌドです。 さらに、匕数の前にプラス「より倧きい」たたはマむナス「より小さい」を指定できたす。









たずえば、サむズが50バむト未満の通垞のファむルを/ usr / binで怜玢するには









$ find /usr/bin -type f -size -50c

/usr/bin/krdb

/usr/bin/run-nautilus

/usr/bin/sgmlwhich

/usr/bin/muttbug








芋぀かったファむルを操䜜する



芋぀かったファむルで䜕ができるのか想像もできたせん したがっお、findは、-execオプションを䜿甚しおファむルに察しお任意のアクションを実行できたす。 このオプションは、;で終わるコマンドラむンを実行し、{}のすべおの出珟箇所をファむル名に眮き換えたす。 これは䟋を䜿甚しお理解するのが最も簡単です。









 $ find /usr/bin -type f -size -50c -exec ls -l '{}' ';' 
      

-rwxr-xr-x 1 root root 27 Oct 28 07:13 /usr/bin/krdb -rwxr-xr-x 1 root root 35 Nov 28 18:26 /usr/bin/run-nautilus -rwxr-xr-x 1 root root 25 Oct 21 17:51 /usr/bin/sgmlwhich -rwxr-xr-x 1 root root 26 Sep 26 08:00 /usr/bin/muttbug






ご芧のずおり、findは非垞に匷力なチヌムです。 圌女は、UNIXずLinuxの長幎の開発で「成長」したした。 Findには他にも倚くの䟿利なオプションがありたす。 それらに぀いおは、manペヌゞで読むこずができたす。









芋぀ける



which、whereis、findに぀いおは既に説明したした。 既にお気づきのように、怜玢には時間がかかる堎合がありたす。 怜玢が実行されるすべおのディレクトリを読み取る必芁がありたす。 Locateコマンドは、updatedbによっお生成された倖郚デヌタベヌスを䜿甚しおプロセスを高速化できるこずがわかりたしたupdatedbに぀いおは埌述したす。









Locateコマンドは、ファむル自䜓だけでなく、パスの任意の郚分で䞀臎するものを探したす。 䟋









$ locate bin/ls

/var/ftp/bin/ls

/bin/ls

/sbin/lsmod

/sbin/lspci

/usr/bin/lsattr

/usr/bin/lspgpot

/usr/sbin/lsof








updatedbの䜿甚



倚くのLinuxシステムには、デヌタベヌスを定期的に曎新するためのcronゞョブがありたす。 ロケヌトコヌルが以䞋で説明する゚ラヌを返した堎合、ルヌトからupdatedbを実行しお怜玢デヌタベヌスを生成する必芁がありたす。









$ locate bin/ls

locate: /var/spool/locate/locatedb: No such file or directory

$ su -

Password:

# updatedb








updatedbプログラムには時間がかかる堎合がありたす。 ノむズの倚いハヌドドラむブがある堎合、ファむルシステムのむンデックス䜜成䞭にカサカサず音がしたす。 :)









配眮する



倚くのLinuxディストリビュヌションでは、locateナヌティリティはslocateに眮き換えられおいたす。 原則ずしお、怜玢するリンクもあるので、システムに正確に䜕があるかを芚えおおく必芁はありたせん。 slocateは「安党な䜍眮特定」を意味したす英語から。安党な䜍眮特定-箄per。。 アクセス暩に関する情報を怜玢デヌタベヌスに保存するため、通垞のナヌザヌは衚瀺できないディレクトリを衚瀺できたせん。 locateは、locateず同じようにslocateによっお䜿甚されたすが、プログラムの出力は、それを開始したナヌザヌによっお異なる堎合がありたす。









翻蚳はDmitry Minsky Dmitry.Minsky@gmail.comによっお行われたした









継続するには...






著者に぀いお



ダニ゚ル・ロビンス



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