LPIC 勉強記録 第1章 基本コマンドとファイルの操作

#第1章　基本コマンドとファイルの操作

`シェル`はLinuxで、OSとユーザの仲立ちをするユーザインタフェース
ユーザが入力したコマンドを解釈し、実行するインタープリターで、ユーザはシェルを通じてOSを扱うことができる
Linuxの標準シェルはbashだが、他のシェルを使用することもできる
ユーザはシェルに表示されたコマンドプロンプトにコマンドを入力する

シェルには、環境を調整する用途ごとに変数がある
ユーザが値を代入すると、シェルはその値に従って、環境を調整する

| 変数 | 説明 |
|:----------|:---------|
|シェル変数|設定されたシェルだけが使用する変数。子プロセスには引き継がれない|
|環境変数|設定されたシェルとそのシェルで起動したプログラムが使用する変数。子プロセスに引き継がれる|

現在のシェルで定義されているシェル変数の一覧を表示するには、`setコマンド`を引数なしで実行する
シェル変数の値を定義するには、`シェル変数名 = 値`とする
値の参照には、`$ シェル変数名`とする
シェル変数の削除には、`unsetコマンド`を使用する

環境変数は、`exportコマンド`で作成する
環境変数を表示する場合は、`envコマンド`あるいは`printenvコマンド`を使用する

`pwdコマンド`は現在の作業ディレクトリを絶対パスで表示する
`PWD変数`には、カレントディレクトリの絶対パスが格納されている
`echoコマンド`に`$ シェル変数名`とすることで、現在の作業ディレクトリを絶対パスで表示できる
`lsコマンド`は、指定されたディレクトリないのファイルをリスト表示する

`setコマンド`はオプションを指定せずに実行すると、シェル変数、シェル関数を一覧表示する
オプションを指定すると、シェルのパラメータなどを設定できる

| 主なオプション | 説明 |
|:----------|:---------|
|-o シェルオプション|シェルオプションを有効にする|
|+o シェルオプション|シェルオプションを無効にする|

| 主なシェルオプション | 説明 |
|:----------|:---------|
|noclobber(-C)|リダイレクションによる既存のファイルへの上書きを禁止する|
|histexpand(-H)|「!番号」による履歴参照を行う(デフォルトで有効)|

`exportコマンド`により環境変数を設定できる
環境変数は子プロセスとして起動したアプリケーションに引き継がれるので、アプリケーションから実行できる

bashでは、シェル変数`PS1`は`コマンドプロンプト`、シェル変数`PS2`は`2次プロンプト`として定義されている
`2次プロンプト`は、まだコマンドラインが完了せず、継続行であることを表す

| 主な表記 | 説明 |
|:----------|:---------|
|\s|シェルの名前|
|\v|bashのバージョン|
|\u|ユーザ名|
|\h|ホスト名のうちの最初の.まで|
|\w|現在の作業ディレクトリ|

ファイルシステム内を移動するには`cdコマンド`を使用する
`cdコマンド`の引数にディレクトリの指定を省略した場合は、ホームディレクトリに移動する

ログインユーザがyukoの場合、どのディレクトリで作業を行なっていても、`cd`や、`cd ~`、`cd ~yuko`のいずれかを実行すると、ホームディレクトリである`/home/yuko`へ移動する
ただし、`cd ~ユーザ名`は、現在のログインユーザにかかわらず、~以降に指定されたユーザのホームディレクトリへ移動するという意味になる

ディストリビューションに含まれるパッケージをインストールした場合は、`/usr/share/man`の下の該当するセクションのサブディレクトリに置かれる
ディストリビューションに含まれないソフトウェアをインターネットなどからダウンロードしてインストールした場合は、そのマニュアルの置かれるディレクトリは、`/usr/local/share/man`が標準的

`manコマンド`は引数で指定したコマンドのオンラインマニュアルを表示する
特定のセクションを指定する場合は、`manコマンド`の後に数字でセクションを指定する

| 主なオプション | 説明 |
|:----------|:---------|
|-f|キーワードと完全に一致するマニュアルが何セクションにあるか表示する|
|-k|キーワードを含むマニュアルが何セクションにあるか表示する|

コマンド実行履歴の保存先は、デフォルトで`~/.bash_history`が使用される
bashのシェル変数`HISTFILE`のデフォルト値は`~/.bash_history`

一時的に他のユーザの権限に切り替える場合に、`suコマンド`を使用する
suコマンドにより権限を切り替えると、切り替えた後のユーザ権限でファイルやディレクトリにアクセスすることになる
環境変数に設定した値などは、suコマンド実行前に利用していたユーザの環境の値が継承される
オプションとして、ユーザ名の前に`-`を指定することで、suコマンドで切り替えたユーザのログイン環境になる

