Linux

Linux 周辺のこと

Linux について。

(一部 CentOS を想定)

目次

基本的なこと

  • パスワードの変更 (password)。 上記コマンド実行後、古いパスワードおよび新しいパスワードを順番に入力。
  • ディレクトリの移動 (change directory)。
    • ホームディレクトリに移動。 ただし、ただの cd コマンドは、実際は環境変数 CDPATH に設定された path へ移動の意。
    • 1 つ上のディレクトリに移動 ( 2 つ上に行きたいときは、cd ../.. )
    • 1 つ前に居たディレクトリに移動
    • ルートディレクトリ ( / ) に移動
  • リンクを貼る (link)。
    • ハードリンクを貼る ハードリンクは実際にその場所にファイルのコピーを作る。但し、どちらか片方の中身を修正すればどちらにも変更が適用される。
    • シンボリックリンクを貼る シンボリックリンクは元ファイルへのショートカットを作る。ディスク容量は消費しない。
  • シンボリックリンク先の名前を調べる (readlink)。
    • シンボリックリンクの指し示す先を表示。
    • シンボリックリンクの指し示す先を (存在しなくても) 絶対パスで表示。
  • 一定時間ごとに決まったコマンドを実行する (watch)。 対称となる watch のオプションは -n <数字> で秒数を指定し、--differences で変更箇所のハイライトをするオプション。 この例では、sample.txt の中身を 10 秒ごとに表示している。
  • コマンドの履歴を活用する (history+ α)。
    (参照: シェルのコマンド履歴からの再利用、のいろいろ - 元RX-7乗りの適当な日々)
    • コマンドの履歴を表示する。 左から番号、日付、時間、コマンドが表示される。
    • history にあるコマンドを実行する。
      • 直前のコマンドを実行 (!!)。
      • <番号> 番目のコマンドを実行 (!<番号>)。 history にある 855 番のコマンドを実行。
      • <文字列>から始まるコマンドを実行 (!<文字列>)。 history の中にある最近実行されたコマンドで pw から始まるものを再実行する。
      • <文字列>を含むコマンドを実行 (!?<文字列>)。 history の中にある最近実行されたコマンドで pw を含むものが実行される。(上の例だと、which pwd とか)
      • 文字列の 1 回の置換後に実行 (:s)。 900 番目に実行したコマンドの最初の hoge の部分を fuga に変えて実行する。2 つある場合はある回数だけ :s/<文字列>/<文字列>/ コマンドを書く。
      • コマンド全体の hoge を fuga に変換したい場合は g を頭に付ける。
    • いきなり実行するのは怖いので一旦表示することもできる。 こうすると、直前の gn から始まるコマンドを表示する。
    • インタラクティブにコマンドを探して実行。
      Ctrl + R キーを押す。 と出るので、適当にコマンドを打つと、history にあるコマンドで一致するものが提示されるので欲しいコマンドが出てきたときに Enter を押す。q で何もせずに解除。
    • 直前のコマンドの引数 ($_) を使う。
      直前のコマンドの引数は $_ に入っている。なので、以下のようにディレクトリを作ってすぐにそのディレクトリに移動する場合など便利。以下の 2 通りの方法で可能。 && は前のコマンドが正しく実行された場合に後に続くコマンドを実行する、というコマンドですので、一行目の方が安全です。
  • システム全体の容量を確認する ( df ) -h オプション (h: human) で人に分かりやすいように適切なサイズで表示する。
  • ディスクの使用量を確認する (disk usage)。
    • キロバイトで表示
    • メガバイトで表示
    • 適当な単位系で表示
    • サイズ順で並べて表示

シェル (bash) スクリプト関連

シェルスクリプトは覚えると大変便利なので、是非勉強すべき。
  • Usage を作る。

    たとえ自分だけが使うとしても、将来の自分が理解できるようにスクリプトの使い方を Usage としてまとめておくべき。例えば、以下のようにファイルに付記する。
  • オプションを付ける。

    スクリプトにオプションを渡して自由度を高めておけば、便利。 上記スクリプトは以下の getopts 関数を使っても書けるが、ロングオプションを使えるなど、上記の方が自由度が高い。
  • awk の細かいこと (基本的なことは後日追加予定)
    • awk によって計算されて代入された変数には改行が含まれる (?)。
      (例) ここで、echo のオプション -n は、次の行を読み込まないオプション。

