UNIX/Linux入門にゅうもん

出典しゅってん: フリー教科書きょうかしょ『ウィキブックス(Wikibooks)』
Linux から転送てんそう

情報じょうほう技術ぎじゅつ > UNIX/Linux入門にゅうもん 大学だいがく学習がくしゅう > UNIX/Linux入門にゅうもん


Wikipedia
Wikipedia
ウィキペディアUNIX記事きじがあります。
Wikipedia
Wikipedia
ウィキペディアLinux記事きじがあります。


UNIX入門にゅうもん』もあります。

UNIXとは[編集へんしゅう]

UNIXの起源きげんアメリカAT&Tしゃベル研究所けんきゅうじょ開発かいはつしたOSです。のちカリフォルニア大学だいがくバークレーこう学術がくじゅつ目的もくてき実装じっそうされ、ベル研究所けんきゅうじょのUNIXとカリフォルニア大学だいがくバークレーこうのUNIX (BSD) 両者りょうしゃ現在げんざいひろもちいられているUNIXの源流げんりゅうをなしています。

マルチユーザマルチタスク機能きのう発表はっぴょう当初とうしょからっており、ネットワークかいしてことなる端末たんまつから更新こうしん作業さぎょうなどをおこなえる環境かんきょうをいちはやつくげた。しかも、マルチタスク機能きのうで、同時どうじログインして同時どうじ作業さぎょうすることもでき、業務ぎょうむ効率こうりつ大幅おおはば改善かいぜんした。

UNIXの種類しゅるい[編集へんしゅう]

以下いか現在げんざいおも使用しようされているUNIXけいOSをげます。

詳細しょうさいウィキペディアUNIX記事きじ参照さんしょうのこと。

Linux[編集へんしゅう]

Linuxは、MINIXを模倣もほうしてつくられたOSカーネルです。 OSの構成こうせい要素ようそには、カーネルとユーザーランド(コマンドインタープリターをふくむコマンド、デーモン、ライブラリや付帯ふたいするデータ)がありますが、Linuxはカーネルのみを提供ていきょうしているので、不足ふそくするユーザーランドをGNUのユーティリティをはじめとするサードパーティ・ソフトウェアでおぎないOSの体裁ていさいととのえています。

このほん紹介しょうかいするコマンドはGNU/Linuxでは、すべてLinuxではなくGNUのユーティリティなどサードパーティが提供ていきょうするものです。

Bash
bash
Core Utilities
basename, cat, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, hostname, id, install, join, kill, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mv, nice, nl, nohup, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, seq, sha1sum, shred, sleep, sort, split, stat, stty, su, sum, sync, tac, tail, tee, test, touch, tr, true, tsort, tty, uname, unexpand, uniq, unlink, uptime, users, vdir, wc, who, whoami, yes
Find Utilities
find, locate, updatedb
GNU C Library (glibc)
標準ひょうじゅんCライブラリ実装じっそう
Grep
grep, fgrep, egrep
Texinfo
info, install-info, makeinfo, texi2dvi, texindex, texinfo
less
less
mandb
apropos, man, manpath, whatis, zsoelim
manpages
man(1) で参照さんしょうされるマニュアル本文ほんぶん(コマンド自体じたい付属ふぞくするマニュアルはのぞく)
psmisc
fuser, killall, peekfd, prtstat, pstree

これらのオリジナルにあたるUNIXでの実装じっそう(*BSDをふくむ)は、/usr/src 以下いかのソースツリーに一体いったいとして維持いじされており、カーネルのソースコードも/usr/src/sys以下いかすべてあります。

このように、OSとしての体裁ていさい似通にかよっていますが、UNIXがカーネルとユーザーランドをトータルで維持いじ管理かんり提供ていきょうしているのにたいし、GNU/LINUXではカーネルとは出自しゅつじことなるソフトウェアの調整ちょうせいのもとOSとして提供ていきょうしているので、上記じょうき以外いがいわせ(れい:coreutilsのわりにbusyboxを使つかう、glibcのわりにmuslを使つかひとし)が無数むすうかんがえられ、GNU/LINUXでは、それらのパッケージ管理かんり重要じゅうようします。

UNIXをあつかうえでの基礎きそ知識ちしき[編集へんしゅう]

操作そうさインターフェース[編集へんしゅう]

基本きほんてきには、CUI操作そうさおこなう。CUIとは、コマンドベースのインターフェイスのことで、一定いってい書式しょしきのっとった文字もじれつ(これをコマンドという)を入力にゅうりょくすることでコンピュータを操作そうさする体系たいけいです。近年きんねん、ウィンドウシステムの発達はったつもあって、とくにクライアント分野ぶんやでは起動きどうから終了しゅうりょうまでGUI(CUIにたいして、視覚しかくてき操作そうさできる体系たいけい)で操作そうさ完結かんけつできる環境かんきょうととのいつつあるが、簡素かんそかつ強力きょうりょくなコマンドラインベースの操作そうさ環境かんきょう根強ねづよ支持しじされています。GUIを採用さいようしているシステムでも、GUI環境かんきょうちゅうでコマンドを実行じっこうするためのアプリケーション(ターミナルエミューレータとばれます)を利用りようするのが一般いっぱんてきです。

ファイルシステム[編集へんしゅう]

ファイルシステムという用語ようご多義たぎてきであるが、ここではUnix File Systemのユーザーがわから特徴とくちょうについてべます。

UNIXでは、ファイルをディレクトリ管理かんりします。ディレクトリはWindowsのフォルダーに対応たいおうするものであり[1]複数ふくすうのファイルをおさめることができます。さらに、ディレクトリないべつのディレクトリがあってもいので、ディレクトリぐん構造こうぞうになります。

この構造こうぞう頂点ちょうてんとなるさい上位じょういのディレクトリがただひとつあります。これをルートディレクトリび、/く。

なお、 /root/ というディレクトリがあるが、こちらはファイルシステムの頂点ちょうてんのディレクトリという意味いみの「ルートディレクトリ」ではなく、ユーザー root のホームディレクトリである[2]

ディレクトリ構造こうぞうじょう位置いちパス (path)ぶ。 パスには絶対ぜったいパスと相対そうたいパスがあります。

絶対ぜったいパス
ルートディレクトリを起点きてんとしたパス表現ひょうげん
れい
/home/user01/main.txt
意味いみ
ルートディレクトリのなかのhomeディレクトリのなかのuser01ディレクトリのなかのmain.txt
相対そうたいパス
カレントディレクトリを起点きてんとしたパス表現ひょうげん
れい
main.txt
意味いみ
カレントディレクトリが /home/user01/ ならば /home/user01/main.txt におなじ。
カレントディレクトリ
プロセスが暗黙あんもく参照さんしょうする相対そうたいパス表現ひょうげん起点きてん
pwd(1) で相対そうたいパスで表示ひょうじできる
cd(1) で変更へんこうできる
記号きごう ’.’(カンマ1文字もじ)で参照さんしょうできる
しんディレクトリ
あるディレクトリを包含ほうがんするディレクトリ
れい: /usr/local/bin/ のしんディレクトリは /usr/local/
記号きごう ’..’(カンマ2文字もじ)で参照さんしょうできる
れい: /usr/local/bin/../../lib は /usr/lib/ におなじ。
ホームディレクトリ
ユーザーに割当わりあてられたディレクトリ
環境かんきょう変数へんすう HOME で参照さんしょうできます。
記号きごう '~'(チルダー1文字もじ)でおおくのシェルで参照さんしょうできるが、すべてのシェルで出来できるわけではありません。

ファイルシステムのレイアウトについては hier(7) を参照さんしょう

コマンド[編集へんしゅう]

コマンドとは、コンピュータじょう処理しょりおこなうための、特定とくてい書式しょしきのっとった一連いちれん文字もじれつです。コマンドを入力にゅうりょくし、実行じっこうします(通常つうじょうはEnterキーをす)ことで、そのコマンドにおうじた処理しょり実行じっこうされます。

れい
$ date
2020ねん  2がつ 22にち 土曜日どようび 20:26:11 JST
$ _
コマンドのれいにおける$は、コマンドが入力にゅうりょくできる状態じょうたいであることをしめすために表示ひょうじされた文字もじで、「プロンプト」とばれます。プロンプトは場合ばあいによってことなるがここでは$をもちいています。

このれいでは、'date'というコマンドを実行じっこうしています。これにより、コンピュータは'date'という指示しじけ、その結果けっか'Sun Feb 12 22:11:48 JST 2006'をかえします。結果けっかは、この場合ばあい画面がめん表示ひょうじされているが、正常せいじょう処理しょりおこなわれた場合ばあいなに表示ひょうじしないコマンドもおおい。

コマンドめいつづけて文字もじれつをスペースで区切くぎって記述きじゅつすることで、コマンドに付加ふかてき指示しじわたすことができます。このような付加ふかてき文字もじれつ引数ひきすうぶ。引数ひきすうがどのように解釈かいしゃくされるかはコマンドによってことなるが、よくある使つかいかたとして、コマンドの挙動きょどう変更へんこうするためのオプションとして使つかうというものがあります。オプションは、通常つうじょう'-'につづけたいちのアルファベットでオプションによって追加ついかのパラメータをります。

オプションの形式けいしき--help のように --まえおけするものもありますが、これはGNU拡張かくちょうで、UNIXでは使つかえないので、互換ごかんせいのあるスクリプトを場合ばあいは、POSIXの範囲はんいない使つかうようこころがけましょう。
$ date -u
2020ねん  2がつ 22にち 土曜日どようび 11:30:04 UTC
$ _

