Linuxで実行するために実行ファイルの前に常に「./」を入力する必要があるのはなぜですか?


8

egxcをコンパイルするとき:

GCC x.c -o x

結果を実行するには、次のように記述する必要があります。

./x

そしてただタイプする:

x

このメッセージで失敗します:

x:コマンドが見つかりません

つまり、Linuxは現在のディレクトリを検索しません。この動作の背後にある合理的な問題はありますか(確かにあります)?


それはルールだからです。
ダニエルRヒックス

@DanH:次に「ルール」を説明してください。
Torben Gundtofte-Bruun

回答:


13

デフォルトでは、現在の作業ディレクトリはPATH変数に含まれていないためです。

これはセキュリティ/利便性の測定です。たとえばcdlsなどのバイナリ/スクリプトが現在の作業ディレクトリにある場合、それらがデフォルトで実行されていると非常に煩わしいでしょう。


4
答えは部分的にのみ正しいです。現在のディレクトリが最後のオプションとしてのみ使用された場合、問題は取り囲まれる可能性があります。その後、標準のツールが最初に見つかります。
ユーザー不明

1
また、シェル組み込みコマンドはも優先を取る(あなたが入力したとき、すなわちcdbash、それはbashのにルーチン内部を実行していない/bin/cdあなたは.` `を先頭に追加しない限り)
LawrenceC

3
オリジナルの* nixセキュリティー対策の1つであり、システム割り当てのパスコマンド内にあるシステムまたは管理者がコンパイルしたバイナリーを強制的に実行します。ヘルプデスクの質問にrootとしてログインし、ユーザーディレクトリに移動してlsと入力し、ユーザーが残した爆弾を彼らがロードしたのを見つけるほど、悪いことはありません。
Fiasco Labs

7
@userunknown:初めてタイプslすると、同じ問題が発生します。信頼できるディレクトリのみが存在する必要が$PATHあり、対話型シェルの信頼できるディレクトリに.決してなりません

2
@基本:rm -r target私が意味するときに入力した場合rm -f target、通常違いはありません。私が入力した場合rm -f target、私が意味する場合rm -r target、どちらかに違いまたは除去あからさまな失敗はありません。さらに、私が考えるたびに、私は入力する前にrm特に私が追加している場合-fか、-rまたはグロブ-それは、その性質上危険なコマンドです。誰もが考える前に考える前にls

1

これは、現在のディレクトリが$ PATH変数に含まれていないことを意味します。


1

これを修正するには、現在のディレクトリ(単一のドットで表される)をPATH環境変数に追加します。
その方法は、使用しているシェルによって異なります。
bashを使用している場合は、ホームディレクトリのファイルに行export PATH=$PATH:.を追加でき .bashrcます。
cshまたはtcshを使用している場合set PATH = ($PATH .)は、ホームディレクトリの.cshrcファイルに行を追加 します。
私見、ホームデスクトップコンピューターの場合、これは許容できることです-セキュリティの観点から。


追加できるかわかりませんでした。ただし、PATHを使用すると、セキュリティが低下します。
Yasser Zamani
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.