[TOC]

1. ターミナルコマンド

1.1. 7z

  • 概要

    高い圧縮率

  • インストール

    brew install p7zip

  • 使用方法:

    解凍:7z x 2017男性.7z

  • 参考資料

    7z Macでの使い方

1.2. ssh

  • オプション

    参考UR

    • L (ex) ssh -L ローカル (クライアント) ホスト上の指定の TCP ポートまたはUnixソケットが、与えられたリモートホスト上のポートに転送されるよう指定します.
    • -f
      ssh がコマンドを実行する直前に、バックグラウンドに移行するよう指示します。これは-n オプションも含んでいます。
    • -N リモートコマンドを実行しません。これはポート転送のみをおこないたい場合に便利です。

1.3. grep

  • 自分のMacでは+(直前の文字・単語の1回以上の繰り返し)は使えない
  • 正規表現
    grep seg[0-9]*\.csv

1.4. top

  • 表示項目を限定

    • 表示単位の変換(MiB->GB->Peta) 総合情報:E,プロセス情報e

    • 更新頻度の変更 起動時:top -d 5 ->5秒おきに更新dはdelay-timeの略 起動後:sを押すとchange delay from ?? to と表示されるので更新間隔を指定

    • ユーザー(user)指定 起動時:top -u {username}, 起動後:uを押すとWhich Userと聞かれるので指定したいユーザー名を入力

    • コマンドをオプションを含めて表示 起動時:top -c

      起動後:cを押すとCOMMANDにオプションも含めて実行コマンドが表示される

    • 表示項目を指定(プロセスID, PIDやCPU使用率,コマンド名など) 起動後:f(formatの略)を入力すると表示項目を選択できる画面に移行.使い方は一番上に書いてある.(移動は方向キー, dスペースキーで項目を表示切り替え,sでソート項目の指定qで設定完了)

  • cpu使用率をみる
    top + 1

    • 仮想メモリはVIRT、物理メモリはRESで確認(defaultの単位はKB)

    • プロセスを強制終了する

      kコマンドの後PID入力→シグナル番号入力(強制終了は9)

1.5. ps(process status)

  • 用語の定義

    • 端末(TTYやTT)
      • 仮想端末(pts/{num})
        Linux(リモートログイン時)→(tmuxを含めた)各window毎に与えられる
      • 実端末(ttys)
        (Local Mac等)→(tmuxを含めた)各window毎に与えられる
  • 基本
    option無しでは実端末+現在の端末上の現在実行中のプロセスを表示

  • Option

    • u (ps u)
      自分が作成した全ての仮想端末+実端末のプロセスをcpuやメモリの資料率も含めて表示
    • a (all user)
      全てのユーザーのprocessを表示
  • 便利機能

    • プロセスの起動時刻を調べる

      ps -eo lstart,pid,args -e:全プロセスを表示 -o:指定したリスト順の出力形式で表示する(lstart->プロセスの起動日時,pid ->プロセスID, args->文字列の引き数がついたコマンド)

1.6. lsof (ls open file)

  • 基本
       読み取り権限があるユーザーが開いたportを確認
    
  • $lsof -i
    プロセスが使用してるportを調べる.NAME->ファイルorポート
  • 特定のport番号が空いているか確認
    lsof -i:{port}
  • ポート{port}が使われていたら削除 lsof -ti:{port} | xargs kill -9
    ( -t プロセスidだけ取得 )

1.7. ln

  • example
    • create symbolic link between fils() %ln -s /absolute/path/to/file or Directory/ /absolute/path/to/symlink(exclude /) -s symbolic link
      or
      %cd /path/to/symlink
      %ln -s /relative/path/to/file or Directory/ ./
    • remove symbolic link
      unlink /path/to/symbolic link
    • remove all symbolic links in directory %find /path/to/symlink/directory/ -type l -delete
      %cd /path/to/symlink/directory
      % find ./

1.8. tree

ディレクトリを階層的に表示

