Lesson10 さまざまなコマンド

今回はUNIX編の仕上げとして、ファイル名の置き換えができる”ワイルドカード”と””正規表現”、その他、これまでに取り上げなかった便利なコマンド を紹介します。
今日の作業は ディレクトリd10を作成してそこで行います。
 
$ cd
$ mkdir d10
$ cd d10

STEP1

1  ワイルドカード


s*    任意の文字列(何文字でもよい)
?    任意の文字(1文字)

                 ls q*                         ls q?
 
$ touch qq q1 q12 q2
$ ls
q1    q12    q2    qq

$ ls q*
q1    q12    q2    qq

$ ls q1*
q1    q12

$ ls q1?
q12

2 正規表現

[a-z]     アルファベット小文字
[1-3]     1,2,3のいずれか([123]でもよい)
[A-Z]     アルファベット小文字
[A-Za-z]     すべてのアルファベット


$ ls q[1-3]
q1    q2

$ ls q[1, 3]
q1

3 特殊記号とその意味の打ち消し

'文字列' 引用符の中にあるすべての特殊記号の意味を打ち消す
"文字列"  引用符の中にあるすべての特殊記号の意味を打ち消す (ただし$で始まるシェル 変数は打ち消さな い)
\文字列 直後の1文字だけの特殊記号の意味を打ち消す


*という文字が表示したいものとする。。

$ echo *
q1 q12 q2 qq        ワイルドカードに反応して全てのファイル 名が表示されてしまう
$ echo '*'
*
$ echo "*"
*
$ echo "*"
*
 
echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/usr/X11/bin

$ echo "$PATH"
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/usr/X11/bin

$ echo '$PATH'
$PATH

$ echo Hello
\* *
Hello * q1 q12 q2 qq
注意

STEP 2  様々なコマンド

代表的な コマンドを理解しましょう。
コマンド名 用例 意味
find

(ファイル検索)
 
find ディレクトリ名 -name ファイル名 -print 第1引数で指定したディレクトリ以下に存在する、第3引数で指定したファイル のパス名を表示する。
ディレクトリ名、ファイル名に正規表現を使えるが、エスケープが必要(2の例題参照)。
find デイレクトリ名 -name ファイル名 -exec {}   \;   ファイル検索は上と同様だが、見つかったファイルに実行権があれば実行まで行う。({}には、検索で見つ かったファイル名が代入される。)
grep(ファイルの内容検索) grep パターン ファイル名 ファイルからあるパターンを含む行だけを抽出して表示する。
パターンは文字列またはパターンで指定する。
(grep の詳しい用法と、パターンの使い方については こちら を 参照)
more(または less) more ファイル名 1画面ずつファイルの内容を表示する。space(空白)キーをおすと次画面に移動する。
man man コマンド名 コマンドのオンラインマニュアルを表示する。
head head  ファイル名 ファイルの先頭だけを表示する(左の例では1行)
tail tail ファイル名 ファイルの末尾だけを表示する(左の例では1行)
sort sort  ファイル名 行単位にアルファベット順の並び替えを行う。
wc wc  ファイル名 ファイル内の行数、単語数、文字列を出力する。
diff
diff ファイル名1 ファイル名2
2つのファイルの違いを表示する
uniq
uniq ファイル名
重複する行をまとめる。
sed
一例
sed s/文字列1/文字列2/g ファイル名
ストリームエディタ。
文字列1をすべて文字列2に置換する。

awk
awk 'パターン{print $1, $2}'  ファイル名など
テキスト処理用の簡単なプログラム言語。
別途説明する。
tar
tar cvf アーカイブファイル名(*.tar) ディレクトリ名
tar xvf  アーカイブファイル名(*.tar)
アーカイブファイルを作成する


アーカイブファイルを解凍する
df
df -k など
ディスクの容量をKBで表示
du
du -s ディレクトリ名など
ディレクトリのトータルの要領を表示


$ find /usr -name cal -print
/usr/bin/cal

$ whereis cal (代表的なコマンドに限っては、これでも探せる.)
/usr/bin/cal

$ find /usr -name cal -exec {} \;
      6月 2011
日 月 火 水 木 金 土
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30


(練習)xeyesのパスを探して実行してみよう。
ヒント  /usr/X11... で始まるディレクトリの下のどこかにあります。

$ date > aaa
$ cp aaa bbb
$ cat aaa
2013年 11月22日 金曜日 11時44分03秒 JST
$ cat bbb
2013年 11月22日 金曜日 11時44分03秒 JST

************diff************
$ diff aaa bbb
$ date >> bbb

$ cat bbb
2013年 11月22日 金曜日 11時44分03秒 JST
2013年 11月22日 金曜日 11時44分28秒 JST

$ diff aaa bbb
1a2
> 2013年 11月22日 金曜日 11時44分28秒 JST
$

*****************uniq**************
$ cat aaa bbb > ccc
$ cat ccc
2013年 11月22日 金曜日 11時44分03秒 JST
2013年 11月22日 金曜日 11時44分03秒 JST
2013年 11月22日 金曜日 11時44分28秒 JST
$ uniq ccc
2013年 11月22日 金曜日 11時44分03秒 JST
2013年 11月22日 金曜日 11時44分28秒 JST

*****************sed**************
$ sed s/T/Tです/g ccc
2013年 11月22日 金曜日 11時44分03秒 JSTです
2013年 11月22日 金曜日 11時44分03秒 JSTです
2013年 11月22日 金曜日 11時44分28秒 JSTです


$ mkdir testdir
$ cd testdir
$ touch aaa bbb
$ ls
aaa    bbb
$ cd ..