このれいでは、'date'というコマンドに'-u’というオプションをけています。これによりdateコマンドの動作どうさ変更へんこうされています。この場合ばあいは、dateコマンドの仕様しようしたがい、ローカルマシンの時刻じこくからUTC(協定きょうてい世界せかい)へと表示ひょうじされる時刻じこくえられています。

また、コマンドには、引数ひきすうとして操作そうさ対象たいしょうるものがあります。

れい
$ rm test.txt

このれいでは、'rm'というコマンドに'test.txt'というファイルを指示しじしています。これにより、'rm'というコマンドをつうじて、'test.txt'というファイルを操作そうさします。'rm'というコマンドはファイルを消去しょうきょするので、この場合ばあいはtest.txtが消去しょうきょされます。


おおくのコマンドは、無効むこうなオプションをわたすと、機能きのう一覧いちらん表示ひょうじされます。

% date -@
date: illegal option -- @
usage: date [-jnRu] [-I[date|hours|minutes|seconds]] [-f input_fmt]
            [-r filename|seconds] [-v[+|-]val[y|m|w|d|H|M|S]]
            [[[[[[cc]yy]mm]dd]HH]MM[.SS] | new_date] [+output_fmt]
% ls -@
ls: invalid option -- @
usage: ls [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwxy1,] [--color=when] [-D format] [file ...]
% cat -@
cat: illegal option -- @
usage: cat [-belnstuv] [file ...]
くわしくは man をくべきですが、おもすためには役立やくだつことがあります。

シェル[編集へんしゅう]

シェルとは、コンピュータにたいして指示しじさい利用りようされる対話たいわプログラムです。コンピュータにコマンドを入力にゅうりょくするとき、実際じっさいにはシェルにたいして入力にゅうりょくしています。シェルは入力にゅうりょくされたコマンドを解釈かいしゃくし、実行じっこうします。シェルは複数ふくすう開発かいはつされており、どのシェルを適用てきようしているかによって、コマンドの表現ひょうげん方法ほうほうちがったり、おな意味いみでもコマンド自体じたいちがったりする場合ばあいもあります。

Bシェル( /bin/sh )、ashdashkshbashzshcshtcshなどがあります。Linuxのかくディストリビューションでは、bashをデフォルトのシェルを採用さいようしてい場合ばあいおおいですが、dash を採用さいようしているディストリビューションも見受みうけられます。

標準ひょうじゅん入力にゅうりょく標準ひょうじゅん出力しゅつりょく標準ひょうじゅんエラー出力しゅつりょく[編集へんしゅう]

コマンドが実行じっこうされるとき、コマンドにはかなら入出力にゅうしゅつりょくのためのみっつの経路けいろ標準ひょうじゅん入力にゅうりょく標準ひょうじゅん出力しゅつりょく標準ひょうじゅんエラー出力しゅつりょくてられます。コマンドは必要ひつようおうじてこれらの経路けいろから入力にゅうりょくったり、出力しゅつりょくしたりします。このみっつの経路けいろ総称そうしょうして標準ひょうじゅん入出力にゅうしゅつりょくといいます。

標準ひょうじゅん入力にゅうりょく
標準ひょうじゅん入力にゅうりょくはコマンドへの情報じょうほう入力にゅうりょくげんです。標準ひょうじゅん入力にゅうりょく利用りようしないコマンドもあります。通常つうじょうは、利用りようしているコンソールからのキーボード入力にゅうりょく標準ひょうじゅん入力にゅうりょくとします。
標準ひょうじゅん出力しゅつりょく
標準ひょうじゅん出力しゅつりょくとは、コマンドが出力しゅつりょくした結果けっかかえすところです。通常つうじょうは、利用りようしているコンソールが出力しゅつりょくさきとなります。
標準ひょうじゅんエラー出力しゅつりょく
標準ひょうじゅんエラー出力しゅつりょくとは、プログラムじょうエラーとして指示しじされた出力しゅつりょくで、通常つうじょう利用りようしているコンソールが出力しゅつりょくさきとなります。

たとえば、上記じょうきのdateのれいで、dateコマンドの出力しゅつりょく内容ないよう画面がめん表示ひょうじされたが、じつはこのとき出力しゅつりょく標準ひょうじゅん出力しゅつりょくおくられています。上記じょうきでは標準ひょうじゅん出力しゅつりょくさき画面がめんだったため、結果けっかとして画面がめん表示ひょうじされた。

標準ひょうじゅん入出力にゅうしゅつりょくさき必要ひつようおうじて変更へんこうすることができます。

れい
$ date > date.txt

コマンドとして入力にゅうりょくする文字もじdate > date.txt部分ぶぶんです。

このコマンドの内容ないようとして、>以降いこう標準ひょうじゅん出力しゅつりょくさきをdate.txtというファイルにえる指示しじです。このようにすると、dateコマンドの結果けっか画面がめん表示ひょうじされるわりにdate.txtというファイルに出力しゅつりょくされるので、日時にちじ記録きろくしたdate.txtというファイルができることになります。このように標準ひょうじゅん入出力にゅうしゅつりょくさき変更へんこうすることをリダイレクトぶ。なお、「> date.txt」の部分ぶぶんはシェルへの指示しじであって、コマンドにわたされる引数ひきすうではないことに注意ちゅういしてほしい。

標準ひょうじゅん入力にゅうりょく使つかうコマンドのれいてみましょう。wcは、標準ひょうじゅん入力にゅうりょくからったテキストのくだりすう語数ごすう・バイトすう標準ひょうじゅん出力しゅつりょくすコマンドです。

れい
$ wc
This is an example to
show how to use the extremely
useful UNIX command.
      3      14      73

このれいではwcの標準ひょうじゅん入力にゅうりょくはキーボードなので、コマンドを実行じっこうするとコンピュータはキーボードからの入力にゅうりょくつ。そこでテキストをタイプし(このれいでは3ぎょうのテキストを入力にゅうりょくした)、入力にゅうりょくえます(これには通常つうじょうCtrl-dをせばい)と、つぎくだりにwcコマンドの出力しゅつりょく表示ひょうじされます。 Ctrl-dとはCtrlキーをしながらdキーをすことです。

標準ひょうじゅん入力にゅうりょく標準ひょうじゅん出力しゅつりょく同様どうようにリダイレクトすることができます。たとえば、test.txtというテキストファイルのくだりすうかぞえるにはつぎのようなコマンドを使つかえばい。

$ wc < test.txt
  7  23 235

さらに、あるコマンドの標準ひょうじゅん出力しゅつりょくべつのコマンドの標準ひょうじゅん入力にゅうりょくにつなげることもできます。これはパイプとばれます。

れい
$ date | wc
      1       6      43

このれいでは、パイプを使つかってdateコマンドの出力しゅつりょくくだりすう単語たんごすう・バイトすうかぞえています。

パイプやリダイレクトを使つかうと、かぎられたコマンドで自在じざい多様たよう操作そうさおこなうことができます。

シェル変数へんすう[編集へんしゅう]

シェルはコマンドインタープリターとばれるように、言語げんごインタープリターの一種いっしゅで、変数へんすう使つかうことが出来できます。

Bash
$ a=xyz
$ echo $a
xyz
$ echo a
a
  1. 変数へんすう a に 文字もじれつxyzを代入だいにゅうします。
  2. 変数へんすうめいまえに$(ドル記号きごう)をつけてecho(1) を実行じっこうすれ
  3. (echo(1)は、指定していした文字もじれつ または 変数へんすう($が必要ひつよう)を表示ひょうじするコマンドです)
  4. $記号きごうがないと、
  5. そのまま表示ひょうじします。
Csh
% set a=xyz
% echo $a
xyz
% echo a
a
  1. 変数へんすう a に 文字もじれつxyzを代入だいにゅうします。
  2. 変数へんすうめいまえに$(ドル記号きごう)をつけてecho(1) を実行じっこうすれ
  3. (echo(1)は、指定していした文字もじれつ または 変数へんすう($が必要ひつよう)を表示ひょうじするコマンドです)
  4. $記号きごうがないと、
  5. そのまま表示ひょうじします。

csh では、プロンプトが % であること、代入だいにゅうに set をまえおけすることが bash とのちがいです。

いま使つかってシェルがなにかは、環境かんきょう変数へんすうSHELLにセットされているので

Bash
$ echo $SHELL
/bin/sh
Csh
% echo $SHELL
/bin/csh

よう確認かくにんできます。

環境かんきょう変数へんすう[編集へんしゅう]

環境かんきょう変数へんすうは、名前なまえむすびついた動的どうてき名前なまえのペアで、プロセスの挙動きょどう設定せってい変更へんこうするためにもちいます。 環境かんきょう変数へんすうは、プロセスが実行じっこうされる環境かんきょう一部いちぶです。

たとえば

HOME
ホームディレクトリ
LANG
ロケール
USER
ログインめい

といった情報じょうほう該当がいとうする環境かんきょう変数へんすうえることで情報じょうほうえることができます。 ただし使用しようしているシェルによって設定せってい方法ほうほうことなります。

たとえば、ロケール (LANG) を日本語にほんご日本国にっぽんこくUTF-8 (ja_JP.UTF-8) としたい場合ばあい