オプション-N:文字化け防止, -L:深さを指定, -I directory:表示させたくないディレクトリorファイル,-d:ディレクトリのみ表示

(実行例)tree -Nd -I 'Ras01|Ras04|Ras07'

1.9. find

  • share directory and file recursevely(no change on symbolic link)
    (Directory->rwx, files(.py, image)->rw, .sh->rwx)
# give "Others" the right to read, write and xecute Directorys
find /path/to/dir -type d | xargs -I% chmod o=rwx % 
# give "Others" the right to read and write filess
find /path/to/dir -type f | xargs -I% chmod o=rw %
# give "Others" the right to read, write and xecute *.sh files
find /path/to/dir -type f -iname "*.sh" | xargs -I% chmod o=rwx %

変更されたくないないファイルやディレクトリを共有
・変更されたくないディレクトリは読み取りと実行権限だけ与える
変更とはファイル・ディレクトリの削除・追加・移動
・変更されたくないファイルは読み取り権限だけ与える
・*.shファイルのみ読み込みと実行権限を与える
  • findで検索したファイルを一括で移動させる find -option | xargs -I% mv % to_path

    • xargs
      • -I replace-str
        Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate input items; instead the separator is the newlinecharacter. Implies -x and -L 1.
  • 特定の文字列を含むファイルや行を表示

      #aliasという文字列を含むファイルパスを表示
      # -iname "*"で隠しファイルも表示
      # -lでファイル名のみ表示
      find ~/ -type f -name "*" -maxdepth 1 | xargs grep -l alias
    
      #aliasという文字列を含むファイルパスと行番号を表示
      #-nで行番号も表示
      find ~/ -type f -name "*" -maxdepth 1 | xargs grep -n alias
    
  • Option
    • Set the depth of serch
      -mindepth/-maxdepth
    • Base of file(not path) name matches shell pattern.(case insentitive)
      -name(-iname)
      • *-> any number of characters
      • ?-> any single character
    • file/directory
      -type f/d

2. コマンド逆引き

2.1. ファイル転送を再開するコマンド

dsサーバーバーの /data0/akirat/tmpディレクトリを /home/akiratに差分のみコピー rsync -av -e ssh ds:/data0/akirat/tmp /Users/akirat/ ※ディレクトリ配下の全てのディレクトリやファイルもコピーされる ※tmpの後に/をつけるとtmpディレクトリの中にあるファイルやディレクトリのみコピー ※-vは転送対象になったファイル、転送量等を表示 ※-aは“再帰的にコピー“,”シンボリックリンクをそのままコピー“、”パーミッションの保持“などの複数のオプションをつけるのと等価(参考URL)

2.2. Linuxでディレクトリ構造のみコピー

https://ex1.m-yabe.com/archives/2039

2.3. 再帰的にディレクトリのファイルのみにシンボリックリンクを貼る方法

  • 動機
    シンボリックで作成されたディレクトリに新しいファイルやフォルダを追加すると元ディレクトリにファイルやフォルダが追加される仕様になっている. そのため,複数人で共有しているデータ(ディレクトリ)に対してシンボリックリンクを用いてディレクトリを作成した場合,そのディレクトリにファイルやディレクトリを追加するのは好ましくない. そのため,シンボリックで作成されたディレクトリに新しいファイルやフォルダを追加しても元ディレクトリに追加されない方法を紹介する.

  • 手順
    /yyy/yyy/dest_dirのディレクトリにorigin_dirのシンボリックリンクを作成する方法(以下,origin_dirの絶対パスを/xxx/xxx/origin_dirと表す)

    • ディレクトリ構造のみをコピー
      rsync -avz --include "*/" --exclude "*" /xxx/xxx/origin_dir /yyy/yyy/dest_dir
    • 変数の定義(TOの末尾のorigin_dirを忘れないこと)
      FROM=/xxx/xxx/origin_dir
      TO=/yyy/yyy/dest_dir/origin_dir
    • ファイルのみシンボリックを貼る
      find $FROM -type f | sed -e 's#'$FROM'/##'| xargs -I% ln -s $FROM/% $TO/%
  • コマンドの簡単な解説

    • find
      $FROM以下のファイルの絶対パスを表示
    • sed
      $FROMという文字列を空白で置換
    • xargs
      パイプ“|”で渡された引数を%として保持し,lnコマンドを実行.つまり $FROM/%のシンボリックリンクを$TO/%に貼る.

