Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

UNIXコマンド入門 3/3

More than 3 years have passed since last update.

●管理者ユーザになってみる

ケース:システムのログを見たい時
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}

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away