Unixシェルコマンドの勉強 part 1
さて、何を隠そう、自分はUnixシェルの基本的操作すらおぼつかないので勉強がてらまとめとく。
はじめに
全4パートぐらいでひとまず基本的なコマンド周りを復習する。
対象は、
2 UNIXのコマンド http://akita-nct.jp/yamamoto/lecture/2006/5E/unix/html/node2.html
の「2.1 使用頻度の高いコマンド」に載ってた使用頻度の高いコマンド11個。
具体的には、
man, pwd, ls, cd, mkdir, rmdir, rm, cp, mv, cat, less
の11個。
part 1では、man、pwd、lsまで触れる
ちなみに、この記事のこの文を書いてる段階で自分が使える全Unixコマンドは、
cd, ls, rm, pwd, cp, mkdir, rmdir, chmod, man, which, grep
ぐらい。ちょっと死にたくなったけど頑張る。
使えるコマンドって言ってもそのほとんどが最低限しか使えてないので、調べつつ使ってみて、ここに書いてくよ。
参考資料は、ネットの海と、昔買った参考書「Amazon.co.jp: 改訂 新Linux/UNIX入門: 林 晴比古: 本」。
man
概要
マニュアルを表示する。
manualが語源
こんな感じに使う。
% man [name] % man [n] [name]
[name]にコマンドを入れる。[n]を指定すると、マニュアルの第n章から探して表示してくれる。
例えばmanのマニュアルを見たい場合には、
% man man
実行結果は、
man(1) man(1) NAME man - format and display the on-line manual pages SYNOPSIS man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file] [-M pathlist] [-P pager] [-B browser] [-H htmlpager] [-S section_list] [section] name ...
マニュアルページは矢印キーでも動けるけど
- [b] : back 前のページへ
- [f][Space] : forward 次のページへ
- [Enter] : 次の行へ
- [q] : quit マニュアルを閉じる
ココらへんを覚えておくと便利!
オプション
とりあえず参考書に載ってた2つだけ。
-f
本格的に数ページに渡るマニュアルを読みたいわけでもないし…ってときは-fオプションを付けるとコマンドの意味を一行で知ることができる。
whatisでも同じ結果が得られる。また、結果を返すのもオンラインマニュアルからでなく、ローカルのDBから探す分whatisのほうが早いみたい。
% man -f [name] % whatis man
実行結果、catが付くコマンドが複数あったので色々でてきてるけど、本来知りたいcatもその中にある。
% man -f cat cat(1) - concatenate and print files git-cat-file(1) - Provide content or type and size information for repository objects fc-cat(1) - read font information cache files
何の省略表記はわからなかったので、first-lineと覚えとく。
findと紛らわしいかな…。
-k
-kオプションを使うと、正確なコマンドを忘れたときでも、コマンドの一部から、該当するコマンドを表示してくれる。コマンドだけを検索してるのではなく、一行説明文のとこからも探してくれるので便利!
aproposでも同じ結果が得られる。これもwhatisと同様の理由で、man -kとするより早い。
% man -k chmo
% apropos chmo
実行例。
% man -f chmo chmo: nothing appropriate % man -k chmo chmod(1) - change file modes or Access Control Lists chmod(2), fchmod(2) - change mode of file lchmod(3) - change mode of file ~~~~ 省略 ~~~~
これも何の省略表記は分からないので、keywordとして覚えておく。
pwd
概要
カレントディレクトリを表示する。
語源は、print working directory
passwordとは無関係である。
使い方はシンプルで、ただ
% pwd
と打って実行するのみ。
実行結果は、こんな感じ
% pwd
% /Users/silent_bob
余談だけど、シェルの設定ファイルに現在地を常時表示するようにしとくとあまり使わなくなるコマンドな気がする。
zshを使っている今の自分の環境だと、
/Users/silent_bob% pwd
/Users/silent_bob
こんな感じになってるので、あまり使わないね。
オプション
pwdは、オプションは付けられない。
ls
概要
ディレクトリの内容を表示する。
「内容」というとちょっと分かりづらいが、要はディレクトリに入ってるファイルやらディレクトリを表示してくれるコマンド。
語源は、list segments。
listの短縮形かと思っていたらどうも違うみたい。
使い方は、
% ls [option] [path]
[option]は、-aのようなオプションが入る。
[path]は、内容を表示したいディレクトリへのパスを入れる、指定しなければカレントディレクトリのパスが自動的にそこに入る。
実行結果は、こんな感じ
%ls
Desktop Music Developer Pictures Documents
~~~~~ 省略 ~~~~~
lsでディレクトリの中身を見て、cdで別ディレクトリに移動したり、vimでファイルを開いたり、比較的起点になるコマンドなのかも。
オプション
実用的なオプションが他のコマンドに比べると、とても多い。
今のところ-Aと-lぐらいしか使ってない。
参考書に、主なオプションとして挙げられていたのは以下の10個。
実際はもっとあって気が遠くなる。
オプション | 内容 | 語源 |
---|---|---|
-a | ドットファイルも表示("."から始まるファイル) | all |
-A | -aと同じだが、"."と".."は表示しない | All |
-l | ロング形式で表示(更新日やファイルサイズ、modなど) | long |
-F | ファイル種類記号を付加 | File (?) |
-d | ディレクトリの詳細情報を表示 | directory |
-t | 最近更新された順に表示 | times |
-R | サブディレクトリの内容も表示 | Recursively |
-1 | 1行にひとずつつ表示 | 1 line |
-C | 1行に複数表示(-1を指定しなければデフォルトで-Cになる) | multi-Column |
-h | 合計サイズとファイルサイズを単位(M, K)付きの短い数字で表示 | human readable |
ここでは、教科書に載っていた複数オプションを使った例について取り上げる。
これ以外にも使いやすいオブションがあったら教えて下さい。
複数のオプション
といっても、教科書に載ってる例は全部何かに-lを加えたものしかなかった。
複数指定方法
別々にして記述する方法と、まとめて記述する方法がある。
これは別にlsに限った話じゃないだろうけどね!
下の2つの実行結果は同じ。
% ls -A -l % ls -Al
-tl
更新時刻の新しい順に、詳細情報を表示してくれるオプション。
% ls -tl total 360 -rw-r--r--@ 1 bob OFFICE\Domain Users 35117 6 25 18:28 kikyo.png -rw-r--r--@ 1 bob OFFICE\Domain Users 66573 6 25 18:28 azarashi.gif -rw-r--r-- 1 bob OFFICE\Domain Users 47554 6 25 17:39 cake.jpg -rw-r--r--@ 1 bob OFFICE\Domain Users 27405 6 23 20:29 caramel.jpg
使ってみたけど、使う場面はよくわかんなかった。
-Rl
サブディレクトリの内容を、詳細情報として表示してくれるオプション。
実行例は以下のようになる。
% ls -Rl total 80 -rw-r--r-- 1 bob OFFICE\Domain Users 574 6 25 18:25 cake.css -rw-r--r-- 1 bob OFFICE\Domain Users 510 6 26 13:24 cookie_page.html -rw-r--r-- 1 bob OFFICE\Domain Users 28862 6 25 17:43 favicon.ico drwxr-xr-x 6 bob OFFICE\Domain Users 204 6 26 11:02 img drwxr-xr-x 4 bob OFFICE\Domain Users 136 7 3 17:48 secret ./img: total 360 -rw-r--r--@ 1 bob OFFICE\Domain Users 66573 6 25 18:28 azarashi.gif -rw-r--r-- 1 bob OFFICE\Domain Users 47554 6 25 17:39 cake.jpg -rw-r--r--@ 1 bob OFFICE\Domain Users 27405 6 23 20:29 caramel.jpg -rw-r--r--@ 1 bob OFFICE\Domain Users 35117 6 25 18:28 kikyo.png ./secret: total 8 -rw-r--r-- 1 bob OFFICE\Domain Users 509 7 3 17:48 index.html
再帰的に全部出力するからサブディレクトリが多いと表示結果がえらいこっちゃになるから注意。
んー、grepとかと相性がいいのだろうか、と思ったので、
あまり使いなれないgrepでhtmlファイルだけ検索してみた結果が下のようになる。
% ls -Rl | grep -E "*\.html$" -rw-r--r-- 1 bob OFFICE\Domain Users 510 6 26 13:24 cookie_page.html -rw-r--r-- 1 bob OFFICE\Domain Users 509 7 3 17:48 index.html
おお、おお?
でも、このままだとファイルの場所が分からないのか…。
うーむ、下の例みたいに権限での検索もできるけど、他のUnixシェルコマンドにないのかそういうの。
% ls -Rl | grep -E "^-rw-r--r--" -rw-r--r-- 1 bob OFFICE\Domain Users 574 6 25 18:25 cake.css -rw-r--r-- 1 bob OFFICE\Domain Users 510 6 26 13:24 cookie_page.html -rw-r--r-- 1 bob OFFICE\Domain Users 28862 6 25 17:43 favicon.ico ~~~~~ 省略 ~~~~~
おわりに
とりあえず3つdone!
ちょっとずつ時間を見つけて書いてくよー。