2.4. スクリプト(プロセス)を実行した時刻を調べる

  • 背景 pythonコードの中でログを残すのを忘れていたりtime pythonなどしてなくてpythonコードを実行した時間が分からない場合に調べる方法(ちなみにtopコマンドのTIME欄はCPUを使用している時間なのでプログラムを実行させた時間と異なる) ※既に実行が終わったプロセスの実行時間は分からない

  • 手順

    1. プロセスIDを調べる

      $pgrep -a -u akirat -f "python.*IntroVAE32sPy_v02.py"
      >203548 python IntroVAE32sPy_v02.py --ver 0 -w 15女性 -i 顔+腕 --gpus 1
      >203549 python IntroVAE32sPy_v02.py --ver 0 -w 15女性 -i 顔+肩 --gpus 1
      >203566 python IntroVAE32sPy_v02.py --ver 0 -w 15女性 -i 顔+足 --gpus 1
      >...
      

      -a->コマンドラインも表示, -u->Userを指定, -f(--full)->コマンドラインを正規表現で絞り込みマッチ 並列計算等で1実行で複数プロセスが立ち上がる場合があるので,PIDのみ取得してtopコマンドで目的のプロセスを取得

      #正規表現にマッチしたPIDをカンマ区切りで取得 -d(--delimiter)
      $pgrep -d',' -u akirat -f "python.*IntroVAE32sPy_v02.py"
      >337603,329249,335298
      #特定のPIDのみを5秒毎に監視 -d Delay-time -c Command-Line 
      $top -c -d 5 -p 337603,329249,335298
      

      Command>top>表示項目を限定を見るとtopコマンドの表示項目を絞ることができる.

    2. プロセスの開始時間を表示

      #特定のプロセスIDの起動時間(lstart),経過時間(etime),args(コマンド)を表示
      #※-o:出力フォーマットの指定
      ps -o lstart,etime,pid,args -p 337603,335298
                       STARTED     ELAPSED    PID COMMAND
      >Mon Dec 31 13:23:15 2018  3-09:51:33 335298 python IntroVAE32sPy_v02.py --ver 0 -w 15女性 -i 顔+腕 --gpus 1
      >Mon Dec 31 13:24:05 2018  3-09:50:43 337603 python IntroVAE32sPy_v02.py --ver 0 -w 15女性 -i 顔+肩 --gpus 1
      

      ※出力フォーマット一部

      | コード | ヘッダ | 意味 | | ------ | ------- | ---------------------------------- | | lstart | STARTED | コマンドが起動された時刻 | | etime | ELAPSED | プロセスが起動されてからの経過時間 | | args | COMMAND | 文字列の引き数がついたコマンド |

      psコマンドマニュアル(-oオプションについて詳しい) psコマンド出力フォーマット(-o)

3. Linuxサーバー

3.1. 頻出コマンド備忘録

内容 コマンド
CentOSのバージョンを調べる
LinuxのOSバージョン確認方法
$cat /etc/redhat-release
接続可能なサーバーのホスト名を調べる $cat /etc/hosts
新規アカウト作成 $ sudo su -
$useradd username
$passwd username

3.2. コマンド備忘録

内容 コマンド
サーバーの接続確認 ping hostname

3.3. 使用の基礎

