地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Linux】LinuxのTip集

コマンド基本+α

省略しない名前

省略しない名前を知っているとちょっとした時に役に立つかも?

  • cd : change directory
  • pwd : print working directory
  • mv : move
  • cp : copy
  • ls : list
  • ln : link

teeでリダイレクト

リダイレクトと言えば>であるがこれだと実行中の標準出力には何もでない。 teeコマンドを使うと標準出力に表示しつつtee hoge.loghoge.logにも書き込む1。 名前の由来は標準出力を受けて2つの出力先に分けるのがアルファベットのTに似ているから。 時間がかかって実行状況を見たいmakeなどのコマンドに使うと便利

権限(Permission)について

4:読み取り可2:書き込み可1:実行可の合計値で表す。 基本のデフォルトはディレクトリは755、ファイルは644ディレクトリに実行権限(+x(1))がないとディレクトリ内で新しいファイルなどが作れない2。 数字は順にユーザー、グループ、それ以外。グループとそれ以外に書き込み権限(+w(2))がないのはumaskでマスクしているため3

bash起動時シェル

.bash_profileと.bashrcがある、ubuntuではさらに.bash_aliaseがある。(Ubuntuではシステムのユーザー用設定が.bashrcにあるためユーザーによる追加用に新たに作られたと思われる) 読み込み順は.bash_profile>.bashrc>.bash_aliase、

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

のように記述されている(.bash_aliase)も同様。 bashを打つと.bashrcを起動することができる。

よく使うオプションの意味

-P: 物理的位置(/ルート)からの表示

$ pwd -P

シンボリックリンクを多用してる時に絶対位置が知りたい時に使う。 逆は-L:論理的位置をたどるだがデフォルトなので使わない。 他のコマンドでも使えるがあまり使う余地はないと思う。

-r, --recursive

再帰的の意味でサブディレクトリを辿る。

-f, --force

強制的の意味で一定のエラーなどを無視して進む。 パッケージ管理システム等で壊れた時に強制的に進めて(治す)ときなどに使う。 rm -fとするとパーミッションがなくても強制的にファイルを削除してしまう。

-p, --preserve[=ATTR_LIST]

保存する、留めるの意味。-a, --archive=dRはサブディレクトリやリンクなどもすべてできる限りそのまま保存しようとする。 -pは所有者、パーミッション、タイムスタンプなどファイルの情報のみ保存する

-v, --verbose

言葉が多い、冗長の意味。時間がかかるコマンドを流す時に状況を把握したい時に使うといい rsyncコマンドで容量が大きいファイルを流す時は--progressをつけると何%転送したかまで表示してくれる。

-maxdepth N (find), --max-depth N (du)

findduでオプションが違うので注意、最小値のmin~もある。

$ find ./ -maxdepth N ${options}
$ du --max-depth N ./

エイリアス(別名)

aliases ${別名}="${本名}"で登録可能、unaliases ${別名}"で削除。 emacs使いだとaliases emacs="emacs -nw"などと登録しておくと便利。 Ubuntuだとls系コマンドは以下のエイリアスがあった(多分他でもある)。

alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

リソース管理系コマンド

df : ディスクの空き容量を表示する

パーティションごとの空き容量を表示する。ディレクトリごとはできない。

du : ファイル(ディレクトリ)の使用量を表示する

ps プロセス確認

ps auxとするとほぼすべてのプロセスとそれが使うリソースが得られる。 a:端末を持つ全てのプロセスを表示する。x:端末を持たない全てのプロセスを表示する。u:cpu、メモリの使用率などを追加する。である その他にも--sort等のコマンドもある4

top プロセスをリアルタイム表示

リアルタイムの表示なので端末を専有される、終了はq。詳しい使い方はこちら5。 CPUやMENは使用率(%)で表示してくれる。

vmstat6

IO、メモリ、CPUの状況など全体的な情報を得るvmstat ${秒}等で監視できる。 CPUは時間の割合らしい。

findテクニック

バックアップファイルの削除

emacsが自動保存する#*#、viの自動保存する*.swp、自動バックアップファイル*~等が作成される。これらをor-oで判定して-deleteで削除。 エイリアスclean等に登録しておくと便利かも

find \( -name "#*#" -o -name "*~" -o -name "*.swp" \) -delete

リンク切れファイル7

find -xtype l-deleteオブションをつけると削除できる。

-execオプション

-execをつけると結果を次のコマンドに引き渡せる場所は{}で指定する。 コマンドの終了はセミコロンですがシェルに解釈されないようにエスケープをつけて\;になります。 プラス+にすると{}の場所にまとめて展開されます8。一回のコマンドで終わるので高速になりますが2つめの引数で意味が変わる場合cpなどでは事故を起こす可能性があります。

$ find ./ -type f -exec chmod 644 {} \+
$ fine ./ -type d -exec chmod 755 {} \;
$ find ./ -name "*.txt" -exec cp {} \;
cp: './back_up/hoge.txt' と 'back_up/hoge.txt' は同じファイルです # findが複数回走るためコピーされたファイルも列挙される。
$ find ./ -maxdepth 1 -name "*.txt" -exec cp {} \; # -maxdepthでサブディレクトリは除外しているのでエラーはでない。

時間オプション

Tipや罠

unlinkはrmの別名9

なので実体をしてしまうと実体から削除される。rm-rを付けないとディレクトリは削除しない、ディレクトリのシンボリックリンクは削除しないのでほぼ同じ。

function unlink_aliase(){
    if [ -L $1 ]; then
        unlink $1
    else
        echo "$1はシンボリックリンクではありません"
    fi
}

alias unlink="unlink_aliase"

このように別名コマンドを作ってそれをエイリアスで上書き登録することで実体ファイルの削除は防げる。

パーティションの作成や変更

root権限が必要でファイルシステムに直接手を入れるのでデータ破損リスクはかなり高い。 fdiskを使うがコマンドラインで使いづらい10GUIだとGParted11がよく使われる。1,2回やったことがあるけれどもいずれもGPartedを使った。

extundelete: 最終手段12

Ubuntuだとaptに存在する。あくまでも最終手段、IOが多いとファイルシステム自体から消えて手遅れになるよう。