bshけい
$ export LANG=ja_JP.UTF-8
cshけい
% setenv LANG ja_JP.UTF-8
内部ないぶコマンドめいと = の有無うむことなります。

通常つうじょう環境かんきょう変数へんすうは、すべ大文字おおもじで、環境かんきょう変数へんすう設定せってい取消とりけしするコマンドはシェルによってことなります。

なんらかの環境かんきょう変数へんすう確認かくにんするには、printenv(1) を使つかいます。

たとえば、ロケール(LANG)を調しらべたいなら

bsh/cshけい共通きょうつう
% printenv LANG
ja_JP.UTF-8
とします。

環境かんきょう変数へんすう指定していして実行じっこうする方法ほうほうも bsh けいと csh けいことなります。

bshけい
$  LANG=ja_JP.UTF-8 date
2022ねん 10月 20日はつか 木曜日もくようび 02:09:43 UTC
$ LANG=C date
Thu Oct 20 02:10:08 UTC 2022
$ LANG=zh_TW.UTF-8 date
西元にしもと2022ねん10がつ20日はつか (しゅうよん) 0210ふん30びょう UTC
cshけい
% env LANG=ja_JP.UTF-8 date
2022ねん 10がつ20にち 木曜日もくようび 1105ふん38びょう JST
% env LANG=C date
Thu Oct 20 11:05:49 JST 2022
% env LANG=zh_TW.UTF-8 date
2022ねん10がつ20日はつか ほしよん 1105ふん59びょう JST
bshけい(dash)とcshけい(csh)で結果けっかことなります(たとえば、中国ちゅうごく台湾たいわん曜日ようび表記ひょうきが「しゅうよん」と「ほしよん」とちがう)のは、dash からは GNU coreutils の date が、tcsh からは FreeBSDのユーザーランドの date(1) が呼出よびだされているためで、シェルのちがいが原因げんいんではありません。
現在げんざいのロケールとシステムで有効ゆうこうなロケール
% locale
LANG=C.UTF-8
LC_CTYPE="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_TIME="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_ALL=
% locale -a
C
C.UTF-8
POSIX
af_ZA.ISO8859-1
af_ZA.ISO8859-15
af_ZA.UTF-8
am_ET.UTF-8
ar_AE.UTF-8
ar_EG.UTF-8
ar_JO.UTF-8
ar_MA.UTF-8
ar_QA.UTF-8
ar_SA.UTF-8
be_BY.CP1131
be_BY.CP1251
be_BY.ISO8859-5
be_BY.UTF-8
bg_BG.CP1251
bg_BG.UTF-8
ca_AD.ISO8859-1
ca_AD.ISO8859-15
ca_AD.UTF-8
ca_ES.ISO8859-1
ca_ES.ISO8859-15
ca_ES.UTF-8
ca_FR.ISO8859-1
ca_FR.ISO8859-15
ca_FR.UTF-8
ca_IT.ISO8859-1
ca_IT.ISO8859-15
ca_IT.UTF-8
cs_CZ.ISO8859-2
cs_CZ.UTF-8
da_DK.ISO8859-1
da_DK.ISO8859-15
da_DK.UTF-8
de_AT.ISO8859-1
de_AT.ISO8859-15
de_AT.UTF-8
de_CH.ISO8859-1
de_CH.ISO8859-15
de_CH.UTF-8
de_DE.ISO8859-1
de_DE.ISO8859-15
de_DE.UTF-8
el_GR.ISO8859-7
el_GR.UTF-8
en_AUえーゆー.ISO8859-1
en_AUえーゆー.ISO8859-15
en_AUえーゆー.US-ASCII
en_AUえーゆー.UTF-8
en_CA.ISO8859-1
en_CA.ISO8859-15
en_CA.US-ASCII
en_CA.UTF-8
en_GB.ISO8859-1
en_GB.ISO8859-15
en_GB.US-ASCII
en_GB.UTF-8
en_HK.ISO8859-1
en_HK.UTF-8
en_IE.ISO8859-1
en_IE.ISO8859-15
en_IE.UTF-8
en_NZ.ISO8859-1
en_NZ.ISO8859-15
en_NZ.US-ASCII
en_NZ.UTF-8
en_PH.UTF-8
en_SG.ISO8859-1
en_SG.UTF-8
en_US.ISO8859-1
en_US.ISO8859-15
en_US.US-ASCII
en_US.UTF-8
en_ZA.ISO8859-1
en_ZA.ISO8859-15
en_ZA.US-ASCII
en_ZA.UTF-8
es_AR.ISO8859-1
es_AR.UTF-8
es_CR.UTF-8
es_ES.ISO8859-1
es_ES.ISO8859-15
es_ES.UTF-8
es_MX.ISO8859-1
es_MX.UTF-8
et_EE.ISO8859-1
et_EE.ISO8859-15
et_EE.UTF-8
eu_ES.ISO8859-1
eu_ES.ISO8859-15
eu_ES.UTF-8
fi_FI.ISO8859-1
fi_FI.ISO8859-15
fi_FI.UTF-8
fr_BE.ISO8859-1
fr_BE.ISO8859-15
fr_BE.UTF-8
fr_CA.ISO8859-1
fr_CA.ISO8859-15
fr_CA.UTF-8
fr_CH.ISO8859-1
fr_CH.ISO8859-15
fr_CH.UTF-8
fr_FR.ISO8859-1
fr_FR.ISO8859-15
fr_FR.UTF-8
ga_IE.UTF-8
he_IL.UTF-8
hi_IN.ISCII-DEV
hi_IN.UTF-8
hr_HR.ISO8859-2
hr_HR.UTF-8
hu_HU.ISO8859-2
hu_HU.UTF-8
hy_AM.ARMSCII-8
hy_AM.UTF-8
is_IS.ISO8859-1
is_IS.ISO8859-15
is_IS.UTF-8
it_CH.ISO8859-1
it_CH.ISO8859-15
it_CH.UTF-8
it_IT.ISO8859-1
it_IT.ISO8859-15
it_IT.UTF-8
ja_JP.SJIS
ja_JP.UTF-8
ja_JP.eucJP
kk_KZ.UTF-8
ko_KR.CP949
ko_KR.UTF-8
ko_KR.eucKR
lt_LT.ISO8859-13
lt_LT.UTF-8
lv_LV.ISO8859-13
lv_LV.UTF-8
mn_MN.UTF-8
nb_NO.ISO8859-1
nb_NO.ISO8859-15
nb_NO.UTF-8
nl_BE.ISO8859-1
nl_BE.ISO8859-15
nl_BE.UTF-8
nl_NL.ISO8859-1
nl_NL.ISO8859-15
nl_NL.UTF-8
nn_NO.ISO8859-1
nn_NO.ISO8859-15
nn_NO.UTF-8
pl_PL.ISO8859-2
pl_PL.UTF-8
pt_BR.ISO8859-1
pt_BR.UTF-8
pt_PT.ISO8859-1
pt_PT.ISO8859-15
pt_PT.UTF-8
ro_RO.ISO8859-2
ro_RO.UTF-8
ru_RU.CP1251
ru_RU.CP866
ru_RU.ISO8859-5
ru_RU.KOI8-R
ru_RU.UTF-8
se_FI.UTF-8
se_NO.UTF-8
sk_SK.ISO8859-2
sk_SK.UTF-8
sl_SI.ISO8859-2
sl_SI.UTF-8
sr_RS.ISO8859-2
sr_RS.ISO8859-5
sr_RS.UTF-8
sr_RS.UTF-8@latin
sv_FI.ISO8859-1
sv_FI.ISO8859-15
sv_FI.UTF-8
sv_SE.ISO8859-1
sv_SE.ISO8859-15
sv_SE.UTF-8
tr_TR.ISO8859-9
tr_TR.UTF-8
uk_UA.CP1251
uk_UA.ISO8859-5
uk_UA.KOI8-U
uk_UA.UTF-8
zh_CN.GB18030
zh_CN.GB2312
zh_CN.GBK
zh_CN.UTF-8
zh_CN.eucCN
zh_HK.UTF-8
zh_TW.Big5
zh_TW.UTF-8

ユーザー[編集へんしゅう]

UNIXは、マルチユーザーシステムであり、ひとつの計算けいさん複数ふくすうのユーザーで同時どうじ利用りようすることが可能かのうです。計算けいさんには、そのシステムを利用りようする権限けんげんのあるユーザそれぞれについてユーザーめいパスワードなどの認証にんしょう情報じょうほうはじめとするユーザー情報じょうほう登録とうろく管理かんりされています。計算けいさん利用りようするさいは、はじめに自分じぶんのユーザーめいとパスワードを入力にゅうりょく認証にんしょうしなければなりません。これをログインといいます[3]。ログインには、計算けいさんたいし、あるユーザーが利用りよう開始かいししたということを表明ひょうめいするはたらきがあります。同様どうように、利用りよう終了しゅうりょうすることを表明ひょうめいする手続てつづきは、ログアウトばれます。自分じぶんいまどのユーザーとしてログインしているかをるには、whoamiというコマンドを使つかいます(whoコマンドにオプションをあたwho am iとしても類似るいじ結果けっかられますが、細部さいぶことなります。)。