| コマンド名 | 説明 |
|:----------|:---------|
|suコマンド|一時的にアカウントを別のユーザのものに切り替える|
|suduコマンド|事前に管理者から許可されている管理用コマンドを実行する|

`mkdirコマンド`はディレクトリを作成する
コマンドの引数に複数のディレクトリ名を指定すると、一度に複数のディレクトリを作成することができる
コマンドの引数に`-p`を指定すると、パス途中のディレクトリも作成できる

指定したファイルのアクセス時刻と修正時刻を現在の実行時刻に変更するコマンドとして、`touchコマンド`がある
実行時に指定したファイルが存在しない場合は、空ファイル(サイズ0)を新規に作成する

ファイルやディレクトリの移動には`mvコマンド`を使用する
最後の引数に指定されたディレクトリに移動元のファイルが同じ名前で移動する

| 主なオプション | 説明 |
|:----------|:---------|
|-i|移動先に同名ファイルが存在する場合、上書きするか確認する|
|-f|移動先に同名ファイルが存在しても、強制的に上書きする|

移動元ファイルの指定として、`*`を使用しディレクトリの中にあるすべてを移動する
最後の引数に存在しない名前を指定した場合は、その名前に変更する

ファイルやディレクトリを複製する場合は`cpコマンド`を使用する

| 主なオプション | 説明 |
|:----------|:---------|
|-f|コピー先に同名ファイルが存在しても、強制的に上書きする|
|-R(もしくは-r)|コピー元のディレクトリ階層をそのままコピーする|

`lsコマンド`は、ファイルやディレクトリの情報を一覧表示する
ディレクトリを指定しない場合は、カレントディレクトリの内容が一覧で表示される
通常ファイルを指定した場合は、そのファイル自身の名前や情報を表示する

`rmコマンド`を使用すると、ファイルを削除できる

| 主なオプション | 説明 |
|:----------|:---------|
|-i|ファイルを削除する前にユーザへ確認する|
|-f|ユーザへの確認なしに削除する|
|-R(もしくは-r)|指定されたディレクトリ内にファイル、ディレクトリが存在していてもすべて削除する|

`rmdirコマンド`で空のディレクトリを削除する

複数のファイルを1つにまとめたデータのことを`アーカイブファイル`と呼ぶ

`tarコマンド`は、アーカイブファイルの管理に使用される
オプションによって指定したファイルをアーカイブしたり、アーカイブファイルからファイルの情報を表示したり、ファイルを取り出したりする
`tarコマンド`実行時に`z`や`j`といったオプションをあわせて使うことで、圧縮を同時に行うことができる

| 主なオプション | 説明 |
|:----------|:---------|
|-c|アーカイブファイルを作成する|
|-t|アーカイブファイルの内容を表示する|
|-x|アーカイブファイルを展開する|
|-f|アーカイブファイル名を指定する|
|-v|詳細情報を表示する|
|-z|アーカイブに対して、gzipを使用する|

`cpioコマンド`
複数のファイルやディレクトリを1つにまとめる際に使用する
`ddコマンド`
ファイルシステムやディスク単位でバックアップする際に利用する

`moreコマンド`は1画面に収まらないファイルを制御することができる
`Spaceキー`を押すと次ページが表示され、ファイルの最終ページまで閲覧すると同時に終了する

1画面に収まらないファイルを表示するコマンドとして、`lessコマンド`がある
オンライマニュアルは`lessコマンド`を使用している

`catコマンド`は表示したいファイルのファイル名を引数に指定すると、ディスプレイに表示する
複数のファイルを指定すると、すべてのファイルが連続して表示される
`-nオプション`を使用すると、出力結果に行番号が振られる
引数を指定しないと、標準入力(キーボード)からデータを読み取る

|用語 | 説明 |
|:----------|:---------|
|標準入力|コマンドが入力を受け付ける標準の入力先は、キーボードに設定されている|
|標準出力|コマンドの標準の出力先は、ディスプレイに設定されている|
|標準エラー出力|コマンドのエラーメッセージは、通常の出力とは区別されるが、通常は標準出力と同様にディスプレイに出力される|

`nlコマンド`はファイルの内容に行番号を付けて表示する
`cat -n`では、空行も含めてすべての行に行番号をつけるが、`nl`では、空行を除いた行に行番号をつける

ファイルの種類を調べるには`fileコマンド`を使用する

`ファイル記述子`
0番は標準入力、1番は標準出力、2番は標準エラー出力を表す
プロセスが生成された時に用意される
`リダイレクション`は入出力先の切り替えが可能であり、`<`や`>`などの`メタキャラクタ`を使用する

`パイプ(|)`を使用することで、コマンドの処理結果(標準出力)を次のコマンドの標準出力に渡して、さらにデータを加工することができる

