ファイルやディレクトリの所有者や権限を管理するコマンドです。
ファイルやディレクトリのアクセス権限を変更します。
| 構文/オプション | 説明 |
|---|---|
| chmod [mode] [file] | ファイルの権限を変更 |
| -R | ディレクトリとその中身を再帰的に変更 |
| -v | 処理の詳細を表示 |
| --reference=[file] | 指定したファイルと同じ権限に設定 |
数値モード(8進数):
chmod 755 file.txt - 所有者に読み書き実行権限、グループとその他に読み実行権限を付与chmod 644 file.txt - 所有者に読み書き権限、グループとその他に読み権限のみを付与chmod -R 755 directory - ディレクトリとその中身に再帰的に権限を設定chmod 600 id_rsa - 秘密鍵ファイルを所有者のみが読み書き可能に設定chmod 440 /etc/sudoers - sudoersファイルをroot所有者とsudoグループのみが読み取り可能に設定find . -type f -name "*.sh" -exec chmod 755 {} \; - すべてのシェルスクリプトに実行権限を付与
シンボリックモード:
chmod u+x file.txt - 所有者に実行権限を追加chmod g-w file.txt - グループから書き込み権限を削除chmod o=r file.txt - その他のユーザーに読み取り権限のみを設定chmod a+r file.txt - すべてのユーザーに読み取り権限を追加chmod u+x,g+x,o-rwx script.sh - 所有者とグループに実行権限を追加し、その他のユーザーからすべての権限を削除chmod -R g+rX directory/ - ディレクトリとその中のファイルにグループ読み取り権限を追加し、ディレクトリにのみ実行権限を追加(大文字Xはディレクトリまたは既に実行権限があるファイルにのみ適用)find . -type d -exec chmod g+s {} \; - すべてのディレクトリにSGIDビットを設定(新しく作成されるファイルが親ディレクトリのグループを継承)
権限の数値表現:
これらの値を組み合わせて使用します。例えば、7(4+2+1)は読み書き実行権限すべてを表します。
3桁の数字は、左から順に「所有者」「グループ」「その他のユーザー」の権限を表します。
ファイルやディレクトリの所有者やグループを変更します。
| 構文/オプション | 説明 |
|---|---|
| chown [owner]:[group] [file] | ファイルの所有者とグループを変更 |
| chown [owner] [file] | ファイルの所有者のみを変更 |
| chown :[group] [file] | ファイルのグループのみを変更 |
| -R | ディレクトリとその中身を再帰的に変更 |
| -v | 処理の詳細を表示 |
| --reference=[file] | 指定したファイルと同じ所有者とグループに設定 |
例:
sudo chown user1 file.txt - ファイルの所有者をuser1に変更sudo chown user1:group1 file.txt - ファイルの所有者をuser1、グループをgroup1に変更sudo chown :group1 file.txt - ファイルのグループのみをgroup1に変更sudo chown -R user1:group1 directory - ディレクトリとその中身の所有者とグループを再帰的に変更sudo chown --reference=ref_file.txt target_file.txt - 参照ファイルと同じ所有者とグループに設定find /var/www -type f -exec sudo chown www-data:www-data {} \; - Webサーバーのファイルの所有者を適切に設定sudo chown -R $(whoami) ~/.config - 設定ディレクトリの所有権を現在のユーザーに変更sudo find /home/user -not -user user -exec chown user:user {} \; - ユーザーのホームディレクトリ内で所有者が異なるファイルを修正
ファイルやディレクトリのグループを変更します。
| 構文/オプション | 説明 |
|---|---|
| chgrp [group] [file] | ファイルのグループを変更 |
| -R | ディレクトリとその中身を再帰的に変更 |
| -v | 処理の詳細を表示 |
| --reference=[file] | 指定したファイルと同じグループに設定 |
例:
sudo chgrp group1 file.txt - ファイルのグループをgroup1に変更sudo chgrp -R group1 directory - ディレクトリとその中身のグループを再帰的に変更sudo chgrp --reference=ref_file.txt file.txt - ref_file.txtと同じグループに設定find /opt/app -type f -name "*.log" -exec sudo chgrp syslog {} \; - すべてのログファイルのグループをsyslogに変更sudo chgrp -R $(id -gn) ~/projects - プロジェクトディレクトリのグループを現在のユーザーのプライマリグループに変更sudo find /var/www -type d -exec chgrp www-data {} \; - Webサーバーのディレクトリのグループを適切に設定sudo chgrp -v developers *.py - すべてのPythonファイルのグループをdevelopersに変更し、詳細を表示
新しく作成されるファイルやディレクトリのデフォルト権限を制御します。
| 構文/オプション | 説明 |
|---|---|
| umask | 現在のumask値を表示 |
| umask [mode] | umask値を設定 |
| -S | シンボリックモードで表示 |
例:
umask - 現在のumask値を表示(例: 0022)umask -S - シンボリックモードで表示(例: u=rwx,g=rx,o=rx)umask 022 - umask値を022に設定(新しいファイルは644、ディレクトリは755になる)umask 027 - umask値を027に設定(新しいファイルは640、ディレクトリは750になる)umask 077 - 最も制限の厳しいumask値を設定(新しいファイルは600、ディレクトリは700になる)echo "umask 002" >> ~/.bashrc - ログイン時に自動的にumask値を002に設定(グループ内での共同作業向け)( umask 077 && touch secret.txt ) - 一時的にumaskを変更して安全なファイルを作成umask -p - シェルスクリプトで使用可能な形式で現在のumask値を表示
umaskの計算方法:
ファイルの最大権限は666(rw-rw-rw-)、ディレクトリの最大権限は777(rwxrwxrwx)です。
umask値はこれらの最大権限から「削除する」権限を指定します。
例えば、umask 022の場合:
より詳細なアクセス制御リスト(ACL)を表示・設定します。
| コマンド/オプション | 説明 |
|---|---|
| getfacl [file] | ファイルのACLを表示 |
| setfacl -m u:[user]:[permissions] [file] | 特定のユーザーに対するACLを設定 |
| setfacl -m g:[group]:[permissions] [file] | 特定のグループに対するACLを設定 |
| setfacl -x u:[user] [file] | 特定のユーザーのACLを削除 |
| setfacl -b [file] | すべてのACLエントリを削除 |
| setfacl -R | ディレクトリとその中身に再帰的に適用 |
例:
getfacl file.txt - ファイルのACLを表示setfacl -m u:user1:rw file.txt - user1に読み書き権限を付与setfacl -m g:group1:r file.txt - group1に読み取り権限を付与setfacl -x u:user1 file.txt - user1のACLエントリを削除setfacl -b file.txt - すべてのACLエントリを削除setfacl -R -m u:user1:rx directory/ - ディレクトリとその中身にuser1の読み取り・実行権限を再帰的に設定getfacl file1.txt | setfacl --set-file=- file2.txt - file1.txtのACLをfile2.txtにコピーsetfacl -d -m g:project:rw directory/ - ディレクトリ内に新しく作成されるファイルのデフォルトACLを設定setfacl -m m:rx file.txt - ファイルの有効マスクを読み取り・実行のみに制限find /shared -type d -exec setfacl -d -m g:team:rwx {} \; - 共有ディレクトリにチームのデフォルトACLを設定
他のユーザー(通常はroot)の権限でコマンドを実行します。
| オプション | 説明 |
|---|---|
| -u [user] | 指定したユーザーとしてコマンドを実行(デフォルトはroot) |
| -i | ターゲットユーザーのログインシェルを起動 |
| -s | シェルを起動 |
| -l | 現在のユーザーが実行できるコマンドを一覧表示 |
| -v | タイムスタンプを更新(認証キャッシュの延長) |
| -k | タイムスタンプを無効化(次回のsudoで再認証が必要) |
例:
sudo apt update - rootとしてaptコマンドを実行sudo -u www-data php script.php - www-dataユーザーとしてPHPスクリプトを実行sudo -i - rootのログインシェルを起動sudo -l - 実行可能なコマンドを一覧表示sudo -s - 現在の環境変数を保持したままrootシェルを起動sudo -E apt upgrade - 現在のユーザーの環境変数を保持してコマンドを実行sudo -k - sudoの認証キャッシュを無効化(次回のsudoで再認証が必要)sudo !! - 直前のコマンドをsudoで再実行sudo -u postgres psql - postgresユーザーとしてデータベースに接続sudo -g wheel command - 指定したグループの権限でコマンドを実行