UNIX 入門
UNIX とは
- オペレーティングシステム (OS) のひとつ。
- はるか昔から開発されている OS。
- Windows 、 MacOS X などと同じ。
- ひとつの計算機をみんなで使う時代から使われている。
- ウィンドウシステムとかマウスとかない時代から使われている。
- 特徴
- 安定 している。
- 24 時間稼動が当たり前。
- マルチユーザーでの使用にきちんと対応している。
- CUI なインターフェイス
なぜ UNIX か
- ロボットを動かす PC で使用するため。
- ROS は Linux 上のほう動かしやすい。
- 安定して動作する。
- UNIX の種類
- Linux
- Ubuntu <- 今回はこれを使用する。
- RedHat
- MaxOS X
- FreeBSD
- HP-UX、 Solaris …
- Linux
UNIX を使う上での注意点
- 何をしているか 理解して実行すること。
- 「なんとなく」では動かない。
- (権限があれば)簡単に 危険なこと ができる。
- ファイルを全消去する。
- 設定を変更する。
- PC をフリーズさせる。
- CUI での開発 に慣れる。
- キーボードで操作する。
- マウスは触るな!
ファイルシステム
/
(ルートディレクトリ)を根とする木構造。- 区切り文字は
/
。 - ルートディレクトリからのパスで一意に決まる。
/home/usrs/moto/hoe.txt
など。
- 区切り文字は
- 最近は日本語名のディレクトリ/ファイルも作れる。
- が、何かとトラブルの元なのでやらない方がよい。
ホームディレクトリ
- ログインしたときのディレクトリ。
/etc/passwd
内に定義されている。- 個人設定ファイルは大抵ここに置く。
- デスクトップとは別物である。
- 省略した記述は「
~
(チルダ)」。- 環境変数
HOME
に自動でセットされる。 echo $HOME
で確認できる。- 他人のホームディレクトリは
~account
。
- 環境変数
ディレクトリ関連のコマンド
- 表示
ls
,pwd
- 作成、移動
mkdir
,rmdir
cd
- ディレクトリの 指定方法。
- 絶対パス:ルートディレクトリからのパス。
- 相対パス:現在位置からのパス。
- 特別な記号
- 「
.
(ピリオド)」:現在のディレクトリ。 - 「
..
」:ひとつ上のディレクトリ。
- 「
ファイル操作関連のコマンド
- 作成
touch
,cp
- 移動、名前の変更、消去
mv
,rm
- 中身の表示、計測
cat
,more
,less
,wc
- 正規表現によるファイル(やディレクトリ)の指定方法。
- 「
*
(アスタリスク)」:任意の文字列(0 文字でも可)を表す。 - 「
?
」:任意の 1 文字を表す。*/a*.??
のように使う。
- 「
検索
find
: ファイル自体 の検索を行う。- 以降のコマンド入力において
$
は入力プロンプト(入力を促す記号)であり、演習時にタイプする必要はない。
- 以降のコマンド入力において
- ファイル名で検索できる。
$ find . -name hoe.txt -print
- 最終更新日時が 10 日以内であるファイルを検索するコマンド。
$ find . -mtime -10 -print
.
./.config/dconf
./.config/dconf/user
./.config/google-chrome
./.config/google-chrome/WidevineCdm
...
- 検索されたファイルに対してコマンドを適用なども可能。
- (例)最終アクセス日時が 1 月以上昔のファイルを消去する。
grep
:テキストファイルの 中身 を検索する。- 文字列が書かれているファイルを検索する。
$ grep "hoe" *.txt
標準入力と標準出力
- UNIX のコマンドは、通常 3 つの入出力 を持つ。
- 標準入力。
- 標準出力、標準エラー出力。
gets()
やprintf()
は、標準入力/出力とのやりとり。- キーボードからの入力や画面への出力ではない。
- 通常は標準入力はキーボードに、標準出力は画面に接続している。
- 標準エラー出力も画面に接続している。
接続先は変更が可能
パイプとリダイレクト
- あるコマンドの標準出力を別のコマンドの標準入力に継ぐ。
- パイプ :「
|
」 - (例)
grep --help | less
、ls | wc
など。
- パイプ :「
- ファイルの中身を標準入力に入れるには リダイレクト :「
<
」- (例)
wc < file.txt
- 標準出力をファイルに書き出す(
>
)も可能。
- (例)
コマンドの使い方がわからないとき
- ヘルプの表示方法。
- だいたい
command -h
、command --help
で表示される。 - 簡単な使い方を表示できる。
- だいたい
- オンラインマニュアル
$ man grep # この例ではgrepコマンドのマニュアルを表示
GREP(1) User Commands GREP(1)
NAME
grep, egrep, fgrep, rgrep - print lines matching a pattern
SYNOPSIS
grep [OPTIONS] PATTERN [FILE...]
...
# 'q'キーで終了
- 概要から使い方まで調べられる。
- インターネット検索の前にチェックすること。
実習(1)
- 色々なディレクトリに行って中身を見てみる。
-
例えば
- ホームディレクトリ以下の中身をみる。
- ルートディレクトリの中身を見る。
/etc/passwd
等の設定ファイルを見てみる。- 他人のホームディレクトリを覗く。
find
やgrep
を使って検索してみる。
- いろいろなコマンドを試し、結果を見てみること
権限の管理
- UNIX は複数のユーザーが同時に利用する。
- 勝手に書き替えたりされては大変なことになる。
- 重要な設定ファイルは管理者だけが変更できるようにしたい。
- 基本方針
- 個別のファイルやディレクトリごとに持ち主を定義する。
- 持ち主を含め、何ができ、何は禁止なのか定義する。
- 設定によっては持ち主も読めないファイルもできる。
権限の設定
- 権限の設定は 3 種類。
- 読み取り、書き込み、実行可能。
- 権限の設定対象も 3 種類。
- 自分、同じグループ、他人。
- 結局、3×3=9 個の権限を設定できる。
rwxrwxrwx
と、9 文字で表現する。ls -l
で確認可能。
グループ
- ユーザは少なくとも 1 つのグループに所属する。
- 一般ユーザ、管理者、同じ開発グループ…
- グループに権限を与えると次のような権限設定ができる。
- グループメンバーだけ読める。
- グループメンバーだけ書き替えできる。
- グループメンバーだけ実行できる。
- グループの所属設定。
/etc/group
- 自分についての情報は
id
コマンドで確認可能。
ディレクトリに対する権限
- ディレクトリについても、同じように権限を設定できる。
r
: ディレクトリ内のファイル一覧が見られる。w
: ディレクトリ内にファイル等を作成・削除可能。x
: ディレクトリ内に(cd
で)移動可能。
- どう設定するか
- 通常 :
rwxr-xr-x
- 秘密なディレクトリ :
rwx------
- 特殊な設定 :
rwxrwxrwt
- 誰でも作成可能だが、作成した本人にしか削除できない。
- スティッキービット。
- 通常 :
権限の設定方法
chmod
コマンド- (管理者以外は)持ち主だけが設定可能。
- 設定方法その 1
u+x
,g-w
といった記号で設定する。- 対象は
u
、g
、o
。 - 権限は
+r
、-x
など。
- 設定方法その 2
- 数字の組(
755
など)で設定する。 r=4
,w=2
,x=1
として、許可した数字を合計する。
- 数字の組(
実習(2)
- ディレクトリやファイルの権限を確認する。
ls -l
で見てみる。- 自分の所属グループは
id
で確認する。
- 権限が正しく動くか確認する。
$ cd /
$ touch hoe.txt
touch: 'hoe.txt' に touch できません: 許可がありません
$ cd /tmp
$ touch hoe.txt
- 権限を変更し動作を確認する。
$ chmod u-r hoe.txt
$ less hoe.txt
hoe.txt: 許可がありません
- ディレクトリについても実施する。
コマンドの実体
- 今まで使用してきたコマンドはどう実装されているのか。
- 実体は、C 言語をコンパイルしてできた実行形式。
- どこかにファイルとして存在している。
- なぜ、
ls
と打つと実行できるのか。ls
という名前の実行形式ファイルを探して実行している。- 探す場所(ディレクトリ)は事前に定義されている。
- サーチパス
- 探す場所を環境変数
PATH
に設定している。 echo $PATH
で確認可能。
- 探す場所を環境変数
関連するコマンド
- サーチパスの確認。
$ echo $PATH
/opt/ros/melodic/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
- 実行形式ファイルの保存場所を表示する。
$ which ls
/bin/ls
- サーチパスにないファイルはどうすればよいか?
- サーチパスに加える。
$ PATH=$PATH:/home/usrs/moto/bin
$ export PATH
- 絶対パスや相対パスで実行する。
/home/usrs/moto/bin/mycommand
./mycommand
コマンドファイルの中身
実行できるファイルの条件
- 実行可能の権限が与えられている。
- 実行可能な形式のファイルである。
実行可能な形式
- コンパイル済のバイナリファイル。
- 実行コマンドの指定があるテキストファイル。
- ファイルの中身は
file
コマンドで表示可能。
$ file /bin/ls
/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=9567f9a28e66f4d7ec4baf31cfbf68d0410f0ae6, stripped
実行コマンドの指定付きファイル
- 別のコマンド用のプログラムファイル
- コンパイルするのではなく、直接実行する。
- いわゆるスクリプト言語など。
- ファイルの先頭に実行するコマンドを書く。
#!python
#!/usr/bin/python
# 2行目以降は python 用のプログラム
- 実行方法(実行権限を与えておくこと)
./filename.py
とするだけ。/usr/bin/python ./filename.py
としたのと同じ。
ちょっと特殊な例
- 以下のようなファイル
textfile.txt
を作成する。
#!/usr/bin/emacs -nw
textline
nextline
- 実行権限を与える。
$ chmod u+x textfile.txt
- 実行すると編集できる。
$ ./textfile.txt
(/usr/bin/emacs -nw textfile.txt と同じ)
実習(3)
- いろいろなコマンドの保存場所を探す。
$ which less
PATH
の値を変えてみる。- パスを追加、削除する。
export PATH
(内容の更新)を忘れないこと。
- 個人設定ファイル(
.bashrc
など)に書くと、次回ログイン時にも反映される。
- パスを追加、削除する。
- 実行コマンド指定付きテキストファイルを作成する。
- 実行権限を与えて実行してみる。