サーバー管理関連

  • 新しいユーザーを追加
  • ユーザーを削除 -r オプションで、ホームディレクトリとその中身も削除。
  • ユーザー名の変更
  • ホームディレクトリの変更
  • <ユーザー> のパスワードの変更 古いパスワードは訊かれないので、新しいパスワードを入力。
  • CentOS のバーション確認
  • メモリの確認
    • MB で表示
    • GB で表示
    • <時間> 秒ごとに表示
  • 詳しい CPU の情報
  • 詳しい メモリーの情報
  • ネットワーク関係の情報の確認
  • ハードディスクの増設等
    Linux はハードディスクのマウント (接続して使えるようにすること) を自分で行う必要がある。 以下では、2 TB を超えるハードディスクのパーティションを区切ったり、マウントしたりする方法を示す。
    • ディスクの確認 (parted) この例では、/dev/sda、/dev/sdb、/dev/sdc というデバイス名が確認できる。/dev/sdb のテーブルには何も表示されていないので、これが今回接続したばかりの HDD だということが分かる。
      また、2 TB 以下の HDD に関しては、 fdisk というコマンドが使える。違いに関しては、 Linuxer の備忘録 にあるので参考に。今後は parted が使えればいいと思う。
    • パーティションを区切る
      上の例に従って作業を説明する。 として、 parted の対話モードに入り、 として、パーティションを GPT テーブルで区切ることを宣言。実際に次のコマンドでパーティションを区切る。 (パーティションの名前やタイプは場合に応じて変える。以下は 1 パーティションに区切る場合。) quit で終了する。内容を確認すると、
    • ファイルシステムを作る (cf: Linux パーティションに mkfs でファイルシステムを作る )
      上の参照記事にあるように、ファイルシステムにはいくつかの種類があるが、今後使い続けられる ext4 を用いることにする。 ここで指定するのは、パーティション名である /dev/sdb1。デバイス全体である /dev/sdb を指定すると怒られる。 しばらく待っているとファイルシステムが構築される。
    • マウントする (cf: Linux ハードディスクをマウント (mount) する )
      マウントするディレクトリを作ってからマウントする。 ここでは、ルート (/) の下に BACKUP というディレクトリを作ってマウントした。
      ついでにアンマウントする方法は以下。 きちんとマウントできたかどうか df コマンドで確かめる。
    • マシンが起動時に毎回自動でマウントするように、/etc/fstab に書き込む。 まずは、すでにある fstab を確認すれば良いが、 参照記事 にあるように、デバイスの指定には複数の方法がある。mkfs でラベルを付ける方法や、UUID を使う方法など。ここでは、長くて見た目は悪いが重複することがないので、UUID を指定してマウントする。一方で、デバイス名を /dev/sdb1 で指定すると、デバイスの認識順によっては名前が変わってしまうので、よくない。
      UUID を確認するには、 blkid を実行する。 確認した UUID を使って /etc/fstab に書き込む。OS はファイルの上から順番に実行するので、記述する場所は適当な場所にする (最後でいいと思う)。全部で 6 フィールドあり、それぞれはスペースかタブで区切る。 fstab の設定がきちんとなされているか、一旦 umount して以下のコマンドきちんとマウントできるか確かめる。

ジョブ管理関連

torque + maui という組み合わせで使っている。 slurm の方がいいらしいので、今後導入したい、が、今のところこちら。 インストールがうまくいかない。(>_<)

サービスのリスタート

FTP 関連

  • 基本
    <FTP サーバー> に接続
    option
    • -n: ログインセッションを無効で接続。
    • -i: インタラクティブモードをオフで接続。
    <host> に接続する。
    転送モードをテキスト (ASCII モード) にする。(デフォルト)
    現在のディレクトリの一を表示する
    <ディレクトリ> に移動する。
    ローカル側のディレクトリを移動する
    <ディレクトリ> をサーバー側に作る。
    <ファイル名> を削除する
    サーバー上の <ファイル名> をローカル上に転送する。
    サーバー上の <複数のファイル名> をローカル上に転送する。
    ローカル上の <ファイル名> をサーバー上に転送する。
    ローカル上の <複数のファイル名> をサーバー上に転送する。
    ftp を終了する。

スクリプトで自動化する。

サンプルスクリプト ($ cat ftpscript.txt)
以上だと、パスワードを直接書き込むリスクがあるので、ftpscript.txt の作成を自動化し、パスワードは直接キーボードから入力させる (ファイルはすぐに削除されるが、一旦作られたファイルは暗号化されていないので、セキュリティ的に良くないかも。今後改善。)。自動化サンプルスクリプト ($ cat autoftp.sh)

サンプルスクリプト

解説はともかく使えそうなスクリプトがとりあえずできたら下に置いておく。

点数の分布をグラフにするスクリプト


別に gnuplot をインストールしておくこと。 一列の数値を読み取って、ガウス関数をかけてプロットする。

正多角形を描くスクリプト


正三角形
正方形
正五角形
正六角形
正七角形

別に gnuplot をインストールしておくこと。 などとすることで半径 1 の円とそれに内接する 正<整数>角形 を描き、右端の頂点からその他の頂点に直線を引くスクリプト。自動的に、Safari.app を開いて描けた図を表示する (最後の行は、Mac 用)。

to the top