それぞれのユーザーは、私用しようのためのディレクトリをいちてられます。これはホームディレクトリとよばれ、Filesystem Hierarchy Standardしたがっていれば、 /home/${ユーザーめい} ですが、root はこれの例外れいがいです。ホームディレクトリには、個人こじんぞくするデータのほか、アプリケーションの個人こじんよう設定せっていファイルなどをくことができます。これらのファイルは、所有しょゆうけん自分じぶんぞくするため、後述こうじゅつするパーミッションによって、のユーザーが勝手かって変更へんこうくわえることができなくできます。

グループ[編集へんしゅう]

特定とくてい複数ふくすうのユーザーにのみなんらかの権限けんげんあたえたいときにはグループもちいられます。たとえば、あるファイルをグループ所有しょゆうにして、そのグループの一員いちいんにのみ閲覧えつらんゆるす、といったことができます。BSDによる拡張かくちょうがサポートされていれば、一人ひとりのユーザーが複数ふくすうのグループにぞくすることが可能かのうです。

rootとは[編集へんしゅう]

UNIXシステムには管理かんりしゃ役割やくわりをするユーザー(スーパーユーザー)があり、名前なまえは root で uid は 0 でグループ wheel(gid:0) にぞくしています。 root は、デバイス・ファイル・プロセスなどすべてのコンピュータ資源しげんたいする権限けんげんをもっています。 rootでの誤操作ごそうさはシステム破壊はかい直結ちょっけつするため、自分じぶんがシステムの管理かんりしゃであっても、べつ一般いっぱんユーザーを作成さくせいし、root権限けんげん必要ひつよう場合ばあいのぞいて一般いっぱんユーザーで作業さぎょうしなければいけません。

パーミッション[編集へんしゅう]

ファイルやディレクトリについてのアクセスの権限けんげんをパーミッションといいます。パーミッションを設定せっていすることで、たとえばファイルを特定とくていのユーザーにしか閲覧えつらんできなくしたり、あらゆるユーザーが閲覧えつらんできるようにしたりすることができます。

すべてのファイルには所有しょゆうしゃ所有しょゆうグループがまっており、これにしたがってアクセス権限けんげんけられます。すなわち、所有しょゆうしゃ所有しょゆうグループの一員いちいん、そののユーザー、というさん区分くぶんたいして独立どくりつ権限けんげん設定せっていすることができます。設定せってい可能かのう権限けんげん以下いかみっつです。

り(r)
ファイルなら閲覧えつらん、ディレクトリなら内容ないよう表示ひょうじができます。
み(w)
ファイルならえ、ディレクトリなら内容ないよう操作そうさができます。
実行じっこう(x)
ファイルならプログラムとして実行じっこう、ディレクトリならそこに移動いどうできます。

ファイルの消去しょうきょ必要ひつよう権限けんげんは、そのファイルへの権限けんげんではなく、そのファイルのかれているディレクトリへの権限けんげんであることに注意ちゅういしてほしい。

ファイルのパーミッションは、lsコマンドに'-l'というオプションを付加ふかすることで確認かくにんできます。この場合ばあい、パーミッションはつぎのような表記ひょうきあらわされます。

rwxr-x--x

この記法きほうは、ひだりからさん文字もじずつ、所有しょゆうしゃ所有しょゆうグループの一員いちいん、そののユーザー、に対応たいおうしています。アルファベットは対応たいおうする権限けんげんがあることをしめし、-対応たいおうする権限けんげんがないことをしめす。このれいでは、このファイルもしくはディレクトリにたいして、「所有しょゆうしゃ」はrwxすなわち「閲覧えつらんみ、実行じっこう可能かのう」、「所有しょゆうグループの一員いちいん」はr-xで「閲覧えつらん実行じっこう可能かのう」、「その」は--xで「実行じっこう可能かのう」ということになります。

また、さんけたはち進数しんすう数値すうちでパーミッションをあらわすこともあります。この場合ばあいみっつのけたは、ひだりから所有しょゆうしゃ所有しょゆうグループの一員いちいん、そのあらわす。個々ここ数字すうじさん種類しゅるい権限けんげん有無うむ二進法にしんほうんだものです。たとえば、r-xは進数しんすうえると101、はち進数しんすうにすると5です。

最初さいしょれいにあるrwxr-x--xなら、計算けいさんすると751です。

よくもちいられるコマンド[編集へんしゅう]

ここでは、UNIXをあつかうえ非常ひじょうによくもちいられるコマンドについてまとめます。これらのコマンドは実際じっさいにはシェルの機能きのうではなく、ひとつのアプリケーションであることに注意ちゅうい必要ひつようです。しかし、これらのコマンドは通常つうじょうシェルから起動きどうされることから、これらをシェルのコマンドとぶことがおおい。

基本きほんコマンド[編集へんしゅう]

cd[編集へんしゅう]

cdは、カレントディレクトリーを変更へんこうするコマンドです。 cdは、 change current working directory のりゃくです[4]。 cd はファイルシステムじょう実行じっこうファイルのある外部がいぶコマンドではなく、シェルの内部ないぶコマンドです。

$ cd /
$ ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  postinst  proc  root  run  sbin  sys  tmp  usr  var
$ cd etcd
bash: cd: /etcd: No such file or directory
$ cd etc
$ pwd
/etc
$ cd
$ pwd
/home/user1
  1. カレントディレクトリーをルートディレクトリー(/)に変更へんこう
  2. ls(1) はディレクトリーにあるファイルを一覧いちらん表示ひょうじするコマンド
  3. (ディレクトリーを指定していしないとカレントディレクトリーが対象たいしょうになります)
  4. etcd にカレントディレクトリーを変更へんこうしようとした
  5. カレントディレクトリーのルートディレクトリー(/)直下ちょっかには etcd はないので失敗しっぱい
    • 存在そんざいしないディレクトリにカレントディレクトリーをえることは出来できない
  6. etc にカレントディレクトリーを変更へんこうしようとした
    • これは成功せいこうしてノーリアクション
  7. pwd(1) はカレントディレクトリーを絶対ぜったいパスで表示ひょうじする
  8. ルートディレクトリー(/)直下ちょっかの etc なので /etc
  9. cd にディレクトリーを指定していせず実行じっこうすると
  10. カレントディレクトリーは
  11. ホームディレクトリーとなる

man[編集へんしゅう]

manは、UNIXで標準ひょうじゅんてきもちいられるヘルプシステムです。manはターミナルじょうすべての情報じょうほう表示ひょうじすることを条件じょうけんとしてつくられているため、いろ使づかいなどがあまり現代げんだいてきではないめんがあります。しかし、表示ひょうじされる情報じょうほうには有用ゆうようなものがおおいため、たびたびもちいることになるでしょう。とく個々ここのコマンドのこまかいオプションを記憶きおくすることは現実げんじつてきではないため、機能きのうだけをおぼえておき、オプションはそのつどmanで調しらべるのが現実げんじつてきでしょう。

このコマンドは、

$ man コマンドめい

としてもちいられます。manのファイルはいくつかのカテゴリーに分類ぶんるいされており、それらのカテゴリーには1から8の番号ばんごうけられています。manは、対応たいおうするコマンドめい存在そんざいするかどうかを、1からじゅん調しらべていき、最初さいしょ見付みつかったものを表示ひょうじします。そのため、おな名前なまえのmanがわか番号ばんごう存在そんざいするときには、のち保存ほぞんされているmanはむことができありません。このときには、たいmanの番号ばんごう調しらべ、

$ man 番号ばんごう コマンドめい

のように必要ひつようがあります。また、

$ man -a コマンドめい

のようにコマンドをもちいると、コマンドめい対応たいおうするmanをすべじゅん表示ひょうじするので、こちらをもちいてもよい。

れい
$ man man
manについて説明せつめいしたmanページをむ。
$ man ls
lsのmanページをむ。

manがmanページをさがすディレクトリは、環境かんきょう変数へんすうMANPATHに記憶きおくされています。これは、おおくの場合ばあい /usr/share/manなどであり、ここにはシステムで用意よういされているmanページのほとんどが保存ほぞんされています。システムに興味きょうみがある場合ばあいはこれらにとおすとよい。

whatis[編集へんしゅう]

whatis は、コマンドめいあるいはコマンドの機能きのうをおぼろげにおぼえているときに使つかいます。

形式けいしき
$ whatis 文字もじれつ
れい
$ whatis tty
tty(1) - return user's terminal name
IO::Tty(3) - Low-level allocate a pseudo-Tty, import constants.
IO::Tty::Constant(3) - Terminal Constants (autogenerated)
tty(4) - general terminal interface

info[編集へんしゅう]

info は、GNU でもちいられるコマンドラインインタフェースで動作どうさするハイパーテキストのヘルプビューアです。

$ info ノードめい

としてもちいます。

bash のドキュメントがみたいのであれば

$ info bash

とします。

infoは、texinfoプログラムによって生成せいせいされた.infoファイルをみ、ドキュメントをツリーとして表示ひょうじし、ツリーを横断おうだんしたり、クロスリファレンスをたどったりするための簡単かんたんなコマンドを提供ていきょうしします。

基本きほん操作そうさ

