1月6日 今日の学習記録

<目標>

  • 「新しいLINUXの教科書」を読み切ること

  • 次のプラクティスに進むこと

  • タイムキープをすること


<ファイルとディレクトリ>


ディレクトリ構造 (FHS)

  • /
    • bin (一般ユーザ/管理者の実行ファイル)
    • dev (デバイスを格納)
    • etc (アプリケーション/システムの設定ファイル)
    • home (ユーザ個人用のディレクトリ)
      • user a
      • user b
    • sbin (管理者向け実行ファイル)
    • temp (一時的なファイル)
    • usr (アプリケーションと付随するファイル、実行ファイル、ドキュメント、ライブラリ)
      • bin
      • lib
      • local
    • var (変化するデータ、データやログを保存)

複数ディスクがあってもディレクトリはひとつ

  • ディスクをマウントした場合ツリーのどこかに接続される

ls コマンドは複数ディレクトリを引数にあてられる

ls -F ファイル種別を表示


<ファイルの基本操作>


mikdir -p オプション

touch

  • 本来は既存ファイルのタイムスタンプを更新するためのコマンド
  • 既存ファイルがない場合はからのファイルが作成される

rm -r オプション

catコマンドについて

  • 表示するファイルを複数指定できる
  • -n オブションで行番号を表示
  • ファイルを入力しないと、文字の入力を求められる

lessコマンドで指定ファイルの内容をページごとに表示

  • less /etc/bash.bashrc
  • space:上へ b:下へ q :終了
  • / + 文字列 :ファイル内検索

cpコマンド

mvコマンド

lnコマンド

  • ハードリンク ln "ファイル名1" "ファイル名2" ファイル名1に別名をつける。元のファイル1が削除されてもファイル2を開けるとファイル1の内容が表示される。ファイル2が削除されて始めてファイル削除が完了する

  • -sオプションでシンボリックリンクを作成。その内容はリンク元ファイルへのパス。リンク元が削除されるとリンクが壊れたシンボリックリンクファイルが残る(aliasと同じ)。

<探す、調べる>


findコマンド find -name '*.text' - -name ファイル名(大文字小文字区別あり) - -iname ファイル名(大文字小文字区別なし) - -type -f 通常ファイル - -type -d ディレクトリ - -type -l シンボリックリンク メタ文字を使用する際はファイル名に'*.txt'のようにクオテーションで囲まなければ、展開されたファイルの内容が検索の対象になってしまうので注意。

locateコマンド

  • 専用データベースから検索するため高速
  • 事前にデータベースを# updatedbで更新が必要
  • -iオプション(--ignore-case)で大文字小文字を無視できる
  • -bオプション(--basename)でファイル名のみを検索する。通常のlocateはバス名まで検索してしまうので要注意。
  • 検索パターン(ワード)を複数並べてor検索
  • or 検索に-Aオプション(-all)で*:and検索**

--helpオプションとmanコマンド

  • コマンド名 --helpでコマンドの概要が表示される
  • man コマンド名でコマンドの公式マニュアルが表示される。マニュアルはlessコマンで表示されるのでスペース(下へ)、ctrl + b(上へ)、q(終了)で操作する。
  • -k インストールされたマニュアル内のキーワード検索、"copy"など機能を持ったコマンドを検索する

whichコマンド

  • コマンド(パスの通った実行ファイル)のフルパスを表示
  • -a オプションで重複する全ファイルを表示

言語設定

  • 日本語のファイルはコマンドの前に"LANG=ja,UTF-8"を追加して表示
  • 英語は'LANG=C'を追加


テキストエディタ


ファイルにはテキストファイルとバイナリファイルがある

  • 人間が編集可能で互換性もあるテキストファイルは使いやすい
  • 終わり以降の空白の行の行頭を~で示している。
  • :q:終了
  • :wファイルを上書き保存する
  • :w<ファイル名>名前を付けて保存する
  • :q!ファイルを保存せずにVimを終了する


  • h 左に移動する
  • j下に移動する
  • k上に移動する
  • l右に移動する


  • xカーソル位置の文字を削除する
  • iカーソル位置の左に文字を追加する
  • aカーソル位置の右に文字を追加する


  • w前方に単語1つぶん移動する
  • b後方に単語1つぶん移動する
  • Wスペース区切りで前方に単語1つぶん移動する
  • Bスペース区切りで後方に単語1つぶん移動する


  • 0 行頭に移動する
  • $ 行末に移動する


  • gg 1行目に移動する

  • G最後の行に移動する
  • <数字>G<数字>行目に移動する


  • デリート=カット、

  • yヤンク=コピー、
  • pプット=ペースト
  • ヤンクはデリートのdyにおきかえるだけ

  • d$行末までをデリート

  • d0行頭までをデリート
  • x、dl1文字をデリート
  • dw単語1つをデリート
  • dgg最初の行までをデリート
  • dG最後の行までをデリート


  • yy現在カーソルのある行をヤンク

  • dd現在カーソルのある行をデリート


  • j下の行と連結

  • u undo
  • ctrl+r redo


  • /<文字列>下方向に向かって<文字列>を検索する

  • ?<文字列>上方向に向かって<文字列>を検索する
  • n次の検索結果に移動する
  • N前の検索結果に移動する


  • %s/<置換元文字列>/<置換後文字列>/g 文字列を置換する


  • :help ヘルプ表示

  • :help <コマンド> コマンドの詳細表示


