[Litz' UNION] > [Dal Segno] > [UNIXたん] > [その2] // [その1][その3]

UNIXたん その2

タイピングの基本

以下は、キーボードを使ったタイピングの基本です。

(1) 打つ時にキーボードを見ない(タッチタイプ)
いわゆる「ブラインドタッチ」です。
自動車の運転で、左折時にいちいち左後輪を見ないように
ピアノ奏者がいちいち手元を見ないように
いちいちボタンを見ず、画面だけを見てpop'n music をやるように
それと同じく、キー位置を指の感覚で把握しておきましょう。

(2) キーごとに、打つ指は決まっている
(3) キーを叩いていない間はホームポジションで待機

適当に検索すれば画像にもありつけますが、軽く解説しておきます。
左手は[A][S][D][F]、右手は[J][K][L][;]に置きます。
人差指を置くキー([F][J])に小さな突起があるので、構えるのは容易でしょう。
ホームポジションを基点として\方向がそれぞれの担当するキーです。
(例えば、右手薬指の担当は[9][O][L][.])
(人差指は、左:[F][G]の列、右:[H][J]の列。それぞれ2列ずつ担当)

常にホームポジションを意識していれば、そのうち慣れます。

長時間のタイピングは、人体に影響(障害)を及ぼすことがあります。
ほんまかいな
なので、それを考慮して作られた「良い」キーボードを買いましょう。

って言われて簡単に買い替える人いませんよね

雑多なコマンド

よく使われるコマンドをここで幾つか紹介します。

clear

画面をクリアします。無害

画面が見づらくなってきたら、一旦clearして見やすくしましょう。
それだけのこと

date

現在の時刻を表示します。無害

> date
Sat Jun 5 15:11:29 JST 2004

-u オプションを付けると、世界標準時で表示します。

> date -u
Sat Jun 5 06:11:29 GMT 2004

+ の後に文字列を入れてフォーマットを指定することができます。書式は以下

年 %Y(4桁)・%y(2桁)
月 %m(2桁)・%h(英語)
日 %d(2桁)
時 %H
分 %M
秒 %S
改行 %n
タブ %t
「%」 %%

> date +"%Y/%m/%d%t%H:%M:%S"
2004/06/05 15:11:29

cal

カレンダーを表示します。無害

引数を1つ与えると、その年のカレンダー(1〜12月)を表示します。
引数を2つ(m, n)与えると、n年m月のカレンダーを表示します。
-y オプションを付けると、今年のカレンダー(1〜12月)を表示します。
-j オプションを付けると、日付表示が「1月1日からの日数」に置き換わります。

bc

計算機。簡単なプログラミング機能もあります。ほぼ無害

詳細は他サイトを見るなり実際に使ってみるなりして学習して下さい。
"quit" と入力するか、[Control]+[d] で終了します。

パイプを使って、標準入力から計算を実行させることもできます。

> echo "((1+2)/3*4)^5" | bc
1024

script

コンソールへの出力をファイルに書き出します。ほぼ無害

"script" を実行してから "exit" を実行するまでのキータイプ・出力・script開始/終了時刻をファイルに書き出します。

引数(ファイル名)を与えると、出力ファイル名を指定することができます。
-a オプションを付けると、追加モードで書き込みます。(デフォルトでは上書き)

※キーボードから入力した制御文字([ENTER][BS]など)もきっちり記録されます。
※引数を指定しない場合、 typescript というファイルに保存されます。

lpr

印刷します。ほぼ無害

引数(ファイル名)を与えると、そのファイルを印刷します。
-#(数字) オプションを付けると、その枚数だけ印刷します。
-P [プリンタ名] オプションを付けると、指定したプリンタで印刷します。

a2ps

テキストファイルをPostScript形式(ようは印刷可能形式)に変換します。ほぼ無害

PSファイルとして保存する場合はリダイレクションを用います。
また、そのまま印刷してしまう場合はパイプを用いて "lpr" に繋げます。

引数(ファイル名)を与えると、そのファイルを変換します。
-p オプションを付けると、1枚1ページで印刷します。(デフォルトでは2ページ)

banner

大きい文字を出力します。無害

自動生成AAのようなでっかい字が右に倒れた形で表示されます。
よく判らない場合は、ウィンドウを最大化し、首を右に傾けたら読めます。
このコマンドが何に役立つのかは謎w

引数(文字列)を与えると、その文字列を表示します。

lynx

テキストブラウザ。無害

引数(URL)を与えると、そのページを表示します。
-source オプションを付けると、ソースを表示します。

w3m

webブラウザ。無害

ファイル操作

コンピュータを用いた作業といえば、基本的にファイル操作が絡んできます。
(web閲覧とかできるけど、何が悲しゅうてUNIXでry)
よって、UNIXを使う上ではファイル操作が重要になってきます。

Explorer(Win)やFinder(Mac)を使ってみると解りますが、ファイルシステムとは
「ディレクトリ(フォルダ)の中にディレクトリやファイルが入っている」
という構造をしていることに気付くはずです。
ディレクトリを節、ファイルを葉として主従関係を図に書くと、木の枝のようになります。
従って、このような構造を木構造といいます。
木構造の最上位にあるディレクトリをルートディレクトリといいます。

Explorerを使っていると「今どのディレクトリにいるか」というのを意識せざるを得ません。
Finderなら環境設定で「常に新規ウィンドウとして開く」のチェックを外しましょう。
同じことです。
このように、今いるディレクトリのことをカレントディレクトリといいます。

さて、ルートディレクトリからあるファイルまでの道筋は一意です。
そのファイルまでの道筋をパス(ファイルパス)といいます。

【絶対パス】
ルートディレクトリを起点としてパスを示す方法。従って"/" で開始する。

【相対パス】
カレントディレクトリを起点としてパスを示す方法。

URLもパスの一種と見ることができます。
このwebページから「QMA問題集」への相対パスは「../qma/index.cgi」です。
因に「..」は親ディレクトリ、「.」はカレントディレクトリを表します。

例えば、カレントディレクトリが「/dir1/dir2/dir3」とします。
目的のファイルがdir4の中にあるfileだとしましょう(dir4はdir1の中にある)。
このとき、fileの絶対パスは「/dir1/dir4/file」相対パスは「../../dir4/file」となるわけ。

pwd

カレントディレクトリを教えてくれます。無害

> pwd
/Users/litz/Desktop

cd

カレントディレクトリを変更します。無害

単独で実行すると、ホームディレクトリに移動します。
引数(ディレクトリ名)を与えると、そこに移動します。
- を引数に与えると、1つ前の(さっきいた)ディレクトリに移動します。

> pwd
/Users/litz/Desktop
> cd ../
> pwd
/Users/litz

pushd

カレントディレクトリを変更します。無害

挙動は "cd" と同じですが、こいつは移動先のディレクトリを覚えてくれます。
この記憶をどう利用するかというのは下記参照

popd

pushdで記憶している最新のディレクトリに戻ります。無害

そもそもこいつらは配列(リスト)操作の"push" "pop" の仲間です。
 push…配列の末尾に要素を追加する。
 pop…配列の末尾の要素を取り除く。

"pushd" "popd" の場合も同じように
「記憶したディレクトリのリスト」というものがあって、
そのリストに対し、それぞれ対応する操作をしているものと考えて良いです。

ちなみに、 "shiftd" "unshiftd" なるコマンドはありません。

ls

ファイル・ディレクトリの一覧を表示します。無害

> ls
Desktop Documents Library Movies Music Pictures Public Sites

引数(ファイルorディレクトリ名 ファイルorディレクトリ名 …)を与えると、指定したファイルorディレクトリ内のファイルの一覧を表示します。
-a オプションを付けると、 "." から始まるファイル(隠しファイル)も表示します。 "." ".." は表示しません。
-A オプションを付けると、 "." から始まるファイル(隠しファイル)も表示します。 "." ".." も表示します。
-1 オプションを付けると、1行につき1つのファイルorディレクトリを表示します。
-C オプションを付けると、マルチカラムで表示します。
-l オプションを付けると、詳細な情報を表示します。
-T オプションを付けると、タイムスタンプが詳しくなります。(要-l)
-o オプションを付けると、ファイルフラグも表示します。(要-l)

> ls -l
total 0
drwxr-xr-x 49 litz staff 1666 Jun 5 15:58 Desktop
drwx------ 5 litz staff 170 Oct 5 2003 Documents
drwx------ 34 litz staff 1156 Apr 12 14:58 Library
drwx------ 3 litz staff 102 Oct 18 2002 Movies
drwx------ 5 litz staff 170 Oct 5 2003 Music
drwx------ 5 litz staff 170 Nov 10 2003 Pictures
drwxr-xr-x 5 litz staff 170 Oct 5 2003 Public
drwxr-xr-x 6 litz staff 204 Oct 5 2003 Sites

-F オプションを付けると、ファイルタイプの識別子がファイル名の後に付きます。

/ ディレクトリ
@ シンボリックリンク
* 実行ファイル

-L オプションを付けると、シンボリックリンクのリンク先の情報を表示します。
-R オプションを付けると、サブディレクトリの中身も再帰的に表示します。
-c オプションを付けると、ファイル変更時刻の代わりに属性変更した時刻を表示します。
-u オプションを付けると、ファイル変更時刻の代わりに最終アクセス時刻を表示します。
-r オプションを付けると、ファイル名の逆順にソートして表示します。
-s オプションを付けると、システムブロック使用量(512B単位)も表示します。
-k オプションを付けると、システムブロック使用量(1kB単位)も表示します。(要-s)

touch

ファイルのタイムスタンプを変更します。ほぼ無害

引数(ファイル名)を与えると、そのファイルのタイムスタンプを変更します。
-t #(時刻) オプションを付けると、任意の時刻に合わせることができます。(デフォルトでは現在時刻)

タイムスタンプを12月13日11時57分に変更する場合は
> touch -t 12131157 file

2001年12月13日11時57分なら
> touch -t 200112131157 file

2001年12月13日11時57分40秒なら
> touch -t 200112131157.40 file

といった感じにします。

-f オプションを付けると、ファイルのパーミッションを無視して変更します。
-a オプションを付けると、最終アクセス時刻を変更します。
-m オプションを付けると、最終更新時刻を変更します。

指定されたファイルが存在しない場合、新たにファイルが作成されます。
このような挙動から、touchは「ファイルを新規作成する」コマンドとして使われることが多いようです。

-c オプションを付けると、指定されたファイルが存在しなくても新規作成しません。

mv

ファイルの移動・名前変更を行います。やや有害

基本的には引数を2つ与えます。挙動は以下の通り

以下このように表記します。
file:存在するファイル dir:存在するディレクトリ xxx:存在しない名

(1) mv file1 file2…file1の名前をfile2に変更します。もとのfile2はさっぱり削除
(2) mv file dir…fileをdirの下に移動します。
(2') mv file1 file2... dir…複数のファイルを同時にdirの下に移動します。
(3) mv file xxx…fileの名前をxxxに変更します。
(4) mv dir1 dir2…dir1をdir2の下に移動します。
(5) mv dir xxx…dirの名前をxxxに変更します。

ファイルをリネームする場合は、くれぐれも名称に注意しましょう。

> ls
file1
> mv file1 file2
> ls
file2

-i オプションを付けると、上記(1)の場合に"overwrite file2?(y/n)"と確認してくれます。
-f オプションを付けると、上記(1)の場合の確認がありません(デフォルト通り)。
-R オプションを付けると、上記(4)の場合にサブディレクトリ以下のファイルも再帰的に移動します。

rm

ファイル・ディレクトリを削除します。有害

引数(ファイル名)を与えると、そのファイルを削除します。
複数の引数(ファイル名 ファイル名...)を与えて、一括削除することもできます。
また、ワイルドカードによる一括指定も可能です。

> ls
1.txt 2.txt 3.rtf
> rm *.txt
> ls
3.rtf

-i オプションを付けると、本当に削除していいか確認してくれます。
-f オプションを付けると、パーミッション無視で削除します。

引数(ディレクトリ名)を与えると、「ファイルじゃねーぞ」と文句を言われます。
ディレクトリの削除には "rmdir" を使うのが基本。
但し、-r オプションを付けると、そのディレクトリごと削除してくれます。

ln

リンクを張ります。ほぼ無害

引数を2つ(file1 file2)を与えると、file1のハードリンクfile2を作成します。
このときfile1は存在するファイル、file2は存在しないファイル名を指定する必要があります。
ディレクトリのハードリンクは作成できません。悪しからず

ハードリンクとは、ファイルの複製のようなものですが
同じi-node(ファイル識別番号)を持ちます。つまり実態は同一のファイルです。
従って、file1に施した変更はfile2にも反映されます。
但し、file1を削除したらfile2の実体が無くなっちゃってる
…なんていうことはありません。
なぜならリンク数があーだこーだという話になるんですが省略

-s オプションを付けると、ハードリンクでなくシンボリックリンクを張ります。
このとにfile1は必ずしも存在している必要はありません。
また、ディレクトリに対するシンボリックリンクを作成することもできます。

シンボリックリンクとは、
Windowsでいう「ショートカット」、Macintoshでいう「エイリアス」です。
シンボリックリンク自体はファイルではなく「別名」のようなもの

-f オプションを付けると、リンクの張り替えができます。
そもそもfile2は存在しないファイル名を指定しなければなりませんが、
-fとすることにより、存在するfile2を指定しても文句一つ言わずリンクを生成してくれます。

> ln file1 link
> ln file2 link
ln: link: File exists
> ln -f file2 link

mkdir

カレントディレクトリの下にディレクトリを新規作成します。無害

引数(dir)を与えると、ディレクトリdirが作成されます。
複数のディレクトリ名(dir1 dir2...)を与えて、一括作成することもできます。
"../dir" など、上位ディレクトリの中に新規作成することもできます。
もちろん "dir1/dir2" など、下位ディレクトリの中に作成することができます(dir1が存在する場合に限る)

-m #(permission) オプションを付けると、パーミッションを指定してディレクトリを作成することができます。
-p オプションを付けると、再帰的にディレクトリを作成することができます。

> mkdir dir1/dir2
mkdir: dir1/dir2: No such file or directory
> mkdir -p dir1/dir2

これでdir1が作成され、その下にはdir2ができています。

rmdir

ディレクトリを削除します。ほぼ無害

引数(dir)を与えると、ディレクトリdirを削除します。
dirの中にファイルやサブディレクトリがあるとエラァが返ってきます。

中のファイル諸共削除する場合は、差詰め "rm -rf" といったところ。

cat

ファイルの内容を表示したり、複数のファイルを連結したり。ほぼ無害

引数(file)を与えると、ファイルfileの内容を表示します。
複数の引数(file1 file2...)を与えると、複数のファイルを連結して表示します。
splitで分割したファイルを結合するのに使えます。

但し、大容量ファイルを開くと画面が流れてしまうので
大きなファイルを覗くときはmorelessなどのページャがお勧め。

リダイレクションを用いて、ファイルを結合するのに利用することが多いようです。

more

ファイルの内容を表示します(ページャ)。無害

引数(file)を与えると、ファイルfileの内容を表示します。
catででっかいファイルを覗いたとき、1画面分に収まりきらず画面が流れてしまいます。
そのような場合、これらのページャを使えば1ページずつ表示してくれて便利です。

less

ファイルの内容を表示します(ページャ)。moreよりも高機能。無害

引数(file)を与えると、ファイルfileの内容を表示します。
-m オプションを付けると、現在行のパーセンテージを表示します。
-M オプションを付けると、現在行のパーセンテージと行数表示します。
-n オプションを付けると、行数計算をしません。
-N オプションを付けると、各行の先頭に行番号を表示します。
-o file(ファイル名) オプションを付けると、ファイルにコピーします。
-O file(ファイル名) オプションを付けると、ファイルに上書きコピーします。
-n オプションを付けると、行数計算をしません。
-V オプションを付けると、バージョンを表示します。
-z#(数) オプションを付けると、[f][b]キーでスクロールする行数を指定できます。

less -z4 file とすれば4行ずつのスクロール、
less -z-4 file とすれば[画面の縦幅 - 4]行ずつのスクロールになります。

wc

ファイルの行数・単語数・サイズを表示します。無害

引数(file)で与えられたファイルfileについての情報を表示します。
-l オプションを付けると、行数のみを表示します。
-w オプションを付けると、単語数のみを表示します。
-c オプションを付けると、サイズのみを表示します。

> wc extra1.html
  0  1928  36462  extra1.html

Mac OS の改行コードではこんなもんです(0行かよ)。

du

カレントディレクトリ以下のディスク使用量を再帰的に計算します。ほぼ無害

※ルートディレクトリでこれをやっちまうと、かなりの行数になるので注意。

-L オプションを付けると、シンボリックリンクも計算します。
-a オプションを付けると、各ファイルも表示します。
-k オプションを付けると、使用量を1kB単位で表示します。(デフォルトではブロック(512B)単位)
-s dir(ディレクトリ) オプションを付けると、そのサブディレクトリは表示しません。

nkf

文字コードを変換します。無害

-j オプションを付けると、JISコードに変換します。
-s オプションを付けると、Shift_JISコードに変換します。
-e オプションを付けると、EUCコードに変換します。
-f #(数) オプションを付けると、1行あたり#文字に整形します。

tar

アーカイバ。ほぼ無害

読み方は「たー」。以下、使用例を載せます。

tar tvf ***.tar → ***.tarの中のファイル一覧を表示します。
tar ztvf ***.tgz → ***.tgz(または***.tar.gz)のファイル一覧を表示します。
tar xvf ***.tar → ***.tarの中身を展開します。
tar xvf ***.tar file → ***.tarの中のfileのみを展開します。
tar zxvf ***.tgz → ***.tgz(または***.tar.gz)の中身を展開します。
tar cvf ***.tar dirまたはfile → dir以下(またはfile)を***.tarにまとめます。
tar zcvf ***.tgz dirまたはfile → dir以下(またはfile)を***.tgzにまとめます。
tar rvf ***.tar dirまたはfile → dir以下(またはfile)を***.tarに追加します。

-C dir(ディレクトリ) オプションを付けると、指定したdirに展開します。

whatis

オンラインマニュアルから検索します。無害

引数(文字列)で指定された文字列を検索し、マッチしたマニュアルの一覧を表示します。
man -f ***と等価。

whereis

コマンド・ソース・マニュアルのフルパスを検索して表示します。無害

find

ファイルを検索します。ほぼ無害

find 検索開始ディレクトリ 検索条件 コマンドの形で使います。

【検索条件】
-name *** → 検索するファイル名。
-atime [+-]#(数) → #日前[+:以前, -:以後]にアクセスしたファイル。
-ctime [+-]#(数) → #日前[+:以前, -:以後]に修正したファイル。
-inum #(数) → 指定したi-node。
-newer file → fileよりタイムスタンプが新しいもの。
-type * → ファイルの種類。(d:directory, f:file)
-and → 検索条件の論理積。
-or → 検索条件の論理和。

【コマンド】
-print → ファイルの一覧を表示。
-ls → ファイルの詳細を表示。
-exec → ファイルを引数としてコマンドを実行。
-ok-execと同じだが確認を求める。

> find . -type d -and -ctime +5 -print
.
./qma1
./qma1/1
./qma1/10
./問題データA
./問題データB


上記は5日以上前に修正したディレクトリをカレントディレクトリから検索した例。

diff

ファイルの違いを表示します。無害

2つの引数(file1 file2)で指定されたファイルを比較し、違いを表示します。
引数にはディレクトリを指定することもできます。
-r オプションを付けると、指定したディレクトリ以下を再帰的に比較します。
-q オプションを付けると、ファイルが同じか否かだけ答えてくれます。
-b オプションを付けると、空白やタブを無視します。
-i オプションを付けると、大文字・小文字の違いを無視します。
-B オプションを付けると、空行を無視します。

このコマンドはパッチの作成にも使われます。(ここでは解説しません)

ファイル保護機構

UNIXはマルチユーザシステムです。自分以外にもユーザが山ほどいます。
そこで、自分のファイルが他人によって読み書きされることを避けるために
ファイルやディレクトリにパーミッション(モード)という許可設定を施すことができます。
ここでの設定は、「誰に」「どんな操作を」許可/禁止するかというものです。

「誰に」の部分は「所有者」「ファイルグループに属する人」「他人」の3種類。
「操作」の部分は「読み込み」「書き込み」「実行」の3種類。

ls -l とすると、ファイルの詳細な情報を表示することができます。
ここで左端の10文字に注目しましょう。
これはファイル・ディレクトリのパーミッションを表しています。

1文字目 … ディレクトリ(d)かファイル(-)か
2文字目 … 所有者に対する読み込み許可(r)/禁止(-)
3文字目 … 所有者に対する書き込み許可(w)/禁止(-)
4文字目 … 所有者に対する実行許可(x)/禁止(-)
5文字目 … グループに対する読み込み許可(r)/禁止(-)
6文字目 … グループに対する書き込み許可(w)/禁止(-)
7文字目 … グループに対する実行許可(x)/禁止(-)
8文字目 … 他人に対する読み込み許可(r)/禁止(-)
9文字目 … 他人に対する書き込み許可(w)/禁止(-)
10文字目 … 他人に対する実行許可(x)/禁止(-)

chmod

ファイル・ディレクトリのパーミッションを変更します。やや有害

2つの引数(permission fileまたはdir)を取り、fileにpermissionを指定します。
パーミッションの書き方は以下の通り。

【絶対方式】
0〜7の数字4桁で表します。
千の位は0です。SUID・SGIDについては解説しません。
百の位は所有者、十の位はグループ、一の位はその他のユーザのもつ権限です。
それぞれの桁について、読み込みOKなら4、書き込みOKなら2、実行OKなら1を加算します。

【相対方式】
[ugoa][+-][rwx]という3つのセクションから成ります。
[ugoa] … 所有者(User), グループ(Group), その他のユーザ(Others), 全員(All)。
[+-] … 許可(+)・禁止(-)
[rwx] … 読み込み(Read)・書き込み(Write)・実行(eXecute)についての権限。

ファイル所有者は読み書きOK、ほかは読み込みのみOK、という場合は
> chmod 0644 file

全員にこのファイルの実行権限を持たせる場合は
> chmod a+x file
または
> chmod 0755 file

といった具合です。

umask

ファイル・ディレクトリ生成マスクを表示・設定する。やや有害

umaskとは、ファイル・ディレクトリを新規作成したときに
許可しないビットを表すものです。

通常、ファイル作成時には実行権限を持たせないので
666からumask値を引いたものがデフォルトのパーミッションになります。

単独で実行すると現在のマスク値を表示します。普通は「22」です。
引数で指定した値にumaskを変更します。
ちなみに、既に作成されたファイルには影響を与えず、設定変更以降の新規作成に反映されます。

全員が読み書きOK、という場合は
> umask 000 file

所有者のみが読み書きOK、他人に見せない場合は
> umask 066

といった具合です。

テキストエディタ

Winならメモ帳、MacならSimpleText(TextEdit)といったようなものですが、
UNIXでよく使われるエディタはvi, emacs の2種類。
どちらも、使いこなすにはある程度の慣れが必要です。

emacs

エディタ。無害

ごく基本的な使い方は以下の通り。

[Control][B], [Control][F] … それぞれ1文字戻る, 進む。
[Control][A], [Control][E] … それぞれ行頭, 行末に移動。
[Control][P], [Control][N] … それぞれ1行上, 下に移動。
[Esc]-[V], [Control][V] … それぞれ1画面戻る, 進む。
[Esc]-[Shift][,], [Esc]-[Shift][.] … それぞれ先頭, 最終行に移動。
[Control][D] … 1文字削除。
[Control][K] … カーソルのある位置から行末まで削除。
[Control][X]-[Control][F] … ファイルを開く。
[Control][X]-[Control][S] … 保存。
[Control][X]-[Control][W] … 新規保存。
[Control][X]-[Control][C] … 終了。

[A][B]は「Aを押しながらBを押す」、[A]-[B]は「Aを押した後でBを押す」の意

vi

エディタ。無害

ごく基本的な使い方は以下の通り。
「exコマンドモード」という表現をしてませんがおそらくこっちの方が解り易いでしょう。

【コマンドモード】
h, j, k, l … それぞれ左・下・上・右にカーソルを動かす。
x … カーソルのある文字を削除。
dd … カーソルのある行を削除。
yy … 1行コピー。
p … ペースト。
a, i, o, O … それぞれカーソルの直前・直後・直前の行・直後の行に挿入(挿入モードへ移行)
:w … ファイルを保存。
:w file(ファイル名) … ファイル名を指定して保存。
:q … viを終了。
:q! … 保存せずにviを終了。

【挿入モード】
[esc] … コマンドモードへ移行。

[Litz' UNION] > [Dal Segno] > [UNIXたん] > [その2] // [その1][その3]