Linux リテラシ2006 - 第2回 Linux の基礎知識と基本コマンド2

javelin

第2回となる今回も前回の続きで基本的なコマンドの説明です。今回はファイルの操作とアクセス権限を司るコマンドを扱います。

基本的な概念

コマンドの説明をする前に、今回新たに加わるLinuxの概念について説明します。

スーパーユーザと一般ユーザ

スーパーユーザ(root)はシステム内における絶対的な管理者で、全てのファイルに対して変更や作成、追加、削除など、どんな操作でも許可されているユーザです。これに対し一般ユーザは他の一般ユーザ、もしくはスーパーユーザの許可がない場合、自分の所有するファイルやディレクトリ以外は操作できません。

スーパーユーザの方が制限なく操作をできて便利ではないか?と思われるでしょうが、スーパーユーザはその権力が大き過ぎるので、システム上重要なファイルやディレクトリも削除することができてしまいます。そうしないために普段は一般ユーザで作業をし、スーパーユーザの権限が必要な時のみスーパーユーザにログインをします。

グループ

Linux では複数のユーザの集合をグループという単位で管理します。全てのユーザは一つ以上のグループに所属しており、通常ユーザ名と同じ名前のグループに所属しています。後述のアクセス権を設定する際、グループ単位でアクセス権を指定することが可能です。

ファイルの操作

ファイルをダウンロードする

wget [オプション] URL

hoge.tar.gzをダウンロードする

$ wget http://rat.cis.k.hosei.ac.jp/article/rat/linuxliteracy/2006/commands2/hoge.tar.gz

ダウンロードできたか確認しましょう。

$ ls
hoge.tar.gz 

tarファイルを展開する

~.tarという形式のファイルはファイルやディレクトリをまとめて、ひとつの.tarファイルにしたものです。
~.gzという形式のファイルは1つのファイルやディレクトリを圧縮したものです。

tar [オプション] ファイル名

オプション

-f
解凍するファイル名を指定する。
-v
処理状況を表示する。
-x
展開する。
-z
gzip形式のものを解凍する。(tar.gzの形式の場合、使用します)

hoge.tar.gzという圧縮されたファイルを解凍する

$ tar -zxvf hoge.tar.gz
foo.zip

lsコマンドで解凍ができたか確認します。

$ ls
foo.zip  hoge.tar.gz

zipファイルを解凍する

unzip [オプション] ファイル名

foo.zipというzipファイルを解凍する

$ unzip foo.zip
Archive:  foo.zip
   creating: foo/
   creating: foo/access/
   creating: foo/dest/
  inflating: foo/road
  inflating: foo/long

lsコマンドで解凍ができたか確認します。

$ ls
foo  foo.zip  hoge.tar.gz

ファイルを検索する

find [ディレクトリ名/ファイル名] [expression]

expression

-group グループ名
指定したグループ名のファイルを検索します。
-name 文字列
指定した文字列のファイル名を検索します。
-type ファイルタイプ
指定したファイルタイプを検索します。

ファイルタイプは、ディレクトリ:"d"、通常ファイル:"f"、など

-user ユーザー名
指定した所有ユーザ名のファイルを検索します。

カレントディレクトリ以下でファイル名がlongのファイルを検索する

$ find -name long
./foo/long

fooディレクトリ以下のファイルタイプがディレクトリのファイルを検索する

$ find foo -type d
foo
foo/access
foo/dest

ファイルの内容を出力する

cat [オプション] ファイル名 [ファイル名...]

オプション

-n
行番号を表示する。

roadの内容を出力する

 $ cat road


   「道」

この道を行けば
どうなるものか

危ぶむなかれ
危ぶめば道はなし

踏み出せば
その一足が道となり
その一足が道となる

迷わず行けよ
行けばわかるさ

一休宗純

roadの内容を行番号を付きで出力する

 $ cat -n road
    1
    2
    3     「道」
    4
    5  この道を行けば
    6  どうなるものか
    7
    8  危ぶむなかれ
    9  危ぶめば道はなし
   10
   11  踏み出せば
   12  その一足が道となり
   13  その一足が道となる
   14
   15  迷わず行けよ
   16  行けばわかるさ
   17
   18  一休宗純

ファイルをわかりやすく見る

less [オプション] ファイル名

オプション

-N
行番号を表示する

longというファイルをわかりやすく見る

$ less long


名前
       man - オンラインマニュアルページを整形し表示する。
       manpath - ユーザー個々のマニュアルページの検索パスを       manpath - ユーザー個々のマニュアルページの検索パスを決める。

書式
       man [-adfhktwW] [-m system] [-p string] [-C config_file] [-M path] [-P
       pager] [-S section_list] [section] name ...

説明
       man はオンライン・マニュアル・ページを整形し表示する。このバージョンの
       man  コマンドでは環境変数 MANPATH と (MAN)PAGER を設定できる。これによ
       り、個人的なマニュアルページを設定したり、整形したページを表示するプロ
       グラムを好きに選べる。 section を指定すると、 man はマニュアルのそのセ
       クションのみ探す。またコマンドライン・オプションや環境変数で、それぞれ
       のセクションを検索する順序や、ソース・ファイルに対してどんなプリプロセ
       ッサを用いるかを指定したりすることができる。 name に / が含まれてい る
       とき man コマンドはまずファイル名として扱う。したがって man ./foo.5 ま
       たは man /cd/foo/bar.1.gz とさえできる。