bashの設定>


コマンドのエイリアス化 alias<名前>='<コマンド>'

alias la='ls -a' / alias ll='ls -l' / alias ls ='ls -F'

  • type コマンドを使ってそのコマンドがエイリアスかどうかわかる。
  • unaliasエイリアス解除
  • エイリアスを回避する時は、\コマンドあるいはcommand コマンドでコマンドを明示してする。

setコマンド

  • オプションのオンとオフ。よく理解できなかった

shoptコマンド

  • setと機能は同じだが、対象となるオプションが異なる。

シェル変数の設定

  • <変数>=<値>
  • var='text variable'
  • 変数にスペースが入る場合は'で閉じる。=の両側にはスペースをいれない。

PS1=>bash

  • プロンプトを>bashに変更
  • \u \w \$はユーザー名、ホームディレクトリ、
  • \d「曜日月日」という形式の日付
  • \h ホスト名のうち、最初の.までの部分
  • \H ホスト名
  • \t HH:MM:SS形式の現在時刻
  • \u ユーザ名
  • \w カレントディレクト
  • \W カレントディレクトリの末尾のディレクトリ名
  • \$rootユーザの場合は#、それ以外のユーザの場合は$
  • \\ \そのもの

PATH="$PATH:̃~ /bin"

  • 自作して/binに保存したファイルを直接実行できる

コマンドライン関連シェル変数

外部コマンドと組み込みコマンド

  • シェル自体に内蔵しているコマンドを組み込みコマンドという
  • ここで外部コマンドは、シェルのいわば「外側」で実行されます。そのため次の図のように、現在設定されているシェル変数の値を外部コマンドは参照することができません。
  • 外部コマンドからも値を参照できるようにした変数を環境変数と言います。
  • printenv 環境変数の表示
  • export (変数) シェル変数を環境変数に設定 export LESS='==no-init'

