特定ユーザが所有するファイルのオーナーを一括変更する

特定ディレクトリ以下のファイルのオーナーを一括で変更する場合は、chownコマンドの-Rオプションを使います。

$ chown -R new_user dir_name

グループを変更する場合はchgrpコマンドを使います。

$ chgrp -R new_group dir_name

全ファイルが対象ではなく、ディレクトリの中で特定のユーザが所有するファイルのみを対象としたい場合は、findコマンドとxargsコマンドを組み合わせることで実現できます。

$ find dir_name -user old_user | xargs chown new_user

実際には事前にfindコマンドだけで実行して、対象となるファイルのリストが実際に意図したものになっているか確認しておくとよいでしょう。

$ find dir_name -user old_user

グループを変更する場合も同様です。

$ find dir_name -group old_group | xargs chgrp new_group

locateコマンドのインストール

minimalでOSをインストールすると、システム内のファイルを素早く検索してくれるlocateコマンドはインストールされていない。
locateはmlocateパッケージに入っているのでyumでインストールする。

yum install mlocate

mlocateをインストール後にlocateを実行してもmlocate.dbが生成されていないのですぐには使えない。
そこで、updatedbを実行してmlocate.dbを生成する。

# locate main.cf
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory

これでlocateコマンドが使えるようになった。

# updatedb
# locate main.cf
/etc/postfix/main.cf
/usr/libexec/postfix/main.cf
/usr/share/doc/postfix-2.6.6/main.cf.default

シェルのプロンプトにフルホスト名を表示する

ホスト名にwww.example.comなどとつけてCentOSを利用するとログイン時のプロンプトが

[www ~]$

の様になり複数台で運用しているとどのサーバかわからなくなる。
そこでフルホスト名をコマンドプロンプトに表示するようにするために
Bashの環境変数PS1を変更する。

vi /etc/bashrc
---------------------------------
export PS1="[\H \W]\\$ "
---------------------------------

次回ログイン時から反映される。
すぐに反映させたい場合は.(ドットコマンド)を実行する

. /etc/bashrc

Linux 文字化けで消せないファイル・ディレクトリを消す

日本語のファイルやディレクトリが文字化けてしまい、ファイル名、ディレクトリ名を指定できなくなりコマンドラインから削除できない場合がある

各ファイル、ディレクトリにはi-node番号があるのでls -iで調べてfindコマンドに渡す

ls -i
-------------------------------
50869301 text.txt 238939076 ?V?????t?H???_
-------------------------------
find . -inum 238939076
-------------------------------
./?V?????t?H???_
-------------------------------
find . -inum 238939076 -exec rm -rf {} \;

【参考サイト】
UNIX で消せないファイルを消す
http://kapi.jp/kapi_blog/62

findで指定サイズより大きいもしくは小さいファイルを探す

肥大化したログファイルやユーザがアップロードした動画ファイルなど、パーティションを圧迫しているファイルを探したい場合には、findコマンドのsizeオプションが便利だ。

findコマンドのsizeオプションの引数にファイルサイズを指定することで、特定ディレクトリ以下からファイルサイズを条件に一致するファイルを探すことができる。

指定したファイルサイズより大きいファイルを探す場合は「+」を、
小さいファイルを探す場合は「-」をファイルサイズの前に指定する。

単位はkBが「k」、MB「M」、GB「G」などに対応している。
単位をつけない場合はデフォルトのブロック(512バイト)になる。
(ただし、CentOS 6 以下のバージョンでは、「M」, 「G」に対応していないので、大きいファイルサイズを指定する場合でも「k」を使う必要がある。)

# 100MBを超えるログファイルを探す
find /var/log -size +100M 

# ホームディレクトリで1GBを超えるファイルを探す
find /home -size +1G

# カレントディレクトリ以下で 100kB未満のファイルを探す
find . -size -100k

`b’ for 512-byte blocks (this is the default if no suffix is used)
`c’ for bytes
`w’ for two-byte words
`k’ for Kilobytes (units of 1024 bytes)
`M’ for Megabytes (units of 1048576 bytes)
`G’ for Gigabytes (units of 1073741824 bytes)

find(1)

ちなみに小さいファイルを探すときに、-size -1k-size -1M-size -1Gなどを指定しても何も表示されないので注意すること。
(1バイトのファイルでも指定した単位に丸められて1未満に該当しなくなるため。)

bear in mind that the size is rounded up to the next unit (so a 1-byte file is not matched
by -size -1M).

find(1)

Linux UNIX ソート sort コマンド

sortコマンドは入力にフィルタをかけてソートした結果を出力することができます。
CentOS、Linuxを含むUNIX系OS全般で利用できます。
sortコマンドは1行プログラミングに大変便利です。
デフォルトではアルファベット順でソートですが、-nオプションで数値として処理することができます。

たとえばPSコマンドの出力をソートする場合は次のようになります。

ps | sort (正順でソート)
ps | sort -n  (数値としてソート)
ps | sort -r  (逆順でソート)
ps | sort -rn  (数値として逆順でソート)

デフォルトのsortコマンドで数値が並んでいる表示をソートしようとするとテキストで評価されるため目的の結果が得られません。
そんなときは数値としてソートする「-nオプション」をつけてください。

拡張子.bz2のファイルを圧縮・解凍

解凍専用のbunzip2をつかってbz2ファイルを解凍(gunzipと同様の利用方法)

bunzip2 filename.bz2

圧縮はbzip2をつかって-zオプションで圧縮

bzip2 -z filename