Linuxの操作

Linuxの勉強を始めたので，コマンドを備忘録として残しておく．

#コマンドラインの編集
##カーソル移動
|コマンド　|実行内容
|-------- |----------
|Ctrl+b   |後方に1文字移動
|Ctrl+f   |前方に1文字移動
|Ctrl+a   |行頭に移動
|Ctrl+e   |行末に移動
|Alt+b    |後方に1単語移動
|Alt+f    |後方に1単語移動

##文字の削除
|コマンド　|実行内容
|------------------- |---------------------------
|Backspace, Ctrl+h   |カーソル位置の後方の1文字を削除
|Delete,    Ctrl+d   |カーソル位置の1文字を削除
|Ctrl+w              |カーソル位置の後方の1単語を削除
|Ctrl+u              |カーソル位置から行頭までを削除
|Ctrl+k              |カーソル位置から行末までを削除
|Ctrl+y              |最後に削除した内容を挿入
|Ctrl+l              |画面に表示している内容を全て削除

##コマンドの履歴
|コマンド　     |実行内容
|------------ |-----------------------
|Ctrl+p, ↑   |1つ前のコマンド履歴に移動
|Ctrl+n, ↓   |次のコマンド履歴に移動
|Ctrl+r      |コマンド履歴を遡って検索<br>　(文字の入力)　 再検索<br>　Ctrl+r　　　 　1つ前の検索結果へ移動<br>　Enter 　　　 　検索結果を実行<br>　Esc　　　  　　 検索結果を表示して，コマンドラインに戻る<br>　Ctrl+g　　　　検索結果を破棄し．プロンプトに戻る

#ファイル/ディレクトリの操作
##表示
**ファイルの一覧表示**
`ls`コマンドで，ファイルやディレクトリを一覧表示できる．

|コマンド　     |実行内容
|--------      |-------
|-a            |隠しフィルも表示
|-l            |ファイルの詳細情報を表示
|-w            |指定した数値の横幅で表示
|-F            |ファイル種別を表示
|---quote-name |ファイル名を""で囲んで表示

**ファイルの内容表示**
`cat [オプション] <ファイル名>`

- 複数のファイルを指定すると，ファイルを連結して表示できる．
- ファイルを指定しないと．キーボードからの入力を待つ状態になる．**catコマンドを終了する（＝キーボードからの入力終了を指示する）には．Ctrl+dを実行**する．

|コマンド　     |実行内容
|--------      |-------
|-n            |行番号を表示

##作成
**ファイルの作成**
`touch <新しいファイル名1> <新しいファイル名2> ...`

- ファイルのタイムスタンプを更新する or 空ファイルを作成するために使われる．
- 既存のファイル名を指定しても内容が上書きされたり削除されたりしない．

**ディレクトリの作成**
`mkdir [オプション] <作成するディレクトリ名>`

|コマンド　     |実行内容
|--------      |-------
|-p            |存在しない親ディレクトリも含めて作成

##削除
`rm [オプション名] <削除するファイル名1> <削除するファイル名2> ...`

- パス名展開（*, ?）を利用して．複数ファイルを指定することもできる．

|コマンド　     |実行内容
|--------      |-------
|-r            |ディレクトリの削除
|-i            |実行前に削除してよいかの確認

`rmdir <ディレクトリ名>`

- 空のディレクトリを削除するコマンド，つまり，空でないディレクトリを指定するとエラーになる．
- rmdirコマンドを使うと，間違って隠しファイルを削除してしまうことを防げる．

##コピー
`copy [オプション] <コピー元> ... <コピー先>`

- ファイルのコピー
    - <コピー先>にディレクトリを指定すると，<コピー元>のファイル名を<コピー先>のディレクトリ内に，同一ファイル名でコピーする．
    - パス名展開（*, ?）を利用して，複数ファイルを同時にコピーできる．
- ディレクトリのコピー
    - <コピー先>のディレクトリが存在する：<コピー元>のディレクトリを<コピー先>の名前でコピーする．
    - <コピー先>のディレクトリが存在しない：<コピー元>のディレクトリを<コピー先>のディレクトリの中に名前を変えずにコピーする．

|コマンド　     |実行内容
|--------      |-------
|-r            |ディレクトリのコピー
|-i            |上書きしてよいかの確認

##移動
`mv [オプション] <移動元> ... <移動先>`

- mvコマンドを実行すると，<移動元>からファイルは存在しなくなる．また，<移動先>がディレクトリの場合，パス名展開（*, ?）を利用して複数ファイルを同時に移動できる．
    - <移動元>ファイル名，<移動先>ファイル名：ファイル名の変更をしていることになる．
    - <移動元>ファイル名，<移動先>ディレクトリ名：<移動先>のディレクトリの中に<移動元>のファイルを移動する．
    - <移動元>ディレクトリ名，<移動先>ディレクトリ名：<移動先>のディレクトリの中に<移動元>のディレクトリを移動する．cpコマンドと違い-rオプションはいらない．

|コマンド　     |実行内容
|--------      |-------
|-i            |上書きしてよいかの確認

