Linux リテラシ2006 - 第2回 Linux の基礎知識と基本コマンド2
第2回となる今回も前回の続きで基本的なコマンドの説明です。今回はファイルの操作とアクセス権限を司るコマンドを扱います。
基本的な概念
Section titled “基本的な概念”コマンドの説明をする前に、今回新たに加わるLinuxの概念について説明します。
スーパーユーザと一般ユーザ
Section titled “スーパーユーザと一般ユーザ”スーパーユーザ(root)はシステム内における絶対的な管理者で、全てのファイルに対して変更や作成、追加、削除など、どんな操作でも許可されているユーザです。これに対し一般ユーザは他の一般ユーザ、もしくはスーパーユーザの許可がない場合、自分の所有するファイルやディレクトリ以外は操作できません。
スーパーユーザの方が制限なく操作をできて便利ではないか?と思われるでしょうが、スーパーユーザはその権力が大き過ぎるので、システム上重要なファイルやディレクトリも削除することができてしまいます。そうしないために普段は一般ユーザで作業をし、スーパーユーザの権限が必要な時のみスーパーユーザにログインをします。
Linux では複数のユーザの集合をグループという単位で管理します。全てのユーザは一つ以上のグループに所属しており、通常ユーザ名と同じ名前のグループに所属しています。後述のアクセス権を設定する際、グループ単位でアクセス権を指定することが可能です。
ファイルの操作
Section titled “ファイルの操作”ファイルをダウンロードする
Section titled “ファイルをダウンロードする”wget [オプション] URLhoge.tar.gzをダウンロードする
Section titled “hoge.tar.gzをダウンロードする”$ wget http://rat.cis.k.hosei.ac.jp/article/rat/linuxliteracy/2006/commands2/hoge.tar.gzダウンロードできたか確認しましょう。
$ lshoge.tar.gztarファイルを展開する
Section titled “tarファイルを展開する”~.tarという形式のファイルはファイルやディレクトリをまとめて、ひとつの.tarファイルにしたものです。
~.gzという形式のファイルは1つのファイルやディレクトリを圧縮したものです。
tar [オプション] ファイル名:-f:解凍するファイル名を指定する。
:-v:処理状況を表示する。
:-x:展開する。
:-z:gzip形式のものを解凍する。(tar.gzの形式の場合、使用します)
hoge.tar.gzという圧縮されたファイルを解凍する
Section titled “hoge.tar.gzという圧縮されたファイルを解凍する”$ tar -zxvf hoge.tar.gzfoo.ziplsコマンドで解凍ができたか確認します。
$ lsfoo.zip hoge.tar.gzzipファイルを解凍する
Section titled “zipファイルを解凍する”unzip [オプション] ファイル名foo.zipというzipファイルを解凍する
Section titled “foo.zipというzipファイルを解凍する”$ unzip foo.zipArchive: foo.zip creating: foo/ creating: foo/access/ creating: foo/dest/ inflating: foo/road inflating: foo/longlsコマンドで解凍ができたか確認します。
$ lsfoo foo.zip hoge.tar.gzファイルを検索する
Section titled “ファイルを検索する”find [ディレクトリ名/ファイル名] [expression]expression
Section titled “expression”:-group グループ名:指定したグループ名のファイルを検索します。
:-name 文字列:指定した文字列のファイル名を検索します。
:-type ファイルタイプ:指定したファイルタイプを検索します。
ファイルタイプは、ディレクトリ:“d”、通常ファイル:“f”、など
:-user ユーザー名:指定した所有ユーザ名のファイルを検索します。
カレントディレクトリ以下でファイル名がlongのファイルを検索する
Section titled “カレントディレクトリ以下でファイル名がlongのファイルを検索する”$ find -name long./foo/longfooディレクトリ以下のファイルタイプがディレクトリのファイルを検索する
Section titled “fooディレクトリ以下のファイルタイプがディレクトリのファイルを検索する”$ find foo -type dfoofoo/accessfoo/destファイルの内容を出力する
Section titled “ファイルの内容を出力する”cat [オプション] ファイル名 [ファイル名...]:-n:行番号を表示する。
roadの内容を出力する
Section titled “roadの内容を出力する” $ cat road
「道」
この道を行けばどうなるものか
危ぶむなかれ危ぶめば道はなし
踏み出せばその一足が道となりその一足が道となる
迷わず行けよ行けばわかるさ
一休宗純roadの内容を行番号を付きで出力する
Section titled “roadの内容を行番号を付きで出力する” $ cat -n road 1 2 3 「道」 4 5 この道を行けば 6 どうなるものか 7 8 危ぶむなかれ 9 危ぶめば道はなし 10 11 踏み出せば 12 その一足が道となり 13 その一足が道となる 14 15 迷わず行けよ 16 行けばわかるさ 17 18 一休宗純ファイルをわかりやすく見る
Section titled “ファイルをわかりやすく見る”less [オプション] ファイル名:-N:行番号を表示する
longというファイルをわかりやすく見る
Section titled “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”で戻ります。
ファイルの最後の部分を表示する
Section titled “ファイルの最後の部分を表示する”tail [オプション] ファイル名:-n 行数 または -行数:行数だけ出力する。
longというファイルの末尾7行を出力する
Section titled “longというファイルの末尾7行を出力する”$ tail -n 7 longバグ -t オプションは troff ライクなプログラムがインストールされている場合の み有効である。
September 12, 1995 man(1)$ tail -7 longバグ -t オプションは troff ライクなプログラムがインストールされている場合の み有効である。
September 12, 1995 man(1)ファイルをコピーする
Section titled “ファイルをコピーする”cp [オプション] コピー元 コピー先roadをmichiにコピーする
Section titled “roadをmichiにコピーする”$ cp road michiコピーができたかどうか確認しましょう
$ lsaccess dest long michi roadディレクトリをコピーする
Section titled “ディレクトリをコピーする”cp [オプション] コピー元 コピー先:-a:ディレクトリ/ファイルの構成やアクセス権限を保持してコピーする。
:-r:ディレクトリごとコピーする。(所有者以外のユーザ以外が行うと所有者が変わる)
destをディレクトリごとaccessにコピーする
Section titled “destをディレクトリごとaccessにコピーする”$ cp -r dest access$ ls accessdestファイル(ディレクトリ)を移動する
Section titled “ファイル(ディレクトリ)を移動する”mv [オプション] 移動元 移動先destをtoに移動する
Section titled “destをtoに移動する”$ mv dest to$ lsaccess long michi road toファイルを消す
Section titled “ファイルを消す”rm ファイル名 [オプション]:-f:警告メッセージを表示しない。
:-i:警告メッセージを表示する。
michiを消す
Section titled “michiを消す”$ rm michiディレクトリを消す
Section titled “ディレクトリを消す”rm ディレクトリ名 [オプション]:-r:ディレクトリ内を再帰的に削除する。
:-f:警告メッセージを表示しない。
:-i:警告メッセージを表示する。
$ rm to -rf$ lsaccess long roadLinuxはディレクトリやファイル単位でアクセス権を細かく定めることができます。アクセス権がどのように設定されているかはls -lのコマンドで確認できます。
$ ls -ldrwxrwxr-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)とも呼びます。
パーミッションを変える
Section titled “パーミッションを変える”chmod モード ディレクトリ名/ファイル名:モード:変更するアクセス権限を表します
アクセス権の変更方法は2通りあります
1、先ほどの”u”や”g”に対して”+“や”-”、”=“で与える(アクセス権”r”や”w”、“x”を指定する方法です。
accessというディレクトリにすべてのユーザの書き込み権限をなくす
Section titled “accessというディレクトリにすべてのユーザの書き込み権限をなくす”$ chmod a-w access
確認にはls -lコマンドを使います
$ ls -ldr-xr-xr-x 2 foo foo 4096 5月 24 06:11 access2、各ユーザ権限の”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—にする
Section titled “roadというファイルのアクセス権をrwxrw-r—にする”$ chmod 764 road確認します
$ ls -l-rwxrw-r-- 1 foo foo 27 5月 24 06:12 road