3.3.1. 使用する際の注意点

  • ストレージ(HDDやSSDなどのことで画像やテキストなどのプログララムの出力を保存する領域)の空きがあるか確認する必要がある

  • Linuxサーバーを使用する際にはCPU(制御・演算を行うデバイス)に負荷がかかり過ぎていないか,メモリ(データやプログラムを一時的に記憶するデバイス)に空きがあるか確認する必要があります

  • GPUを使用する場合はGPUのメモリの使用状況も確認する必要あり

3.3.2. ストレージ

プログラム等で出力ファイルがある場合は実行前にストレージの空きがあるか確認しましょう MacだとAppleマーク>このMacについて>ストレージ等で確認することが出来ます. Linuxサーバーの場合はdf -hを用いることで調べることができます(-hhuman-readableの略) 例えばdsサーバーの場合

$df -h
>ファイルシス   サイズ  使用  残り 使用% マウント位置
>/dev/md126p3     208G  113G   96G   55% /
>..
>/dev/sda1         59T  7.0T   52T   12% /data0

となってあり,/以下(/home/akirat/も含まれる)のストレージは208Gあってそのうち113G使用されており残り113G使用可能なことが分かります.同様に/data059Tの容量があることが分かります.

3.3.3. CPU

物理的に存在するコア数以上を動かさない 各CPUに負荷をかけすぎない(稼働率が100%以上になることようにしない)

  • 使用可能なコア数の確認コマンドlscpu使用例と見方(gtxの場合)
$lscpu
>...
>CPU(s):                56
>コアあたりのスレッド数:2
>ソケットあたりのコア数:14
>Socket(s):             2
>...
>Model name:            Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz

ソケット(マザーボード上にある、CPUを取り付ける場所)が2つあり各ソケットにコア(CPU)が14個あるので物理的に存在するコア(CPU)の数は28個. またコアあたりスレッド(CPUで認識されるコア数=論理コア数)が2つなので,サーバーが認識してるコア数(論理コア数)は28*2=56個. 物理的に28コアしかないのにそれを倍に見せかける(一人二役をさせる技術)をハイパースレッディングという.

※(CPU)コア->CPU内にある演算回路のことで,CPUの中には(CPU)コアを複数持つCPUが存在する.(2コアのデュアルコアや4コアのクアッドコアなど)

  • 使用中の論理コアの使用率を確認する方法 $topコマンドを押した後に数字の1を入力するgtxサーバーの例

    >Tasks: 655 total,  24 running, 623 sleeping,   0 stopped,   8 zombie
    >%Cpu0  : 22.4 us, 28.8 sy,  0.0 ni, 48.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    >%Cpu1  : 46.5 us, 14.7 sy,  0.0 ni, 38.2 id,  0.0 wa,  0.0 hi,  0.6 si,  0.0 st
    >...
    

    論理コアが0番目のCPUが22.4%稼働している.

3.3.4. メモリ

使用可能なメモリ(available)を残す

  • 使用可能なメモリはfree -hコマンド出力の Mem:行のavailableの項目 メモリ全体はMem:行のtotalの部分(hオプションはhumanの略) gtxサーバーの例

    $free -h
    >              total        used        free      shared  buff/cache   >available
    >Mem:           250G         24G         21G        397M        204G        224G
    >Swap:           31G          0B         31G
    

    Swap:はメモリが足りなくなった時に使用されるHDのデータ領域でI/O(入出力)のパフォーマンスが遅い ※プロセスがデータ領域を使用する際には使用中のメモリー(Mem:used)を始めに確保し,空きメモリ(Mem:free)がある限り空き容量をメモリの中でI/Oのパフォーマンスが高いキャッシュ(Mem:行buff/cache)に割り当てる.そのためfreeコマンドでは空きメモリ(Mem:free)は少なく表示されるが,新しいジョブが投入されたときには,キャッシュ(Mem:行buff/cache)の一部はすぐに開放し新しいジョブのデータ領域として使用できる.その領域がfree -hコマンド Mem:行のavailable項目 参考文献 Linux メモリの基礎 参考文献 メモリの図解 詳しく説明

3.3.5. GPU

