●管理者ユーザになってみる
ケース:システムのログを見たい時
cat /var/log/messages
方法1:
su substitute user というコマンドで任意のユーザに変更可能。単にユーザーを切り替えるだけで、現在のディレクトリの位置や、もろもろの環境変数をそのまま引き継ぐことになります。
su -l とすると、root ユーザーとしてログインし直してくれる。
※l は省略できるので su - で使うのが一般的
パスワードはローカル環境の場合はvagrantでok
*ただルートユーザの影響力が強いので、
マンド単位で「このコマンドは管理者ユーザーとして実行してね」という方法がよく使われる。
方法2
vagrantユーザから、コマンドの前に
sudo をつければok。
sudo を使えるようにするには特殊な設定が必要だが、
*ローカル開発環境のレッスン通りセットアップしていれば
vagrant ユーザーにはすでにそうした設定がされている。
sudo cat /var/log/messages
●chownを使ってみよう
例えば、ログファイルの解析で編集したいとき
コピーして編集したいが、権限がないのでうまく行かない。
このときも
sudo cp /var/log/messages
でいい。
ただ、編集するにはどうするか。
いちいちsudoをつけてもいいが、
ファイルの所有者を変えることができる。
chown コマンド(change owner)
sudo chown vagrant: vagrant messages messagesのユーザとグループ名をそれぞれvagrantにしてくれる。
●wc、head、tail、grepを使ってみよう
テキストを操作するためのコマンドを学ぶ
-wc(word count)...行数や単語数を教えてくれる
wc messages
-->1753 20332 144503 messages (行数、単語数、バイト数、ファイル名の順)
wc -l messages...で行数のみの表示も可能
-head と tailファイルの先頭や末尾の何行かだけを見たい、という時に使える。
head messages
最初の3行だけであれば
head -n 3 messages or head -3
(tailも同様の使い方)
-grep...ファイルの中身から特定の単語を検索するためのコマンド
grep 'etc' messages...etcを含む行を見つけることができる。
●リダイレクション・パイプを使おう
リダイレクション”>”・・・あるコマンドの結果をファイルに保存したり、ファイルの内容を他のコマンドに
渡すことができる。
echo "date" > cmd.txt
-->date が cmd.text に書き込まれる
*>では上書き、>>では末尾に追記してくれる。
<を使うとファイルの内容をコマンドに渡すこともできる。
*dateもBashコマンドなので、bash に今回渡して実行してみる、
bash < cmd.txt とすると、date の出力結果が表示される。
またこの結果を別のファイルに保存することもできる。
bash < cmd.txt >result.txt
*result.txtに出力結果が保存される。
パイプ・・・コマンドの結果をファイルではなく別のコマンドに渡す
ls -l /etc | grep "php"
*ls -l/etc の結果の中からphpの含まれる行を抜き出す。
またパイプは複数組み合わせることもでき、
ls -l /etc | grep "php" | wc -l
とすると結果の行数を返してくれる。
リダイレクション、パイプにより複雑なことも1行でかけるのがポイント
●ワイルドカードを使おう
特定の条件をつけて操作をする場合に有効
例; ls /l/etc*.conf
*etcフォルダの中でも.confのものだけ引っ張ってきてくれる。
また、上記の*マークは何文字でも、という意味だが、なんでもいいから一文字だけ、
という場合は?マークを使う、
例; ls /etc/c??.*
*cの後に二文字続き、その後に.があって任意の拡張子になる結果だけ表示される。
●find , xargs を使おう
ケース;/etc フォルダからhttp に関する設定ファイルを探したい時
find /etc -name "http*"
*ファイル名で指定したい時はname を使う。
許可がない時はsudoを使うことは忘れない。
find にはたくさんのオプションが用意されており、
ディレクトリを除いてファイルだけを検索したい場合は、
find /etc -name "http*" -type f でおk。
さらにそのファイルに対して別のコマンドを実行したい場合は、
find /etc -name "http*" -type f -exec wc -l {} +
{}のなかに検索結果を入れて実行してくれる。
この場合、行数がカウントされる。
xargs;findの検索結果に限らず、複数の結果をコマンドに流し込める、
上と同じ処理をしたい場合、pipeを使って以下のような書き方もできる。
find /etc -name "http*" -type f | xargs wc -l
●ブレース展開を使おう
bashのブレース{}展開
bashでは、{}のなかにカンマ区切りで値を入れると、それを展開してくれる。
例えば echo {a,b,c} とすると、 a b c が展開される。
連番も表現できて echo {1..10} とすると 1 2 3 .....
アルファベットを組み合わせたい時は、
echo {1..10}{a..g} とすると 1a 1b 1c....と展開してくれる。
*2つのコマンドを連続して実行したい時、
一つのコマンド && もう一つのコマンドで一気に二つを実行してくれる。
例:
mkdir app {1..5} app の1から5までが作られる
touch app{1..5}/test{1..3}{.txt,.jpeg,.gif} でappfileのなかにtest1 から3でそれぞれの拡張子がついたファイルができる。
このできたファイルの中でjpeg とgifだけ削除したい。 そんな時もプレース展開が使える。
rm app{1..5}/test{1..3}{.jpeg,.gif}