ログイン時の流れ

  • bashをログインシェルとして起動したときは、まず/etc/profileが読み込まれ、続いて̃/.bash_profileが読み込まれます。bashはこれらのファイルに書かれた内容を実行します。bashの設定をカスタマイズするには、これら設定ファイルを、Vimなどのエディタを使って修正します。
  • 、̃/.bash_profileと̃/.bashrcは、どちらもユーザ個別のbashの設定ファイルです。
  • ̃/.bash_profileはログインしたときだけ読み込まれ、̃/.bashrcはbashを起動するたびに読み込まれるという違いがあります。そのため、ログイン時に一度だけ設定すればよい項目は̃/.bash_profileに書き、それ以外の、bashを起動するたびに毎回設定する必要がある項目は̃/.bashrcに書きます。しかし、実際には多くの設定はbashを起動するたびに毎回設定する必要があるため、基本的には̃/.bashrcに書いておけば問題ありません。

  • 設定を行うシェルとは別にもう1つシェルを起動しておくことをお勧めします。

  • 設定変更を行う前に別のターミナルエミュレータを起動しておきます。sshでログインして作業している場合は、設定変更用とは別にもう1つ別にsshでログインしておき、そちらはログアウトしないようにしておく、とすればよいでしょう。

  • `PS1='[\u@\h]\W\t\$'でプロンプトが変更される

    <ファイルパーミッション、スーパーユーザ>

    group <ユーザ名>

  • ユーザの所属するグループを表示

ディレクトリのパーミッション

su -は一般ユーザーの環境変数を受け継がない

visudoでsudoファイル /etc/sudoersに変更が加わる加わる

  • ユーザ名ALL=(ALL)ALL

tmuxエミュレータ

  • ターミナルマルチプレクサ 一つの端末の中に複数の仮想端末を開ける


<プロセスとジョブ>

プロセスとは これまで多くのコマンドを紹介してきましたが、これらのコマンドの実体はディスク上に保存されたファイルです。シェルからコマンドを実行すると、Linuxカーネルはディスクから実行ファイルを読み出してメモリに格納し、そのメモリ内容に従ってCPUがプログラムを実行します。ここで、メモリ上で実行状態にあるプログラムのことを「プロセス」と呼びます。
<ソース> 三宅 英明,大角 祐介. 新しいLinuxの教科書 (Japanese Edition) (p. 288).

  • LINUXのプロセスにはプロセスIDが振られている
  • プロセスには必ず親子関係がある。無からは生まれない。
  • プロセス表示 psコマンド xで別ターミナル、ターミナルに接続していないdaemonのプロセスを表示
  • fでプロセスの親子関係を表示
  • ttyはターミナルを示す。 -aで全てのプロセスを表示
  • xpsコマンドを実行したユーザのプロセスすべてを表示uxpsコマンドを実行したユーザのプロセスすべてを、詳細情報を合わせて表示axすべてのユーザのプロセスを表示auxすべてのユーザのプロセスを、詳細情報を合わせて表示auxwwauxオプションで、コマンドラインが長くターミナルの右端で切れてしまう際に、表示幅を制限せずすべて表示

ジョブとは

  • シェルから見た処理の単位をジョブと呼びます。シェルのコマンドラインに入力している1つの行が、1つのジョブにあたります。
  • ctrl +zでジョブ停止
  • jobsで現在のジョブを表示 -lを追加してプロセスIDを表示する
  • fg%<ジョブ番号>で停止中のジョブをフォアグラウンドする
  • bg%<ジョブ番号>ジョブをバックグランドにして処理を続行する
  • &バックグラウンド処理を意味する。
  • コマンドに&をつけることで初めからバックグラウンドで実行される
  • ジョブの操作コマンドであるjobs、fg、bgはすべてシェルの組み込みコマンドです。

ジョブの終了

  • フォアグランドはctrl +c
  • バックグラウンドはkill %(ジョブ番号)
  • プロセス終了はkill (プロセス番号)

killコマンドは「シグナルを送るコマンド」

  • シグナルは色々あり、終了、停止、再起動などがある
  • その中で終了を意味するSIGTERMがデフォルト値になっているため kill(プロセス番号)でプロセスが終了する。
  • ctrl +cctrl +zも同様にシグナルを送っている。
  • kill -lでシグナルを一覧できる。
  • 9:SIGKILLカーネルのプロセスを直接停止する。そのためまずは通常のSIGTERMで停止をした方が安全。


<標準入出力とパイプライン>

  • stdin=標準入力stdout=標準出力stderr=標準エラー出力
  • これらの標準入出力はシェルで変更 =リダイレクト
  • < (ファイル)をすることでコマンドにファイルの内容を入力
  • > (ファイル)をすることでファイルに出力出力
  • >をファイルに出力した場合、エラーは端末に出力されるため処理の結果が正常かエラーかがわかる。
  • エラーメッセージは2>を使った出力する。
  • >2>を同時に設定することもできる。
  • メッセージを 2>&1と設定すると標準出力と標準エラー出力を同じファイルに出力できる。 $ ls /xxxxx > resul.txt 2>&1
  • は標準出力、チャンネル番号は0標準入力、2標準エラー出力
  • >>で上書きをせずに追記をする
  • set -o noclobber でリダイレクトでの追記を防止できる

dev/null

  • dev/nullに入力、入力を空にする
  • dev/nullに出力、消えてなくなる

パイプライン

  • lessは標準出力のみ受け付けるのでエラー出力を入力する場合 2>&1 | lessを使用する。

フィルタ

  • head デフォルトでファイル内の行頭10行を出力(nオプションで行数を指定)
  • tail デフォルトでファイル内の末尾10行を出力(nオプションで行数を指定)
  • grep 指定した検索パターンの結果を出力
  • sort 順番にならべかえる
  • uniq 重複した行を取り除く
  • tac 逆順に出力する
  • wc 行数やバイト数を出力する

tailコマンドで末尾への追記を監視する

  • tailは実行すると終了するまで止まらない

sedコマンド 文字の置換

  • Stream Editor 非対話型エディタ
  • 編集操作を指定し、標準出力に出力する

awk

  • テキストの編集操作を行うが、sedよりももっと高度な処理を行う

.sourceコマンド .コマンンド

  • ファイルの記述をそのまま実行する。