GPUメモリ容量以上使わない(プログラムが自動停止する)

  • GPUの利用可能メモリを確認する方法nvidia-smi(5秒おきに更新したい場合はnvidia-smi -l 5lはloopの略) gtxサーバーの例

    $nvidia-smi
    >Wed Jan  2 00:46:39 2019       
    >+-----------------------------------------------------------------------------+
    >| NVIDIA-SMI 410.48                 Driver Version: 410.48                    |
    >|-------------------------------+----------------------+----------------------+
    >| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    >| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    >|===============================+======================+======================|
    >|   0  GeForce GTX 108...  Off  | 00000000:18:00.0 Off |                  N/A |
    >| 23%   25C    P8     8W / 250W |     10MiB / 11178MiB |      0%      Default |
    >+-------------------------------+----------------------+----------------------+
    >...
    >+-----------------------------------------------------------------------------+
    >| Processes:                                                       GPU Memory |
    >|  GPU       PID   Type   Process name                             Usage      |
    >|=============================================================================|
    >|    1    329249      C   python                                      1703MiB |
    >|    1    331339      C   python                                      1703MiB |
    

    Gls

    PUの0番目が「GeForce GTX 1080 Ti」(nvidia-smi -Lコマンドで一覧表示)でメモリ11178MiB中10MiBのみ使用されている.プロセスID(PID)329249がGPUの1番目を使用しててメモリは1703MiB使用

3.4. トラブルシューティング

3.4.1. 日本語が文字化けする時の対処法

以下を~/.bash_profileに書き込む

# use Japanese, but output is English
export LC_CTYPE=ja_JP.UTF-8
export LANG=en_US.UTF-8

3.5. 使用Tips

3.5.1. .bash_profileと.bashrcの使い分け

  • sshログイン時 .bash_profile->.bashrcの順に実行される
  • ログインしてる状況で新たにシェル(bash)が起動した際は.bashrcのみ実行

参考資料

3.5.2. root権限がないサーバーでパッケージをソールビルドしてpargeで管理

結局使わなかったし動作確認したか覚えてないので,メモのみ残す.

  1. ソフトをインストールするディレクトリを作成

    通常は/usr/bin(管理者がyumでインストールしたもの)もしくは/usr/local/bin(管理者がコンパイルしてインストールしたもの)にインストールするがこのディレクトリはroot権限がないと書き込みできないので,個人用のソフトをインストールディレクトリ~/local/binを作成.(自分で決めてよいがコマンドは適宜読み替えが必要)

    mkdir -p ~/local/bin
    cd ~/local/bin
    

    ソフト管理を行うporgeのインストール

  2. ソースからコンパイルしてインストールしたソフトの管理を行うソフトporgeを最初にインストールする.

    1. CentOSのバージョン確認

      $g++ -v
      >COLLECT_GCC=g++
      >COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
      

      ここで, /usr/libexec/gcc/x86_64_redhat-linuxが存在することを確認する.(以下x86_64_redhat-linuxは適当なものに読み替える)

  1. ~/local/binにパスを通す

    ~/.bashrcに以下を追記

    #~/local/binにパスを通す 2018/11/10
    export PATH=$HOME/local/bin:$PATH
    
  2. 設定を反映させる

    $sourch ~/.bashrc

  1. porgeインストール

    cd ~/local/bin
    wget http://sourceforge.net/projects/porg/files/porg-0.8.tar.gz
    tar xf porg-0.8.tar.gz
    cd porg-0.8
    nice -n 19 ./configure --host=x86_64-redhat-linux --build=x86_64-redhat-linux --prefix=$HOME/local CFLAGS='-march=core2 -O3' --disable-grop --with-porg-logdir=$HOME/local/root/var/log/porg/
    nice -n 19 make
    nice -n 19 make install
    nice -n 19 make logme
    

    root権限がないサーバーでporgeでインストール

Last modified by akirat1993 2020-01-09 11:24:34
Created by akirat1993 2019-05-26 02:56:51

results matching ""

    No results matching ""