UNIXコマンドの勉強 3
前回の2で、ドットインストールUNIXコマンド入門の一般ユーザ編 #6~#15までの内容をまとめたので、今回は#16~#24までの内容をまとめます。
〇 わかったこと
・コマンドを作成した後に、そのまま実行しようとしても実行ができない。
→ UNIXではコマンドを検索するディレクトリが決まっているため。
この場合は、コマンドを作成したディレクトリを検索するディレクトリに加える
必要がある。
・ echo $path → コマンドを検索するディレクトリを表示する
・ PATH変数 → UNIXでコマンドを実行する際に使われる環境変数。
(コマンド名をタイプした際に、どこにおいてある実行ファイルを
実行すべきかを探す仕組みと考える)
PATH変数と関連付けされていないディレクトリにコマンドが作成され
ても参照することができない。
・ printenv → すべての環境変数を表示する
・ exportコマンド → 指定変数を環境変数として外部公開するための印をつける
(環境変数を定義する)。
export 定義したい環境変数の名前="環境変数の中身";$PATH
$PATH → 環境変数のこと
パスを通す → exportコマンドを使って環境変数($PATH)の記述を変えてコマンド
検索パスを追加すること。
・ which → 実際に実行しようとするコマンドがどこにあるか(どのコマンドが実行され
るのか)を調べる。
・ 管理者ユーザとして作業を行う
→ suコマンド(任意のユーザに変更できる)からユーザを変更
→ su -l(root権限でログインできる、lは省略が可能)
→ パスワードを入力して、root権限に移る。(root権限になると左の$が#に変わる)
→ 例えばログファイルを見るとき、cat var/log/messages/というように入力。
(一般ユーザのログは、ls -l var/log/massages/等)
※ 管理者でログインすると変更に対する権限が広く、ミスをすると影響を受けるファイルが多いため、影響が出やすい。そこで、一般ユーザでコマンドで一部を管理者として実行できるようにするのが主に使われる。
→ root権限から一般ユーザに戻るにはexitと入力してリターンキーを押す。
・ sudo → 一般ユーザの側から指定した行動を管理者権限で実行できるようにする。
(使用には特殊設定が必要、開発環境の構築で学ぶ)
→ logファイルの編集を手元で行いたい場合
大本ファイルを壊さないために、一般ユーザ側にcpコマンドでコピーをしたいが、
一般ユーザには実行権限が与えられていないため、以下のように記述する。
sudo cp -r コピーしたいファイル名 コピー後のファイル名
ただし、コピーはできたが、このコマンドだけだとファイルは実行できない
sudo chown → change ownerの略で、所有者を変更する。
ex : sudo chown 所有者にしたい名前;ファイル名
と指定することで、ファイルが実行できるようになる。
・ wc → 行数、単語数を教えてくれる。
wc ファイル名 → 行数, 単語数, バイト数 ファイル名の順で結果が出力される。
なお、単語数について、日本語は英語と違い空白タブや区切りがないので正確な
単語数が出ない。
wc -l → 行数のみ表示
head → 先頭が何行かを数える
tail → 末尾が何行かを数える。
gerp → 特定の文字の検索をする
・ リダイレクションとパイプ
リダイレクション → コマンドの出力結果を保存、ファイルの出力内容をほかの
コマンドに引き渡す。
パイプ → コマンドの出力結果(出力内容)を別コマンドの入力に使う
※ 標準出力と標準入力
特に指定がない場合は入力はキーボード、出力は画面のことを指す。これを標準
入力と標準出力というようにとらえる。
リダイレクションは、標準出力を画面ではなく別のもの(別ファイル)に
向けること。(標準入力を別ファイルに向ける場合もある)
パイプは標準出力に出力した内容を、ほかのコマンドの標準入力につなげること。
・ リダイレクションは『>』や『<』で表す。
『>』→ 標準出力を別ファイルに向ける
『<』→ 標準入力を別ファイルに向ける
echo "date" > chd.txt → dateコマンドの出力結果をchd.txtに保存する
echo "free" >> chd.txt → freeコマンドの出力結果をchd.txtに追加保存する
(『>>』は追加で保存する際に使う)
bash < chd.txt → chd.txtに保存されたdate,freeコマンドの出力結果をbashに引き渡す
bash < chd.txt >result.txt → bashに引き渡された出力結果をresult.txtに保存する
・ パイプ は『|』(縦棒)で表す
ls -l etc|grep "php"|wc -l → etcディレクトリのリストの結果からphpという言葉を
抜き出してその行数をカウントする
"|"の前のコマンドの出力結果を次のコマンドの入力内容に引き継いでさらにコマンド
を実行する。
・ ワイルドカード → 特定条件を付ける
ls /etc/c??.* → 『etcディレクトリ内のcから始まる3文字のファイル拡張子は
指定しない』を探す。
『?』 → 文字数を指定するワイルドカード
『*』 → 特定の指定をせずすべて表示させるワイルドカード
・ find → ファイル検索をする
読み取り権限がなくエラー(許可がありません)が出るときは、sudoコマンドで実行
type -f → find type -fのように指定すると、-fならばファイルのみを探してくれる
find type -f|xargs wc -lというような指定のxargsについて
xargsはARG_MAXというマクロ定数で定義された文字列の長さ制限を回避するため、
引数が制限を超えそうになると複数回に分けて実行してくれるコマンド
・ ブレース展開
ブレースは{ }のこと。
echo {a,b,c} → abcを表示する
echo {1..10} {a..g} → 1a,1b…2a,2b...10a…10gと数式のように表示してくれる。
mkdir test && cd test → testディレクトリを作り、testディレクトリに移動を
一度に実行する。
touch app{1..5}/test{1..3} {txt,jpg,gif}
→ app1~app5ディレクトリを作り、その中にtest1~3.txt、test1~3.jpg、test1~3.gif
をそれぞれつくる
〇 まとめ
・ 管理者権限での実行にはroot権限でログインしなおすよりもsudoを使う。
・ リダイレクション、パイプについてきちんと理解する。
・ ブレース展開を覚えておくと幅広い組み合わせで複雑な処理を実行できる。
〇 疑問点
・ リダイレクションの『<』について
リダイレクトは結果を保存してそれをつなげていく処理で、
パイプは出力した結果を入力内容としてつなげていく処理と解釈した。
リダイレクションの『<』は標準入力を別ファイルに向ける処理であるが、
この処理はパイプで処理する結果と何が変わってくるのかがいまいちつかめず、
少し混乱し疑問に感じた。