この「find」コマンドは何をしますか?

この「find」コマンドは何をしますか?

私は Linux の初心者ですが、 Linux を使用しているときに次のコマンドを実行しました/root

find . -type d -exec chmod 770 {} \; && find . -type f -exec chmod 660 {} \

特定のフォルダーで実行するつもりでしたが、 であることに気付きませんでした/root

それはマシン上のすべてのファイルに影響しましたか?

答え1

十分な権限がある場合、コマンドは、実行されたディレクトリから開始して、すべてのファイルとすべてのディレクトリfindの権限ビットを再帰的に変更します。660770

/root(rootのホーム ディレクトリ)にいて、 として実行していて、root所有者が でuser:groupあると仮定すると、一部の特定のプログラムが特定のファイルまたはディレクトリについてエラーを出す場合 (たとえば、キー ベースの認証を行うときにディレクトリとファイルのアクセス許可についてエラーを出すroot:root場合) を除いて、これは大きな問題にはならないはずです。これらのエラーは手動で修正する必要があります。ssh/root/.ssh/root/.ssh/authorized_keys

また、見つかったコマンドを盲目的に実行するのではなく、まずそのコマンドが何を行うのかを確認してから実行する必要があります。

答え2

このコマンドは、コマンドを実行したディレクトリ内のすべてのディレクトリを検索し、その権限を変更します。次に、ファイルに対して同じことを行います。この場合、コマンドはディレクトリの権限を変更して、あなたには完全なアクセス権が与えられますが、他のユーザーにはアクセス権が与えられません。システムのユーザーがあなただけであれば、これは問題になりません。次に、コマンドは /root 内のファイルの権限を変更して、読み取りと書き込みのアクセスのみを許可し、実行は許可しないようにします。プログラムやスクリプトの実行で問題が発生する場合がありますが、大きな影響はありません。他のユーザーも /root 内のファイルにアクセスできません。

内部から実行できないスクリプトまたはプログラムを見つけた場合は、/rootファイルに対して次のコマンドを実行するだけです。

sudo chmod 775 filename

filenameは実行しようとしているファイルの名前に置き換えられます

システムに他のユーザーがいて、全員がディレクトリやファイルから読み取れるようにしたい場合は、コマンドを次のように少し変更して再度実行するとよいでしょう。

find . -type d -exec chmod 775 {} \; && find . -type f -exec chmod 664 {} \;

答え3

コマンドの後の最初のドットは、検索するツリーのルートですfind。したがって、コマンドを実行したフォルダーのファイルとその下のツリー全体が影響を受けます。

関連情報