スペースバー -- 現在げんざいのツリーノードないしたへスクロールし、現在げんざいのノードのしたにいる場合ばあいは、現在げんざいのドキュメントのつぎのノードへ移動いどうします、このことで情報じょうほうファイルの内容ないよう順次じゅんじすすめることができます。
バックスペースキー -- 反対はんたい方向ほうこう移動いどうします。
] -- 現在げんざい文書ぶんしょないつぎのノードに移動いどうします。
[ -- 現在げんざい文書ぶんしょまえのノードに移動いどうします。
n -- 現在げんざいのノードとおなじレベルのつぎのノードに移動いどうします。
p -- 現在げんざいのノードとおな階層かいそうにあるまえのノードに移動いどうします。
u -- 現在げんざいのノードのしんノードにく。
l -- 最後さいごおとずれたノードに移動いどうします。
q -- info を終了しゅうりょうする
カーソルをリンク(アスタリスクではじまる単語たんご)のうえ移動いどうし、Enterキーをすと、そのリンクさきぶ。
タブ -- カーソルをつぎもっとちかいリンクに移動いどうします。

date[編集へんしゅう]

dateは、現在げんざい日付ひづけ時刻じこくかえすコマンドです。dateコマンドは、日付ひづけ設定せっていする目的もくてきでももちいることができます。

れい
$ date
現在げんざい日付ひづけ時刻じこくかえします。
$ sudo date 日付ひづけ
システムの日付ひづけ時刻じこく設定せっていします。
スーパーユーザー権限けんげん必要ひつようで、可逆かぎゃく行為こういです。
また、現在げんざいはネットワークでつなげないでUNIXシステムを運用うんようするケースはまれで、ntpで時刻じこく同期どうき管理かんりするので、システムのクロックに手動しゅどう介入かいにゅうする必要ひつようはありません。

dateも、システムのロケールによって、表示ひょうじえます。

$ LC_ALL=en date
Thu Jun  1 19:08:03 JST 2006
$ LC_ALL=ja_JP.UTF-8 date
  6  1 19:08:07 JST 2006
ここでは、ロケールを英語えいごにした場合ばあい日本語にほんごにした場合ばあいしめしています。ロケールについては後述こうじゅつ

su[編集へんしゅう]

suは、一時いちじてき管理かんりしゃ権限けんげんれたいときに使つかう。設定せっていファイルをえるときなど管理かんりしゃ権限けんげん必要ひつようなときにもちいられます。

れい
$ su
管理かんりしゃ権限けんげんったシェルを起動きどうします。
$ su -
管理かんりしゃ権限けんげんったシェルを起動きどうすると同時どうじに、環境かんきょう変数へんすうをrootの変数へんすうえます。

sudo[編集へんしゅう]

sudoのあとに管理かんりしゃ権限けんげん実行じっこうしたいコマンドを

れい
$ sudo apt update

テキスト関係かんけい[編集へんしゅう]

テキスト閲覧えつらん[編集へんしゅう]

まず、閲覧えつらんしたいテキストファイルのある場所ばしょまで、cdコマンド(シェルのディレクトリ移動いどうのコマンド)で移動いどうします。

ファイルを表示ひょうじする場合ばあい

more
less
cat

などのコマンドがあります。

これらのコマンドの内容ないようちがいは、テキストファイルを表示ひょうじするさいに、一括いっかつ出力しゅつりょくするか、それとも段階だんかいてき出力しゅつりょくしていくかといった、ちがいです。

$ more sample.txt
のように入力にゅうりょくします。なお、これはファイルsample.txtの内容ないよう表示ひょうじするコマンドです。


つまり

more ファイルめい

書式しょしきです。

more[編集へんしゅう]

moreでは、おおきなテキストの場合ばあいには段階だんかいてきに、冒頭ぼうとうから出力しゅつりょくしていく。表示ひょうじしているテキストのつづけたい場合ばあいはエンターキーをすなどすると、つづきが表示ひょうじされます。


less[編集へんしゅう]

おおきなテキストの場合ばあいには段階だんかいてきに、冒頭ぼうとうから出力しゅつりょくしていく。

$ less sample.txt
sample.txtの内容ないよう表示ひょうじします。

表示ひょうじしているテキストのつづけたい場合ばあい

エンターキーをすと、つづきが表示ひょうじされます。
マウスの中央ちゅうおうホイールによるスクロールでも、テキストのつづきが表示ひょうじされます。

また、なが標準ひょうじゅん出力しゅつりょくるのにも使つか

れい
$ ls /etc | less
lessはのコマンドとくらべるとおおきいファイルで、内容ないよう豊富ほうふです。詳細しょうさい内容ないようは、manを参照さんしょうすること。


cat[編集へんしゅう]

ファイルの内容ないよう最後さいごまで表示ひょうじします。複数ふくすうのファイルが指定していされた場合ばあいにはそれらのファイルをつづけて表示ひょうじします。

$ cat sample.txt sample2.txt

sample.txtとbbbの内容ないよう連続れんぞくして標準ひょうじゅん出力しゅつりょく出力しゅつりょくします。

catコマンドでは、テキスト出力しゅつりょくはファイルの最後さいごまで中断ちゅうだんすることなくおこなわれます。
コンソールには表示ひょうじ画面がめんのこされていますが、すでにシャルのコマンドの受付うけつけもどっており、cat は終了しゅうりょうしています。

テキスト操作そうさ[編集へんしゅう]

tr[編集へんしゅう]

trは、ファイルちゅう特定とくてい文字もじれつえるはたらきをします。

$ grep abc /usr/share/dict/words
abcoulomb
Babcock
crabcatcher
dabchick
$ grep abc /usr/share/dict/words | tr abc xyz
xyzoulomy
Bxyzozk
zrxyzxtzher
dxyzhizk
ファイル /usr/share/dict/words から abc をふくくだり表示ひょうじ
その結果けっかを、パイプラインをとおして受取うけとり a -> x, b -> y, c -> z にそれぞれ1文字もじずつえて表示ひょうじ
cut[編集へんしゅう]

cutはファイルないであるれつす。れつ内容ないようはオプションによって指定していでき、-cオプションでは文字数もじすう指定していされます。一方いっぽう、-fオプションでは-dオプションで指定していされるデリミタによって分割ぶんかつされるフィールドが使つかわれます。

$ grep ^cats /usr/share/dict/words
catskin
catstep
catstick
catstitch
catstitcher
catstone
catsup
$ grep ^cats /usr/share/dict/words | cut -c 5
k
t
t
t
t
t
ファイル /usr/share/dict/words から先頭せんとうが cats ではじまるくだり表示ひょうじ
その結果けっかを、パイプラインをとおして受取うけと先頭せんとうから5文字もじ表示ひょうじ
$ cat sample.txt
a b c d
e f g h
$ cut -f 2 -d ' ' sample.txt
b
f
deimitor を ’ ’ として、2 field 表示ひょうじ
paste[編集へんしゅう]

ファイル操作そうさ[編集へんしゅう]

ls[編集へんしゅう]

lsとだけコマンド入力にゅうりょくした場合ばあいには、カレントディレクトリの中身なかみ記述きじゅつします。作成さくせいしたファイルやディレクトリが実際じっさいにディレクトリない存在そんざいするかどうかをたしかめるためにもちいることができます。

$ ls ディレクトリめい
入力にゅうりょくした場合ばあい、そのディレクトリが存在そんざいするならば、そのディレクトリめい中身なかみ表示ひょうじされます。
れい
$ cd ~/p5
$ ls
defer.pl        finally.pl      hello.pl        oct.pl          pt.pl           ver.pl
れい
$ ls Go
3sieve.go               ebnf.txt                geocoord.go             hello                   prime.go                std.rb
7.go                    fib.rb                  ggg.go                  httpclient.go           prime.rb                std.txt
CVS                     fibo                    go2.go                  info.go                 recfc.go                stdlib.txt
anon.go                 fibo.arm.objdump        go3.go                  isprime                 sieve.go                stringer
clink                   fibo.go                 go4.go                  isprime.go              sieve2.go               stringer.go
conv.go                 fibo.o                  go5.go                  lifegame.go             sieveX.go               ticker.go
create.go               fibo.objdump            gogo.go                 lifegame.go.000         sig.go                  vro.go
dac                     ftes.txt                goroutine.go            ois3.go                 spec                    vro.json
digestauth              generics.go             gxx.go                  osos.go                 spec-ebnf.rb            websv.go
$ ls NoExist
ls: NoExist: No such file or directory
ls にひと以上いじょう単語たんごともなって実行じっこうすると
ファイルがあれば、その名前なまえ表示ひょうじします。
ディレクトリがあれば、そのなかのファイルの一覧いちらん表示ひょうじします。
ファイルもディレクトリも存在そんざいしない場合ばあいは、そのむね標準ひょうじゅんエラー出力しゅつりょく出力しゅつりょくされます。


lsにはいくつものオプションがあるが、よくもちいるものをまとめます。-lは、ファイルやディレクトリについてより詳細しょうさい情報じょうほうあたえます。情報じょうほうは、パーミッション、ファイルサイズ、作成さくせいしゃ作成さくせいされた時間じかん最後さいご変更へんこうされた時間じかんなどです。実用じつようじょうは、-lだけではなく、-hもつけるとファイルサイズが人間にんげんにとってみやすいかたちでかかれるため、使つかいやすくなります。

-a は、ディレクトリないにあるすべてのファイルを表示ひょうじします。通常つうじょうのlsでは、最初さいしょが.からはじまるファイルやディレクトリは表示ひょうじされありません。これは、設定せっていファイルやアプリケーションが内部ないぶてきもちいるファイルが毎回まいかい表示ひょうじされると場所塞ばしょふさぎだからです。これらが存在そんざいするかどうかを調しらべるためには、明示めいじてきに-aオプションをもちいる必要ひつようがあります。

-Rオプションは、ディレクトリを再帰さいきてき降下こうかしてファイルを表示ひょうじします。再帰さいきてきとは、ファイルが存在そんざいすればそれを表示ひょうじし、ディレクトリが存在そんざいすればそのディレクトリに移動いどうし、ふたたびls -Rとおな作業さぎょうおこなうという意味いみです。結局けっきょくカレントディレクトリ以下いかかれているファイルがすべ表示ひょうじされます。おおきなディレクトリないでこれを実行じっこうすると結果けっかるのに時間じかんがかかるため、ひかえたほうがよいでしょう。しかし、さがしたいファイルがあるときにはこれを使つかうのがよいでしょう。

れい
$ ls
カレントディレクトリないのファイルとディレクトリを表示ひょうじします。
$ ls /bin
/binにあるファイルを表示ひょうじします。/binには、重要じゅうようなコマンドが保存ほぞんされています。
ls、のちべるcp、mkdirなども通常つうじょうここにふくまれています。一方いっぽう、manや通常つうじょうのアプリケーションは/usr/binにふくまれています。

このようなファイルシステムの階層かいそうは、Filesystem Hierarchy Standard標準ひょうじゅん規格きかくされており、 man hier で参照さんしょうできます。

$ ls -R /usr/include
/usr/includeないふくまれるファイルを再帰さいきてきすべ表示ひょうじします。
/usr/includeないにはC言語げんごなどをもちいるさい必要ひつようになるヘッダファイルがふくまれています。
システムに必要ひつようなヘッダファイルが存在そんざいするかを調しらべるために、このディレクトリを調しらべることがおおい。

cp[編集へんしゅう]

cpは、ファイルをコピーするコマンドです。cpの使つかかたは、

$ cp コピーされるファイルめい  コピーさきのファイルめい

となります。

cpもいくつかのオプションをつ。-iは、コピーさきのファイルが存在そんざいするときにそのファイルを上書うわがきするかどうかたずねるようにするオプションです。このオプションがいときには、cpはコピーさきのファイルを勝手かって消去しょうきょし、そのうえ指定していされたファイルを上書うわがきします。この振舞ふるまいはしばしば重大じゅうだい失敗しっぱいをひきこすため、-iオプションはできるかぎつねもちいるようにしたほうがよいでしょう。システムによっては、エイリアスなどの機能きのう駆使くしして、これらの振舞ふるまいが通常つうじょうとなるように設定せっていしている場合ばあいもあります。

しかし、システムを過信かしんせず、自分じぶんをつけるほうのぞましい。-fオプションはこの反対はんたいで、-iオプションがけられていたとしても上書うわがきのまえ注意ちゅういうながさないよう動作どうささせます。これはおおくのファイルを上書うわがきするさいに、通常つうじょう振舞ふるまいが-iオプションありであったときには非常ひじょう不便ふべんであることからもちいられます。-Rオプションは、指定していされたディレクトリを再帰さいきてきにコピーします。この機能きのうはよくもちいられるが、振舞ふるまいをつコマンドとしてtarがあり、またあたらしいファイルのおおくがtarファイルで供給きょうきゅうされることをかんがえると、それほど使つかわずにむかもれありません。

れい
$ cp -i sample.txt documents/

カレントディレクトリないにあるsample.txtというファイルを、documentsディレクトリないにコピーします。-iオプションがあるためすでにdocumentsない同名どうめいのファイルがあったときには警告けいこく表示ひょうじされます。

その[編集へんしゅう]

mv[編集へんしゅう]

mvは、cpとちが指定していされたファイルを指定していされた場所ばしょ移動いどうするコマンドです。移動いどうされたもとのファイルは消去しょうきょされます。mvはつぎのようにもちいられます。

$ mv 移動いどうもとのファイルめい 移動いどうさきのファイルめい

mvにも-iと-fのオプションがあります。これらの動作どうさは、cpの対応たいおうぶつおなじです。mvはファイルめい変更へんこうする場合ばあいにももちいられます。すなわち、AというファイルをBという変更へんこうするときは、AをBに移動いどうするとかんがえmv A Bを使用しようします。

rm[編集へんしゅう]

rmは、指定していしたファイルを消去しょうきょするコマンドです。GUIの'ゴミ箱ごみばこ'とちがいち消去しょうきょしたファイルはもどせないので、注意ちゅうい必要ひつようです。不測ふそく事態じたいけるために、作成さくせいしたファイルはこまめにバックアップおこなうことがのぞましい。バックアップにはtarコマンドなどがおおもちいられるが、この使つかかた後述こうじゅつします。rmコマンドは

$ rm 消去しょうきょするファイルめい

としてもちいます。

rmもcpやmvとおなじ-iと-fコマンドをつ。不測ふそく事態じたいけるため、-iはつねもちいることを推奨すいしょうします。rmコマンドは再帰さいきてき消去しょうきょおこなう-Rオプションをつ(-rオプションもおな意味いみであります)。おおきなディレクトリを消去しょうきょするときには、このオプションは事実じじつじょう必須ひっすであるが、つよ効果こうかつコマンドなので、使用しようには細心さいしん注意ちゅうい必要ひつようです。

rmのよくある失敗しっぱいれいは、.からはじまるファイルをすべ消去しょうきょしようとして、

$ rm -R .*

とすることです。.*は、..(おやディレクトリ)もふくむため、これはおやディレクトリ以下いかふくまれるファイルをすべ消去しょうきょするコマンドになってしまう。そのため、このようなコマンドをおこなうことは絶対ぜったいけねばなりません。このときにも-iオプションをつければ消去しょうきょおこなまえ警告けいこくるので、危険きけんすくなくなります。

mkdir[編集へんしゅう]

mkdirは、、ディレクトリを作成さくせいするコマンドです。

形式けいしき
$ mkdir 作成さくせいするディレクトリめい
rmdir[編集へんしゅう]

rmdirは、、ディレクトリを消去しょうきょするコマンドです。

形式けいしき
$ rmdir 消去しょうきょするディレクトリめい
rmdirは、指定していされたディレクトリがそらであるときのみディレクトリを消去しょうきょします。
なかにファイルやディレクトリがはいっているディレクトリを消去しょうきょするときには、前述ぜんじゅつ
$ rm -r ディレクトリめい
もちいます。
pwd[編集へんしゅう]

pwd(1)はカレントディレクトリの絶対ぜったいパスを表示ひょうじします。

れい
$ pwd
/home/user1/work
(カレントディレクトリが /home/user1/work であった場合ばあい
touch[編集へんしゅう]

touchは、、指定していされたファイルの更新こうしん日時にちじ変更へんこうします。指定していされたファイルが存在そんざいしないとき、touchは、ファイルを作成さくせいします。ファイルが存在そんざいした場合ばあいはタイムスタンプを更新こうしんします。いち複数ふくすうのファイルを作成さくせいすることもできます。

$ touch sample.txt sample2.txt sample3.txt
sample.txt sample2.txt sample3.txt それぞれに、「存在そんざいしなければ0バイトのファイルをつくり、存在そんざいしたら内容ないようえずタイムスタンプだけ更新こうしん」という処理しょりおこないます。
ln[編集へんしゅう]

ファイルのハードリンクあるいはシンボリックリンクをつくります。

リンクは、Unixのファイルシステムに固有こゆう機能きのうで、ファイルにはパスと内容ないよう(データとメタデータの総体そうたい)がある、複数ふくすうのパスがおな内容ないようしめすことができます。

れい
$ mkdir ln.d
$ cd ln.d/
$ echo abc > file.txt
$ cat file.txt 
abc
$ ln file.txt linked.txt
$ echo uvw >> file.txt 
$ cat linked.txt 
abc
uvw
$ echo xyz >> linked.txt 
$ cat file.txt 
abc
uvw
xyz
$ ls -i
2654371 file.txt        2654371 linked.txt


正規せいき表現ひょうげん[編集へんしゅう]

正規せいき表現ひょうげんはあるルールで指定していされる文字もじれつ集合しゅうごうのことをす。正規せいき表現ひょうげんもちいて複数ふくすうのファイルを指定していしたり、文書ぶんしょちゅうからてはまる文字もじれつ検索けんさくすることができます。正規せいき表現ひょうげん自体じたいはあらゆるOSじょう利用りようされる技術ぎじゅつですが、とくにUNIXのシェルには正規せいき表現ひょうげんもちいる技術ぎじゅつおおくあるのでここでまとめます。

正規せいき表現ひょうげん複数ふくすう文字もじれつてはまる'性質せいしつ'をしめことができます。たとえば、a,aa,aaa,aaaa,... などの文字もじれつはaが連続れんぞくてきならぶという性質せいしつっています。このような名前なまえのファイルを同時どうじ消去しょうきょしたいときには、aが連続れんぞくてきならぶという性質せいしつ指定していできると便利べんりです。egrepPerlひとし正規せいき表現ひょうげんあつかえるソフトでは、この集合しゅうごうを^a+$と指定していすることができます。ここでは正規せいき表現ひょうげんについてくわしくはれないので、くわしい情報じょうほうは、'詳説しょうせつ 正規せいき表現ひょうげん(オライリージャパン)'などを参照さんしょうしてしい。

grep[編集へんしゅう]

grepは、ある正規せいき表現ひょうげんとファイルを指定していして、その正規せいき表現ひょうげんてはまるくだりをファイルちゅうからす。

$ grep aaa f.txt

のようにもちいます。(文中ぶんちゅうにaaaという文字もじれつふくむ)f.txtの内容ないよう

aaabbbcccddd
eeefffggghhh

なら、

aaabbbcccddd

出力しゅつりょくされます。正規せいき表現ひょうげんが^ddd(くだりがdddではじまます)だったときには、てはまるくだりいのでなに出力しゅつりょくされません。ddd$(くだりがdddでおわります)では、

aaabbbcccddd

出力しゅつりょくされます。

find[編集へんしゅう]

findは、ディレクトリを再帰さいきてき降下こうかし、条件じょうけんてはまるファイルを見付みつけるコマンドです。findの書式しょしき非常ひじょう複雑ふくざつになるので、詳細しょうさいについてはここではれありません。対応たいおうするmanなどを参照さんしょう

$ find .

条件じょうけんしにカレントディレクトリ以下いかのファイルを表示ひょうじします。

$ find . -name f.txt

カレントディレクトリ以下いかのファイルで名前なまえがf.txtのファイルを表示ひょうじします。nameオプションには globもちいることができます。たとえば、

$ find . -name 'f*.txt'

は、fではじまり.txtでわるファイル(file.txt, ffff.txt, ...などがあてはまます)をさがす。 シングルクォーテーション(')でかこんでいるのは、カレントディレクトリにある f*.txt とのマッチングをおこなわせないため。

シェルスクリプト[編集へんしゅう]

うえのコマンドのれいでは、コマンドはすべて1つずつ入力にゅうりょくされ、 それぞれのコマンド実行じっこうたいしてそれぞれの結果けっかかえってきた。 このように上記じょうきれいではすべてシェルを対話たいわてきあつかってきたが、 あらかじめシェルに実行じっこうさせたいコマンドをファイルにいておき、 これをまとめてシェルに実行じっこうさせることも可能かのうです。 このコマンドをいたファイルをシェルスクリプトとぶ。

シェルスクリプトのかたはシェルの種類しゅるいによってことなるので、 以下いかではLinuxやMac OS Xの標準ひょうじゅんのシェルであるbash (Bourne Again Shell) をれいにとって説明せつめいします。

最初さいしょのシェルスクリプト[編集へんしゅう]

シェルスクリプトとはっても、基本きほんてきにはコマンドをならべたものです。

#!/bin/bash
/bin/echo
/usr/bin/uname

たとえば、テキストエディタの新規しんきファイルに上記じょうきをコピーペーストして、これをたとえば「test.sh」という名前なまえでカレントディレクトリに保存ほぞんします。

このファイルを実行じっこう可能かのうにします。

chmod +x test.sh

実行じっこうするには、コマンドラインで

./test.sh

とコマンドすればいいです。

なお、上記じょうきコードは、「はじめにhelloと表示ひょうじし、つぎにOSの名前なまえ表示ひょうじする」シェルスクリプトです。

1ぎょうのコメントには特殊とくしゅ意味いみがあるので後述こうじゅつします(Shebang!)。

プロセス管理かんり[編集へんしゅう]

UNIXでは複数ふくすうのプロセスを同時どうじうごかせます。ここでは、実際じっさい複数ふくすうのプロセスをうごかす方法ほうほうべます。プロセスはたがいに独立どくりつで、通常つうじょうべつのプロセスの動作どうさにかかわりうごく。そのため、のプロセスの動作どうさ制御せいぎょしたいときには、シグナル利用りようする必要ひつようがあります。シグナルは、のプロセスにおくることができ、プロセスを中断ちゅうだんするひとし効果こうかがあります。

&[編集へんしゅう]

&は、コマンドののちにつけてそれをバックグラウンドでうごかす機能きのうがあります。これは複数ふくすうのプロセスを起動きどうしたいときもちいられます。

れい
$ xterm &

X Window Systemの起動きどうちゅうあらたな端末たんまつひらくときにもちいられます。xterm自体じたいも1つのX Window Systemにおけるクライアントアプリケーションです。

シグナル[編集へんしゅう]

HUP
制御せいぎょはしまつじられたときにプロセスに送信そうしんされるシグナルです。もともとは、シリアルラインドロップをプロセスを通知つうちするように設計せっけいされていました。
INT
INTは、interrupt(み)の意味いみつシグナルで、プロセスを中断ちゅうだんさせます。
TERM
TERMは、terminate(終了しゅうりょう)の意味いみつシグナルで、プロセスを終了しゅうりょうさせます。
KILL
強制きょうせい終了しゅうりょう

シグナルにたいする応答おうとうは、プログラムちゅうえることができます。つぎれいでは、INTシグナルにたいする応答おうとうえています。

sig.c
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void sigint() {
  puts("catch SIGINT");
  fflush(stdout);
  exit(1);
}
int main() {
  signal(SIGINT, sigint);
  while (1)
    sleep(5);
}
$ ./a.out

べつのシェルから、

$ killall -INT a.out

とすると、./a.out を実行じっこうしていたターミナルに catch SIGINT表示ひょうじされます。 ここではかりやすさのためにsignal()関数かんすうもちいたが、実用じつようてきなプログラムをつくさいにはsignal()関数かんすうではなくsigaction()関数かんすう使つかうべきです。

ps[編集へんしゅう]

psは、現在げんざい実行じっこうされているプロセスを表示ひょうじします。

$ ps

現在げんざい自分じぶん実行じっこうしているプロセスを表示ひょうじします。

$ ps ax

自分じぶんだけでなくほかのユーザーが実行じっこうしたプロセスも表示ひょうじします。このオプションは、デーモンプロセスをるためによくもちいられます。

kill[編集へんしゅう]

killは、、のプロセスにシグナルをおくるコマンドです。killはプロセスID(pid)を引数ひきすうとしてとるので、シグナルをおくりたいプロセスがあるときには、あらかじめpsコマンドなどをもちいてpidをれておく必要ひつようがあります。

$ kill 3456

プロセスID3456に、TERMシグナルをおくます。TERMシグナルはおくるシグナルを指定していしなかったとき使つかわれるシグナルです。

$ kill -INT 3456

プロセスID3456に、INTシグナルをおくます。おくるシグナルは-(シグナルめい)で指定していすることができます。実際じっさい指定していできるシグナルについては、$ man killを参照さんしょうすること。

  • 注意ちゅうい

bashには、ビルトインコマンドの1つとしてkillがあります。このため、killが実行じっこうファイルとして存在そんざいしたとしても、実際じっさい実行じっこうされるのはビルトインコマンドのほうです。

れい
$ kill %1

はjobsで表示ひょうじされるプロセスにシグナルをおくます。しかし、

$ /bin/kill %1

は、

kill: illegal process id: %1
かえします。
これは %1 は、shell のジョブコントロール機能きのう管理かんり番号ばんごうで、外部がいぶコマンドである /bin/kill のあずかりらないところであるためです。

killall[編集へんしゅう]

psmiscにふくまれるkillallは、プロセスIDではなく、プロセスの名称めいしょうもちいてシグナルをおくることができます。

$ killall a.out

a.outは、(おそらく)Cプログラムの実行じっこうファイルです。自作じさくしたプログラムにシグナルをおくるときにもちいます。

jobs[編集へんしゅう]

シェルが、複数ふくすうのプロセスやプロセスグループを管理かんりする機能きのうを、ジョブコントロールといます。 ジョブコントロールは、BSD Unixじょうの csh に実装じっそうされました。 jobsは、シェルのbuiltinコマンドで、bashを使つかっているなら、$ man bashないにjobsのmanもかれています。jobsは、現在げんざい自分じぶんうごかしているプロセスを表示ひょうじします。

れい
$ jobs

top[編集へんしゅう]

topは、、うごいているプロセスを指定していされた順序じゅんじょならびかえ、一定いってい時間じかんごと表示ひょうじします。

れい
$ top

デバイスファイル[編集へんしゅう]

デバイスファイルはコンピュータに接続せつぞくされた機器ききにアクセスするためのファイルです。デバイスファイルは、デバイスへのインターフェースでありデバイスそのものではないため、デバイスファイルを削除さくじょしても(通常つうじょうは)問題もんだいがありません。たとえば、/dev/hda1を削除さくじょしても、ハードディスクの中身なかみえることはありません。

また、デバイスファイルはたいてい/dev以下いかかれるが、それ以外いがい場所ばしょにおいてもおなじようにあつかうことができます。ただし、デバイスファイルはデバイスの識別しきべつのためにメジャー番号ばんごうとマイナー番号ばんごうっているため、それらはデバイスごと使つかける必要ひつようがあります。

デバイスファイルを作成さくせいするには、mknodコマンドをもちいます。mknodは作成さくせいするファイルの名称めいしょう、メジャー番号ばんごう、マイナー番号ばんごう、デバイスの種類しゅるい指定していしてつくられます。デバイスの種類しゅるいとは、b:ブロックがた、c:キャラクタがたのどちらかです。 -->

エディタ[編集へんしゅう]

慣用かんようてきに、シェルで、テキストファイルを作成さくせい編集へんしゅうするためのソフトウェアのことが、たんに「エディタ」とばれています。UNIXの設定せっていファイルはほとんどがテキストファイルであるため、エディタの重要じゅうようせいおおきい。

vi[編集へんしゅう]

viひろもちいられるUNIXのテキストエディタです。viはほとんどすべてのシステムで用意よういされているため、基本きほんてき設定せっていファイルの記述きじゅつにはこのエディタがもちいられることがおおい。ただし、動作どうさのエディタとはことなっているため、その使用しようにはこのみがわかれるエディタでもあります。

実際じっさいに、vi とタイプして起動きどうされるコマンドは、nvi であったり vim のような互換ごかんエディタであることがおおいです。

Xウィンドウシステム[編集へんしゅう]

XウィンドウシステムはUNIXじょうGUI実現じつげんするためによくもちいられるプログラムです。

Linuxとは[編集へんしゅう]

Linuxとは、1991ねんにフィンランドのプログラマ リーナス・トーバルズがヘルシンキ大学だいがく在学ざいがくちゅうにMinixよりすぐれたMinixをつくるためにげたプロジェクトで開発かいはつGPL公開こうかいしたLinuxカーネルもとにしているOSです。 公開こうかい当初とうしょは、とても貧弱ひんじゃくであったが、すぐにハッカーたち支持しじ利用りようしゃやしていった。安価あんか手軽てがるにUNIXと類似るいじ環境かんきょうられることからインターネット・サーバとして頻繁ひんぱん利用りようされるようになってきた。

GNUについて[編集へんしゅう]

Linuxはカーネルしかなく、Linuxのみでうごかすことは出来できなかった。しかし、フリーなオペレーティングシステムをつくることを目的もくてきとしていたGNUプロジェクトは、カーネルや、一部いちぶのデーモンなど以外いがいをフリーなソフトウェアとして完成かんせいさせてていた。GNUのglibcやBash、そのおおくのコマンドといった主要しゅようなソフトウェアとLinuxにのカーネルを組合くみあわせることで、実際じっさいうごかして使つかうことのできるオペレーティングシステムをつくることが出来できました。そのため、LinuxのカーネルとBashやglibc、gcc、などといった主要しゅようなソフトウェアをわせてGNU/Linuxとぶこともあり、GNUプロジェクトなどは推奨すいしょうしています。 Linuxにおさめられているソフトのおおくは、GNUGPLLGPLといったライセンスで配布はいふされています。

Linuxの種類しゅるい ディストリビューション[編集へんしゅう]

Linux ディストリビューション[a](しばしばディストロとりゃくされます)は、Linux カーネルと、おおくの場合ばあいパッケージ管理かんりシステムをふくむソフトウェアの集合しゅうごうたいからつくられたオペレーティング・システムです。 Linuxユーザーは通常つうじょう、Linuxディストリビューションの1つをダウンロードしてOSを入手にゅうしゅする[5]。 パッケージ管理かんりシステムは、後述こうじゅつしますが、DebianけいではDEB、RedHatけいではRPMがおも使つかわれます。

ディストリビューションの分類ぶんるい[編集へんしゅう]

ディストリビューションの系統けいとうとしておもにパッケージ管理かんりシステムのちがいによって3しゅ分類ぶんるいされるが、どれにもぞくさないものもあります。

Red Hat けい
RPMばれるパッケージ管理かんりシステムをっています。Red Hat Enterprise Linux、Fedora、CentOS など。
Debian けい
dpkg という RPM 形式けいしきよりも強力きょうりょくなパッケージ管理かんりシステムをっています。Debian GNU/Linux や KNOPPIX、Ubuntu、Linux Mint など。
Slackware けい
Red Hat けいのような固有こゆうのパッケージ管理かんりシステムはく、ユーザが自分じぶんでソフトウェアや、そのソースファイルを管理かんりします。自由じゆうたかいが、知識ちしき必要ひつよう。Slackware や Plamo Linux。

おもなディストリビューション[編集へんしゅう]

よく使用しようされているディストリビューションを以下いかげます。

Red Hat Enterprise Linux
企業きぎょうにおけるサーバシステムの構築こうちくやクライアント利用りようのためのディストリビューション。RHELとりゃくされます。
CentOS stream
Fedoraでの上流じょうりゅう開発かいはつとRHELでの下流かりゅう開発かいはつあいだ位置いちする中流ちゅうりゅうLinuxディストリビューションです。
Fedora(きゅうRedhat Linux)
将来しょうらいのRHELにまれる予定よていしん機能きのうなどをテストしたりするための、上流じょうりゅうLinuxディストリビューションです。
Debian GNU/Linux Debian Project
企業きぎょうのコミュニティ主体しゅたいのOSのひとつです。さい古参こさんのディストリビューションのひとつで、現在げんざい開発かいはつされているLinuxディストリビューションのなかでSlackwareのつぎむかしからあるLinuxディストリビューション。独自どくじのパッケージ管理かんりシステム deb を採用さいようしています。インストールがむずかしい、とわれていたが、Debian-Installer Project によって改善かいぜんされた。Debian LiveにあるインストーラーはCent OSなどとおなじインストーラーを使つかっており、Debianインストーラーよりさら使つかいやすくなっています。また、UbuntuやMint Linuxのような主要しゅようなOSのベースとなっています。
Ubuntu
Debianから派生はせいしたディストリビューションであるが、Canonicalという企業きぎょう開発かいはつ主導しゅどうしています。デスクトップでの使用しようをメインにしており、現在げんざいでは人気にんきたかいディストリビューション。
SUSE Linux (げん openSUSE)
欧米おうべい人気にんきたかく、歴史れきしふるい。先進せんしんてきではあるが安定あんていてきでないカーネルを搭載とうさいするのをけ、すこれてはいるが安定あんていせいたかいソフトウェアを採用さいようしています。また、Xgl、AppArmorとう開発かいはつでもられます(一部いちぶopenSUSEより引用いんよう)。
Gentoo Linux Gentoo Linux Users Group Japan
FreeBSD の ports に独自どくじのパッケージ管理かんりシステム portage を採用さいようし、ソースコードからのビルドを基本きほんとするため、さまざまなシステムをおもったとおりに構築こうちくできます。このため、メタ・ディストリビューションともばれています。Google Chrome OSは当初とうしょUbuntuをベースに開発かいはつされていたが、2010ねん2がつに portage を採用さいようするため、ベースOSをUbuntuからGentooに変更へんこうした[6]

Linuxで動作どうさするソフト[編集へんしゅう]

X Window System[編集へんしゅう]

UNIXじょううごくGUI環境かんきょうに、X Window Systemがあります。これは、サーバー / クライアント方式ほうしきでグラフィカルな環境かんきょう提供ていきょうするもので、通常つうじょうはこのうえ各種かくしゅツールキットを使つかってGUI環境かんきょう構築こうちくします。

むかしは、ツールキットや、デスクトップ環境かんきょう各種かくしゅソフトウェアが別々べつべつ配布はいふされており、デスクトップの環境かんきょうつくるのが大変たいへんでした。それを解決かいけつするものとして、ツールキット、デスクトップ環境かんきょう各種かくしゅソフトウェアなどをまとめて、統合とうごうデスクトップ環境かんきょうというものがつくられた。

おも統合とうごうデスクトップ環境かんきょうGNOMEKDELXDEXfceWindow Makerなどがあり、ツールキットはGNOMEけいではおもGtk、KDEけいではおもQt、が使つかわれ、ほかにもwxWidgetなどがあります。これらを使つかってグラフィカルなアプリケーションを作成さくせい出来できます。

とくにGNOME、KDEは、テキストエディタやファイルマネージャー、オフィスアプリケーションなどの周辺しゅうへんアプリケーションもあわせて提供ていきょうされており、まとめて導入どうにゅうすることによって、WindowsやMac OSなどといった先行せんこうするオペレーティングシステムにけない程度ていど環境かんきょうつくることが出来できます。現在げんざいはGNOMEが優勢ゆうせいで、ほかにもとても軽量けいりょうなLXDEなどを使つかひとえています。

脚註きゃくちゅう[編集へんしゅう]

  1. ^ Unixのファイルシステムは、VMS,CP/M,MS-DOS,Windowsとことなり、「ドライブ」はなく、ルートファイルシステムの下位かい階層かいそうべつのファイルシステムをマウントすることで、ユーザーには単一たんいつのファイルシステムにえるようにします。ただし、たとえばファイルシステムをまたいでハードリンクをることは出来できないなど、まったくユーザーが意識いしきしないでむわけではありません。
  2. ^ FHS(Filesystem Hierarchy Standard)以前いぜんの Unixでは、実際じっさい/ が、システム管理かんりしゃ root のホームディレクトリでした。
  3. ^ Windowsではログオンといいますが、概念がいねんおなじです。
  4. ^ chdir(2)
  5. ^ Linux From Scratch という、すべてのコンポーネントを手動しゅどう構築こうちくして、動作どうさする Linux システムをインストールする方法ほうほうもあります。これには当然とうぜんながら、コンパイルみのLinuxディストリビューションをインストールするよりもながいプロセスが必要ひつようです。Linux From Scratchのサイトによると、この方法ほうほう利点りてんは、コンパクトで柔軟じゅうなんかつ安全あんぜんなシステムと、Linuxベースのオペレーティングシステムの内部ないぶ動作どうさのよりふか理解りかい獲得かくとくできることです。
  6. ^ Chrome OS、クロスコンパイルにGentooのPortage採用さいよう”. ITmedia (2010ねん2がつ18にち). 2010ねん2がつ20日はつか時点じてんオリジナルよりアーカイブ。2022ねん6がつ27にち閲覧えつらん

UNIX/Linux リンク[編集へんしゅう]