ファイルの最初から
コンソールに収まらない場合、↑↓キーを押すと上下にスクロールします。
またコマンドラインにもどるにはmanコマンドと同じように"q"で戻ります。

ファイルの最後の部分を表示する

tail [オプション] ファイル名

オプション

-n 行数 または -行数
行数だけ出力する。

longというファイルの末尾7行を出力する

$ tail -n 7 long
バグ
       -t オプションは troff ライクなプログラムがインストールされている場合の
       み有効である。



                             September 12, 1995                       man(1)
$ tail -7 long
バグ
       -t オプションは troff ライクなプログラムがインストールされている場合の
       み有効である。



                             September 12, 1995                       man(1)

ファイルをコピーする

cp [オプション] コピー元 コピー先

roadをmichiにコピーする

$ cp road michi

コピーができたかどうか確認しましょう

$ ls
access  dest  long  michi  road

ディレクトリをコピーする

cp [オプション] コピー元 コピー先

オプション

-a
ディレクトリ/ファイルの構成やアクセス権限を保持してコピーする。
-r
ディレクトリごとコピーする。(所有者以外のユーザ以外が行うと所有者が変わる)

destをディレクトリごとaccessにコピーする

$ cp -r dest access
$ ls access
dest

ファイル(ディレクトリ)を移動する

mv [オプション] 移動元 移動先

destをtoに移動する

$ mv dest to
$ ls
access long michi road to

ファイルを消す

rm ファイル名 [オプション]

オプション

-f
警告メッセージを表示しない。
-i
警告メッセージを表示する。

michiを消す

$ rm michi

ディレクトリを消す

rm ディレクトリ名 [オプション]

オプション

-r
ディレクトリ内を再帰的に削除する。
-f
警告メッセージを表示しない。
-i
警告メッセージを表示する。
$ rm to -rf
$ ls
access long road

アクセス権

Linuxはディレクトリやファイル単位でアクセス権を細かく定めることができます。アクセス権がどのように設定されているかはls -lのコマンドで確認できます。

$ ls -l
drwxrwxr-x  2 foo  foo  4096  5月 23 19:53 access
-rw-rw-r--  1 foo  foo    27  5月 23 19:54 road
-rw-rw-r--  1 foo  foo   235  5月 23 11:27 long

ここで、barにクローズアップしてみましょう。

このA~Dについて説明します。

Aはこのファイル(またはディレクトリ)のアクセス権を表します。
Bはこのファイルの所有ユーザを表します。
Cはこのファイルの所有グループを表します。
Dはこのファイルの名前です。

今度はAのアクセス権にクローズアップします。

アクセス権はこの図の1~4に分けて考えることができます。

1はこのファイルのファイルタイプを表します。(ディレクトリは"d"、ファイルは"-"など)
2は所有ユーザの権限を表します。所有ユーザはコマンドでは"u"と表されます。
3は所有グループの権限を表します。所有グループは"g"と表されます。
4はその他のユーザの権限を表します。その他のユーザは"o"と表されます。
補足として、コマンドで全ユーザを指定する場合は"a"と表されます。

各権限の項目にrwxなどの文字が書かれていますが、これらの文字は各権限毎に何ができるかを表しています。

"r" …読み取り可能(Readable)を表します。
"w"  …書き込み可能(Writable)を表します。
"x"  …実行可能(eXecutable)を表します。
"-"  …これは上記3個のどれかに置き換わり、その権限が与えられていないことを表します。

つまり、先ほどのbarというディレクトリはその他のユーザのみ書き込み権限が与えられてない、ということになります。

アクセス権限のことをパーミッション(permission)とも呼びます。

パーミッションを変える

chmod モード ディレクトリ名/ファイル名
モード
変更するアクセス権限を表します

アクセス権の変更方法は2通りあります

1、先ほどの"u"や"g"に対して"+"や"-"、"="で与える(アクセス権"r"や"w"、"x"を指定する方法です。

accessというディレクトリにすべてのユーザの書き込み権限をなくす

$ chmod a-w access

確認にはls -lコマンドを使います

$ ls -l 
dr-xr-xr-x  2 foo  foo 4096  5月 24 06:11 access

2、各ユーザ権限の"r"、"w"、"x"を3桁の2進数に置き換え、それをユーザごとに足し、3の8進数で表現し、全アクセス権を指定して変更する方法です。

ファイルのアクセス権を-rwxr-xr--に変えたい場合
所有ユーザ …2進数で、111=4+2+1=7
所有グループ…2進数で、101=4+0+1=5
他のユーザ …2進数で、100=4+0+0=4
この場合、モードは754となります

roadというファイルのアクセス権をrwxrw-r--にする

$ chmod 764 road

確認します

$ ls -l 
-rwxrw-r--  1 foo  foo    27  5月 24 06:12 road