`<<`はヒアドキュメントと呼び、主に`シェルスクリプト`の中で利用される
コマンドの後ろに`<<文字列`を指定すると、指定した文字列が現れるまでの内容を、コマンドの標準入力として扱う

`/dev/nullファイル`は特殊なデバイスファイル
このファイルに書かれたものはすべて消去され、このファイルを読み込むと常に`EOF(End Of File)`が返る

`teeコマンド`は、標準入力から読み込んだデータを標準出力とファイルの両方に出力する

| 連続実行コマンド | 説明 |
|:----------|:---------|
|$ コマンド1 ; コマンド2|コマンド1、コマンド2を順々に実行する|
|$ コマンド1 && コマンド2|コマンド1が実行できれば、次のコマンド2を実行する|
|$ コマンド1 ｜｜ コマンド2|コマンド1が実行できなければ、次のコマンド2を実行する|

実行したコマンドが成功した場合、終了ステータスの値が`0`となる
成功しなかった場合は、終了ステータスの値は`0以外の数値`となる
終了ステータスの値は、`echo $?`で確認ができる

テキストデータ内の文字列検索を行うには、`grepコマンド`を使用する

| 主なオプション | 説明 |
|:----------|:---------|
|-v|パターンに一致しない行を表示する|
|-n|行番号を表示する|
|-i|大文字と小文字を区別しないで検索を行う|

`headコマンド`を使用すると、テキストファイルの先頭部分を表示する
行数をオプションで指定しなければ、デフォルトで10行目まで表示する
`-nオプション`で行数を指定することで、先頭からn行目までを表示する

`tailコマンド`を使用すると、テキストファイルの末尾部分を表示する
行数をオプションで指定しなければ、デフォルトで10行目まで表示する

`trコマンド`を使用すると、標準入力であるキーボードから入力した文字を指定した文字に変換して、標準出力であるディスプレイに表示することができる

| 主なオプション | 説明 |
|:----------|:---------|
|-d|文字群1で合致した文字を削除する|
|-s|文字群1で合致した文字の繰り返しを1文字に置き換える|
　
引数にファイルの指定はできないため、ファイルからデータを読み込んだり、また変換後のテキストをファイルに出力したりする場合は、`リダイレクション`を使用する

| OS | 改行コード | エスケープ文字での表示 |
|:-----------|:----------|:------------|
| Linux       | LF       | \n       |
| Windows     | CR + LF      | \r\n       |

単語単位の変換や削除には`sedコマンド`を使用する
入力ストリーム(ファイルまたはパイプラインからの入力)に対して、テキスト変換を行うために用いられる

| 主なコマンド | 説明 |
|:-----------|:----------|
| s/パターン/置換文字列    | 各行を対象に、最初にパターンに合致する文字列を置換文字列に変換       |
| s/パターン/置換文字列/g     | ファイル内全体を対象に、パターンに合致する文字列を置換文字列に変換 | 

ファイル内の行中の特定部分のみ取り出すには`cutコマンド`を使用する

| 主なオプション | 説明 |
|:-----------|:----------|
|-c|指定された位置の各文字だけを表示する|
|-d|-fと一緒に用い、フィールドの区切り文字を指定。デフォルトはタブ|
|-f|指定された各フィールドだけを表示する|

`/etc/passwd`は1ユーザに1行で登録されているため、行数が登録されているユーザ数となる

ファイル内のバイト数、単語数、行数を表示するには、`wcコマンド`を使用する

| 主なオプション | 説明 |
|:-----------|:----------|
|-c|バイト数だけを出力する|
|-l|行数だけを出力する|
|-w|単語数だけを出力する|

`odコマンド`は、ファイルの内容を8進数やその他の形式で表示するコマンド
バイナリファイルの内容を表示する場合や、テキストファイルに含まれる非印字コードを調べる時などに使用する

`splitコマンド`は、ファイルを決まった大きさに分割する
デフォルトでは、入力元ファイルを1,000行ずつ分割し、出力ファイルに書き込む
分割後の`ファイル名(プレフィックス)`は、指定がなければxが使用され、`接尾辞(サフィックス)`はaa、ab・・・が付与される

| 主なオプション | 説明 |
|:-----------|:----------|
|-l|出力の行数を指定する|
|-d|サフィックスを英字(aa、bb・・・)ではなく、数字(00、01・・・)にする|

入力されたデータに対して一定の処理をして、その結果として入力データに対応する値を返す関数を`ハッシュ関数`と呼ぶ
返された値を`ハッシュ値`という
ハッシュ値を計算するコマンドとして、`md5sum`、`sha256sum`、`sha512sum`などが提供されている

#終わりに
3周目終了！
コマンドとかオプションとか、全然覚えられていなくて、焦る焦る笑
テストまであと4日、間に合うか？