(圧縮)
$ tar cvf testdir.tar testdir
a testdir
a testdir/aaa
a testdir/bbb

(testdirがアーカイブされてtestdir.tarという1つのファイルに保管された)

$ ls -l testdir.tar
-rw-r--r--  1 honda  staff  2560 11 22 11:50 testdir.tar

(元のディレクトリは消去しておく)
$ rm -r testdir
$ ls testdir
ls: testdir: No such file or directory

(解凍)
$ tar xvf testdir.tar
x testdir/
x testdir/aaa
x testdir/bbb
$ ls testdir
aaa    bbb
(復元できた)

6 コマンドの連結のいろいろ

コマンド1 (+引数・・) ;  コマンド2  (+引数・・) コマンド1の次にコマンド2を実行
コマンド1実行時にエラーが出てもコマンド2に影響しない
コマンド1 (+引数・・) &&  コマンド2  (+引数・・) コマンド1が成功したときだけコマンド2を実行する。
コマンド1 (+引数・・) ||  コマンド2  (+引数・・) コマンド1が失敗したときだけコマンド2を実行する。

7  バックグラウンドジョブ


   バッ クグラウンドジョブの投入法
コマンド (引数 あれば) &       

   関連コマンド
jobs                               現在実行中のバックグラウンドジョブを表示する
kill %ジョブ番号
      番号で指定されたジョ ブを強制終了させる。
fg   
                               バックグラウンドで走っているジョブを、フォアグラウン ドに移動する。
             (終了までほかのコマンドを受け付けなくなる)

    逆にジョブをフォアグラウンドからバックグラウンドに移動するには
        Cntl+Z(コントロールキーとzを同時に押す) で
        ジョブを一時停止の後、bgというコマンドを入力する。
例題

バックグラウンドジョブの確認のため、下記のコマン ドを打ってみましょう。
(sleep 10 ;  echo "Hello") &

どうなりましたか?

* sleep n はn 秒時間をおくという意味になります。

8 コマンドの強制終了


$ xeyes &
[2] 1128
$ ps
  PID  TT  STAT      TIME COMMAND
 1122  p1  S+     0:00.01 -bash
 1126  p2  Ss     0:00.04 bash
 1128  p2  S      0:00.03 xeyes
$ kill -9 1128

補足

 !!    
  一つ前のコマンドを実行する 
 !数字 
  数字て指定された順番で実行したコマンドを実行する(historyとあわせて用いる)
 !アルファベット文字列 
  指定されたアルファベット文字列で始まる最後に実行されたコマンドを実施する。
!$
  最後に実行したコマンドの最後の文字列

% ls /etc/hosts
% cat !$   (cat /etc/hostsと同じ意味になる
% !!  (cat /etc/hostsをもう一度実行する)
% history
  1   ls /etc/hosts
  2  cat /etc/hosts
  3  cat /etc/hosts
% !1   (ls /etc/hostsをもう一度実行する)
% !c   (cat /etc/hostsをもう一度実行する)


課題

以 下の問いの答えをサブジェクト名"lesson10 kadai"で honda@is.kochi-u.ac.jp あてに
e-mailで送信してください。実行コマンドとともに、実行結果も解答に含めてください。
また、メールの先頭には学籍番号と名前を記入してください。
これらの条件が満たされていない時受領しないことがあります。

締め切り 12/1 (木) 17:00

~/d10で行うものとする。実施前にaaa, q1,q12,q2,friendsというファイルがあることを確認してください。ない場合はコピー, touchなどで作成してください。また、不要なものがある場合は消してから実施してください。


1. 以下の操作を実行し、"実行コマンドと結果"を答えなさい

1.1 q で始まる名前のファイルを全て表示する。
1.2 q で始まり、長さが2文字で2文字目が数字の名前をもつファイルを全て表示する。
1.3 2文字目が数字で3文字以上の名前を持つファイルを一覧表示する。
1.4 2文字の名前をもつファイルを 一覧表示する。
1.5 qで始まる名前のファイルをすべて削除する。
1.6 /usrディレクトリの下にある wordsという 名前のファイルを探してパスを表示する(ヒント find)
1.7 1.6で見つけたファイルには英語の単語が入っている。以下の単語があるかどうか調べよ(ヒント grep)
         judo

         kendo
         aikido
         sado
         kado
         busido
1.8 このファイルに入ってい る単語で"ate”という文字列を含む単語の個数を答えよ。
  (ヒント、パイプ、wc)

1.9 このファイルに入ってい る 40565 番目の単語一つだけを1行のコマンドで簡単に表示せよ。(ヒント、パイプ、head 、 tail )


2.  下記のコマンドの動作の違いを説明せよ。また、このうち、自然に終了して、プロンプト がかえってくるのはどれか答えよ。(実行して確かめてもよいがなぜそうなるのか理由を理解する事。プロンプトがかえってこない場合 CNTL+Dを入力してください。)
 
(a) date     |    cat > bbb
(b) date    ;    cat > bbb
(c) date     &&     cat > bbb
(d) date     ||     cat > bbb   

3.  下記の通り目覚まし時計のような表示をさせることを考える。ここで、数字の表示はコマンド実行の10秒後に始まり、各行は1秒間隔で表示されるものとする。 また、このプロセスはバックグラウンドで動き、実行中、ほかのコマンドを実行 できるものとする。"1行の"コマンドとして実行する方法を答えよ。(ヒント:このページ7の例題)。


(コマンド入力)
(......10 秒経過後)
5................

4................
3................
2................
1.................
Wake up