##探索
**ディレクトリツリーから探索**
`find <探索開始ディレクトリ> <探索条件> <アクション>`

- <探索開始ディレクトリ>を起点に．<探索条件>を満たすファイルを探し，<アクション>を実行する．
- 探索条件を`-a`で区切って並べるとAND検索ができる．`-a`を省略して単に探索条件を並べて書いてもよい．
- アクションを`-print`とするとパス名を表示する．<アクション>がない場合は`-print`が指定されたとみなされるので省略してもよい．

|探索条件　  |実行内容
|--------   |-------
|-name <ファイル名>     |ファイル名を指定して探索（大文字小文字を区別する）
|-iname <ファイル名>     |ファイル名を指定して探索（大文字小文字を区別しない）
|-type f    |通常ファイルに絞って探索
|-type d    |ディレクトリに絞って探索
|-type l    |シンボリックリンクに絞って探索

**ファイル名DBから探索**
`locate [オプション] <検索パターン>`

- パス名の一部を指定してファイルを探す．
- 事前に作られたファイルパスのDBから検索するため高速．
- 作成してからしばらく経ったファイルを探すのに向いている．
- 複数の<探索パターン>を指定するとOR検索ができる．

|オプション　  |実行内容
|--------   |-------
|-i, -ignore-case  |大文字小文字を区別
|-b, -basename     |ファイル名だけを対象
|-A, -all          |AND検索


##スクロール表示
`less [オプション] <ファイル名>`

-　lessコマンドを実行すると，1画面に収まらないような長いファイルの内容を1画面ごとに表示して，上下にスクロールできる．
-　ファイル表示中に**「/」を入力**すると，画面の一番下の行が検索文字列の入力欄に変わる．

|コマンド　         |実行内容
|--------          |-------
|b, Alt+v          |1画面上にスクロール
|Space, f, Ctrl+v  |1画面下にスクロール
|k, Ctrl+p         |1行上にスクロール
|Enter, j, Ctrl+n  |1行下にスクロール
|q                 |lessコマンドの終了
|?<文字列>         |上方向に向かって検索
|/<文字列>         |下方向に向かって検索
|n                 |次の検索結果に移動
|N                 |前の検索結果に移動

##リンクを張る
`ln [オプション] <リンク元ファイル名> <リンク名>`

- ファイルに別名を付ける機能のこと．利用方法は「長いパス名を省略する」「複数バージョンのプログラムを共存させる」など．
- ハードリンクとシンボリックリンクの違いは，**ディレクトリに対して作成できない，異なるディスク間をまたいでリンクを張れないなどの制約があるかどうか**．
- ハードリンク
    - 1つのファイルの実体に複数の名前を付ける．
    - ハードリンクを作成したファイルを削除すると，指定したファイル名だけが取り除かれる．ハードリンクを持つファイルの実体は，すべてのハードリンクがなくなったときに削除される．
- シンボリックリンク
    - リンク先のパス名が書かれた小さな特殊ファイル．
    - シンボリックリンクを削除しても，リンク先のファイルには影響がない．
    - リンク先の実体ファイルだけ削除すると，「リンクが壊れた状態」になる．

#パーミッション
- ファイルに設定されている「誰に，どのような操作を許可するか」という権限のことをパーミッションという．
- ファイルとディレクトリでパーミッションの記号の意味が異なる．
    - ファイルの場合<br>　r ：読み取り<br>　w：書き込み<br>　x ：実行
    - ディレクトリの場合<br>　r ：ディレクトリに含まれるファイルの一覧取得<br>　w：ディレクトリの下にあるファイル・ディレクトリの作成/削除<br>　x ：ディレクトリをカレントディレクトリに設定
- ファイルの削除ができるかどうかは，ディレクトリのパーミッションで決まる．

##シンボルモード
`chmod [ugoa] [+-=] [rwx] <ファイル名>`

- パーミッションの一部だけを変更するときに便利．
- `[ugoa]`は，どのユーザに対するパーミッションを変更するのかを指定．ユーザ指定を省力すると，`a`を指定したものとみなされる．

|記号　 |意味
|------|-------
|u     |オーナー
|g     |グループ
|o     |その他のユーザ
|a     |ugoすべて

-  `[+-=]`は，権限を追加するのか禁止するのかを指定．

|記号　 |意味
|------|-------
|+     |権限を追加
|-     |権限を禁止
|=     |指定した権限と同じに設定

- 例えば，`chmod go=r file.txt`を実行した場合，file.txtのパーミッションが元々「-rwxrwxrwx」だと「-rwxr--r--」に変わる．

##数値モード
`chmod <8進数の数字> <ファイル名>`

- 元のパーミッションの値に関わらず新しいパーミッションへ変更するときに便利．
- `rwx`の操作のうち許可する操作を数字に置き換えて足す．足した値を「オーナー」「グループ」「その他のユーザ」の順に並べて指定する．

|意味　 |数字
|------|-------
|r     |4
|w     |2
|x     |1

- 例えば，`chmod 744 file.txt`を実行した場合，file.txtのパーミッションが元々「-rwxrwxrwx」だと「-rwxr--r--」に変わる．