CentOS 7にpipをインストールする場合、epelを導入することでyumからインストールすることができる。
yum install epel-release yum install python-pip

CentOS 7にpipをインストールする場合、epelを導入することでyumからインストールすることができる。
yum install epel-release yum install python-pip
Proxmox VE 4.1でHyperVのディスクイメージを利用する場合、KVMで利用できるような形式に変換する必要がある。
まず、こちらを参考にKVMのディスクイメージを利用する仮想マシンを作成する。
作成時、今回の場合はディスクイメージタイプはraw、ディスクイメージは出来れば後ほどアップロードするimgファイルと同じ容量で作成を進める。
※ディスクイメージタイプ・容量が違う場合、仮想マシンの設定ファイル(/etc/pve/nodes/仮想ホスト名/qemu-server/仮想マシンID.conf)を直接いじって、ディスク容量をいじってやらないといけない。
ディスクイメージ(.vhdファイル)をscp経由などでアップロードし、対象の仮想マシンのイメージ格納ディレクトリ(デフォルトでは「/var/lib/vz/images/仮想マシンID/」)に移動する。
ファイル移動後、以下のコマンドを実行しvhdファイルをqcow2形式に変換する。
qemu-img convert [vhdファイルPATH] -O qcow2 [qcpw2ファイルPATH(出力先)]
新しいディスクイメージファイルが出来上がったら、既存のディスクイメージ(vm-仮想マシンID-disk-1.raw)と置き換える。
ディスクイメージの置き換えが終わったら、後はWebコンソール上から仮想マシンを起動するだけだ。
Linuxなどで、ソースなどをcatで開いた際に自動的にSyntaxHighlightしてくれるツールってどんなのがあるのかなぁ、と思ったので、少し調べてみた。
基本的に、インストール先はCentOSやUbuntuとして記述していくので、それ以外のディストリを使っている場合は随時読み替えてもらいたい。
まぁ、まずは基本と言ってもいいvimcatから。
インストールも簡単で、以下のコマンドでインストール可能だ。
※なお、利用にはvimをインストールしている必要があるので注意。
git clone git://github.com/rkitover/vimpager cd vimpager sudo make install
インストールしたら、後は普通にcatを利用するように開きたいファイルを指定すれば良い。
vimcat ソースファイル
lessのように見る場合は、同時にインストールされているvimpagerコマンドを用いる。
cat ソースファイル | vimpager
Python製のツール『Pygments』。
インストールには、pipもしくはeasy_installを用いると良いだろう。
sudo pip install pygments sudo easy_install Pygments
インストールができたら、以下のようにコマンドを実行することで、ソースファイルを色付きで標準出力に出してくれる。
pygmentize ソースファイル
残念ながら、このコマンド単体ではlessの際に色付きでは表示出来ない(moreでは出来る)。
『source-highlight』。
以下のようにコマンドを実行することでインストールできる。
sudo yum install source-highlight #RHEL系の場合 sudo apt-get install source-highlight # Debian/Ubuntu系の場合
インストール完了後に注意したいのが、そのままコマンドを打ってもSyntaxHighlight付きのhtmlファイルが生成されるだけだ。
コンソール上で色付き表示させたい場合は、以下のようにコマンドを実行する。
src-hilite-lesspipe.sh ソースファイル /usr/share/source-highlight/src-hilite-lesspipe.sh ソースファイル
機能が豊富らしい『highlight』コマンド。
以下のようにコマンドを実行することでインストール出来る。
sudo yum install highlight #RHEL系の場合 sudo apt-get install highlight # Debian/Ubuntu系の場合
インストール後、以下のようにコマンドを実行することでソースコードをハイライト表示させることができる。
highlight -O ansi ソースファイル
『ccat』。
以下のコマンドでインストールが出来る。
brew install ccat # MacOSX go get -u github.com/jingweno/ccat # ソースからのインストール
インストール後、以下のコマンドで利用する。
ccat --bg=dark ソースファイル
『Supercat』。
以下のコマンドでインストールできる。
wget http://supercat.nosredna.net/supercat-0.5.5.tar.gz tar xzvf supercat-0.5.5.tar.gz cd supercat-0.5.5 ./configure make make install
インストール完了後、以下のコマンドで利用する。
spc ソースファイル
正直、6種類もあるとは思わなんだ…。
まだあるかも知れないので、見つけたら追加していこう。
ボケっとネットサーフィンしてたら、ログとかをtailする際に便利そうな『colortail』というコマンドを見つけたのでインストールしてみることにした。
以下のコマンドでインストール出来る。
sudo apt-get install colortail
それでは、実際に使ってみよう。
colortail ファイルPATH colortail -f ファイルPATH # リアルタイム監視の場合
う~ん、ccze toolほどの応用はできないだろうし、しばらく更新されていないようなのでなんとも…。
悪くは無さそう。
Linux/UNIXで仕事している際、コマンド実行中に別の作業をしたり、ターミナル自体を閉じたくなる事がある。
(たとえば、処理が思ったよりも時間がかかってて、離席したい時など)
screenやtmuxなどで接続している場合はそのまま切っても再接続できるけど、そうでない場合も多いだろう。そんな時は、実行しているコマンドをバックグラウンドに移してやれば良い。
やり方は簡単。まず、コマンドを実行中のターミナル上で、「Ctrl + z」キーを押下することで、コマンドが一時停止状態に移行する。
●実行例
で、この状態で「bg」コマンドを実行することで、先ほどまで実行されていたコマンドがバックグラウンドで再開される。
ただし、ここで注意したいのが今の状態だとターミナルを閉じてしまうと、コマンドは終了されてしまう。
ターミナルを閉じてもジョブを実行し続けたい場合は、「disown」コマンドで対象のジョブ番号を指定することで、今開いているターミナルとジョブの紐付けを解除することができる。
disown -h Job番号
ジョブ番号を知りたい場合は、jobsコマンドで確認すると良いだろう。
[root@BS-PUB-GFRONT-01 ~]# # Job番号の取得 [root@BS-PUB-GFRONT-01 ~]# jobs [1]+ 実行中 ping 8.8.8.8 >> /tmp/test.txt & [root@BS-PUB-GFRONT-01 ~]# [root@BS-PUB-GFRONT-01 ~]# # 1番をバックグラウンドジョブとする [root@BS-PUB-GFRONT-01 ~]# disown -h %1
wgetコマンドといえば、webからファイルをダウンロードしたりする際によく利用するコマンドだ。
今回は、このwgetコマンドについて覚えておきたい使い方をまとめてみる事にする。
基本的には、以下のようにオプション無しでコマンドを実行することで、Web上のファイルをダウンロードする。
ダウンロードしたファイルはカレントディレクトリに同じ名前で保存される。
wget http://ファイルのURL
[root@test-node work]# ls -la 合計 4 drwxr-xr-x. 2 root root 6 3月 19 00:39 . dr-xr-x---. 19 root root 4096 3月 19 00:39 .. [root@test-node work]# wget http://diffc.googlecode.com/svn/trunk/bin/python2/diffc --2016-03-19 00:41:07-- http://diffc.googlecode.com/svn/trunk/bin/python2/diffc diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52 diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 74219 (72K)
`diffc' に保存中 100%[=========================================================================>] 74,219 455KB/s 時間 0.2s 2016-03-19 00:41:08 (455 KB/s) - `diffc' へ保存完了 [74219/74219] [root@test-node work]# ls -la 合計 80 drwxr-xr-x. 2 root root 18 3月 19 00:41 . dr-xr-x---. 19 root root 4096 3月 19 00:39 .. -rw-r--r--. 1 root root 74219 5月 6 2011 diffc
オプション無しでwgetコマンドを実行した場合、そのままカレントディレクトリ配下にファイルが配置されてしまう。
任意のPATH、任意のファイル名で保存したい場合は、「-O」オプションを用いる。
wget -O 出力先PATH http://ファイルのURL
[root@test-node work]# wget -O /tmp/diffc http://diffc.googlecode.com/svn/trunk/bin/python2/diffc --2016-03-19 01:02:44-- http://diffc.googlecode.com/svn/trunk/bin/python2/diffc diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52 diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 74219 (72K)
`/tmp/diffc' に保存中 100%[=========================================================================>] 74,219 407KB/s 時間 0.2s 2016-03-19 01:02:45 (407 KB/s) - `/tmp/diffc' へ保存完了 [74219/74219] [root@test-node work]# ls -la /tmp/diffc -rw-r--r--. 1 root root 74219 5月 6 2011 /tmp/diffc
ダウンロードを途中で中断してしまい、再度やり直しをしたい場合は再ダウンロード時に「-c」オプションを用いると良いだろう。
※再ダウンロード時にすでにダウンロード済の箇所は、プログレスバー上では「+」で表現される。
wget -c http://ファイルのURL
[root@test-node work]# wget http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso --2016-03-19 01:12:09-- http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso ftp.riken.jp (ftp.riken.jp) をDNSに問いあわせています... 134.160.38.1 ftp.riken.jp (ftp.riken.jp)|134.160.38.1|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 4329570304 (4.0G) [application/octet-stream] `CentOS-7-x86_64-DVD-1511.iso' に保存中 5% [===> ] 250,988,834 37.5MB/s 残り1m 54s ^C [root@test-node work]# wget -c http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso --2016-03-19 01:12:18-- http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso ftp.riken.jp (ftp.riken.jp) をDNSに問いあわせています... 134.160.38.1 ftp.riken.jp (ftp.riken.jp)|134.160.38.1|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 206 Partial Content 長さ: 4329570304 (4.0G), 4072590724 (3.8G) 残っています [application/octet-stream] `CentOS-7-x86_64-DVD-1511.iso' に保存中 40% [++++========================> ] 1,760,074,548 28.8MB/s 残り75s
「–limit-rate」を指定することで、ダウンロード速度に制限をかけることが出来る。
wget --limit-rate=制限する速度 http://ファイルのURL
[root@test-node work]# wget --limit-rate=2m -c http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1 511.iso --2016-03-19 01:35:44-- http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso ftp.riken.jp (ftp.riken.jp) をDNSに問いあわせています... 134.160.38.1 ftp.riken.jp (ftp.riken.jp)|134.160.38.1|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 206 Partial Content 長さ: 4329570304 (4.0G), 2563319808 (2.4G) 残っています [application/octet-stream] `CentOS-7-x86_64-DVD-1511.iso' に保存中 41% [+++++++++++++++++++++++++++++ ] 1,785,363,556 2.00MB/s 残り20m 15s
ダウンロードをバックグラウンドで実行させる場合は、「-b」オプションを用いる。
wget -b http://ファイルのURL
[root@test-node work]# wget -b http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso バックグラウンドで継続します、pidは 10808。 出力を `wget-log' に書き込みます。 [root@test-node work]# ls -al wget-log -rw-r--r--. 1 root root 114428 3月 19 01:42 wget-log [root@test-node work]# tail wget-log 210650K .......... .......... .......... .......... .......... 4% 28.2M 2m34s 210700K .......... .......... .......... .......... .......... 4% 66.0M 2m34s 210750K .......... .......... .......... .......... .......... 4% 43.8M 2m34s 210800K .......... .......... .......... .......... .......... 4% 49.5M 2m34s 210850K .......... .......... .......... .......... .......... 4% 23.9M 2m34s 210900K .......... .......... .......... .......... .......... 4% 26.1M 2m34s 210950K .......... .......... .......... .......... .......... 4% 25.5M 2m34s 211000K .......... .......... .......... .......... .......... 4% 31.0M 2m34s 211050K .......... .......... .......... .......... .......... 4% 188M 2m33s
通常、wgetでダウンロードをした場合だとUserAgentには「Wget/Wgetのバージョン」が利用されるのだが、「–user-agent」オプションを用いる事でこれを偽装することができる。
wget --user-agent="偽装するUserAgentの内容" http://ファイルのURL
複数ファイルを連続でダウンロードする場合、テキストファイルに対象のURLを記述しておき、それを「-i」オプションで読み込む事で対応できる。
wget -i URLを記述したファイルPATH
対象のURL内を再帰的にダウンロードする場合は、「-r」オプションを付与する。
wget -r http://再帰的にダウンロードを行うURL
なお、この時に以下のようなオプションを指定して、ダウンロードするファイル、そうじゃないファイルなどを指定する事ができる(一部抜粋)。
Basic認証が必要なページの場合、以下のようにユーザ名・パスワードを指定することで認証を受けてダウンロードを行う事が出来る。
wget --http-user=ユーザ名 --http-passwd=パスワード http://ファイルのURL
通常、オプション無しだとダウンロードの詳細情報が表示されてしまうが、これが不要な場合は「-q」オプションを付与する。
wget -q http://ファイルのURL
[root@test-node work]# wget -q http://diffc.googlecode.com/svn/trunk/bin/python3/diffc [root@test-node work]# ls -la diffc -rw-r--r--. 1 root root 74227 5月 6 2011 diffc
ファイルを実際にダウンロードせず、その有無だけを確かめる場合は「–spider」オプションを付与する。
wget --spider http://ファイルのURL
[root@test-node work]# wget --spider http://diffc.googlecode.com/svn/trunk/bin/python3/diffc スパイダーモードが有効です。リモートファイルが存在してるか確認します。 --2016-03-19 10:23:47-- http://diffc.googlecode.com/svn/trunk/bin/python3/diffc diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52 diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 74227 (72K)
リモートファイルが存在します。
プロキシを経由する場合は、以下のようにプロキシサーバを指定してコマンドを実行する。
wget -e HTTP_PROXY=プロキシサーバのホスト:ポート番号 http://ファイルのURL
プロキシサーバにユーザ名、パスワードが必要な場合は、以下のように指定する。
wget -e HTTP_PROXY=proxy.co.jp --proxy-user=ユーザ名 --proxy-password=パスワード http://ファイルのURL
ダウンロードのリトライ回数を指定する場合は、「–tries」オプションでリトライ回数を指定出来る。
wget --tries=リトライ回数 http://ファイルのURL
ダウンロード時のサーバの応答情報を取得する場合は、「-S」オプションを用いるといいだろう。
wget -S http://ファイルのURL
[root@test-node work]# wget -S http://diffc.googlecode.com/svn/trunk/bin/python3/diffc --2016-03-19 10:47:08-- http://diffc.googlecode.com/svn/trunk/bin/python3/diffc diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52 diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... HTTP/1.1 200 OK Date: Sat, 19 Mar 2016 15:47:08 GMT Server: Apache Last-Modified: Sat, 07 May 2011 01:23:39 GMT ETag: "22//trunk/bin/python3/diffc" Accept-Ranges: bytes Expires: Sat, 19 Mar 2016 15:50:08 GMT Cache-Control: public, max-age=180 Content-Length: 74227 Content-Type: text/plain 長さ: 74227 (72K)
`diffc' に保存中 100%[=========================================================================>] 74,227 462KB/s 時間 0.2s 2016-03-19 10:47:09 (462 KB/s) - `diffc' へ保存完了 [74227/74227]
ダウンロードしたファイルの内容を、ファイルではなく標準出力でそのまま表示させることも出来る。
wget -O - http://ファイルのURL
[root@test-node ~]# wget -O - http://orebibou.com --2016-03-19 10:50:55-- http://orebibou.com/ orebibou.com (orebibou.com) をDNSに問いあわせています... 157.112.152.17 orebibou.com (orebibou.com)|157.112.152.17|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 特定できません
`STDOUT' に保存中 [<=> ] 0 --.-K/s ...略
ベーシック認証ではなく、普通にZabbixなどで普通にログイン・ログアウト情報をCookiesに保持させてWeb上の情報を取得する事も出来る。
以下のように、一度ログインページで必要な情報(ユーザ名・パスワード等)のラベル名を確認し、それにpost-dataでログイン情報を渡し認証。その後は、そのCookiesファイルを読み込んでアクセスをすれば認証された状態でWebの情報を取得出来る。
※post-dataのラベル名はページによって異なる
wget --cookies=on --save-cookies cookies.txt --keep-session-cookies --post-data 'username=ユーザ名&password=パスワード' http://ログインページのURL wget --cookies=on --load-cookies cookies.txt --keep-session-cookies http://ログイン後にダウンロードしたいファイルのURL
他にも色々と機能はあるのだが、とりあえずある程度使えそうな部分だけを抜粋してみた。
Webスクレイピングを行う際に重宝するcurlコマンド。
今回は、このコマンドで覚えておくと便利な使い方についてをまとめてみる。
基本的には、以下のようにコマンドを実行することでHTTPリクエストを実施し、その内容を標準出力に出してくれる。
curl http://対象のURL
HTTPリクエストの回答をファイルに書き出す場合は、リダイレクトで出力先を指定するか、「-o」オプションで出力先PATHを指定してやれば良い。
curl http://対象のURL > 出力先PATH curl -o 出力先PATH http://対象のURL
プロキシ経由でアクセスする場合、「-x」オプションでプロキシサーバを指定すれば良い。
curl -x プロキシサーバ:ポート番号 http://対象のURL
もしプロキシサーバを利用する際に認証が必要な場合、以下のようにユーザ名・パスワードを指定すると良いだろう。
curl -x プロキシサーバ:ポート番号 --proxy-user ユーザ名:パスワード http://対象のURL
デフォルトではcurlはリダイレクトに対応していないが、「-L」オプションを付与することでリダイレクト先のURLにもリクエストを出すようになる。
curl -L http://対象のURL
ファイルに出力する際に進捗情報を非表示にする場合は、「-s」オプションを用いる。
curl -s -o 出力先PATH http://対象のURL
[root@test-node work]# curl -o /tmp/test http://example.org % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1270 100 1270 0 0 4627 0 --:--:-- --:--:-- --:--:-- 4618 [root@test-node work]# curl -s -o /tmp/test http://example.org
なお、上のオプションではエラーも非表示となるので、エラーのみ表示させるようにする場合は、「-sS」オプションを用いる。
curl -sS -o 出力先PATH http://対象のURL
[root@test-node work]# curl -s -o /tmp/test http://example.org1 [root@test-node work]# curl -sS -o /tmp/test http://example.org1 curl: (6) Could not resolve host: example.org1; 名前またはサービスが不明です
「Ctrl + C」キーなどで、途中で中断したダウンロードを再開する場合は、「-C -」を付与すると良いだろう。
curl -C - http://対象のURL
[root@test-node work]# curl -O http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 21 4129M 21 891M 0 0 44.0M 0 0:01:33 0:00:20 0:01:13 43.2M^C [root@test-node work]# curl -C - -O http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso ** Resuming transfer from byte position 949084160 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 16 3223M 16 538M 0 0 43.0M 0 0:01:14 0:00:12 0:01:02 45.3M
※やり直しをすると、ダウンロードが必要になる容量が減っている事が確認できる。
「–limit-rate」オプションを付与することで、転送速度に制限をかける事ができる。
curl --limit-rate 制限する転送速度 http://対象のURL
以下のようにコマンドを実行することにより、Basic認証及び、その他の認証について行ってアクセスすることが出来る。
curl --anyauth --user ユーザ名:パスワード http://対象のURL
ファイルをアップロードするなど、curl経由でPOSTをする場合は「-F」オプションで行う事が出来る。
curl -F "name=value" http://対象のURL
ファイルをアップロードする場合は、値に「@PATH」を記述すると良いだろう。
curl -F "name=@PATH" http://対象のURL
curlでは、通常は400番台のエラーコードの際でも正常終了(exitコード0)として扱われれる。
これを異常終了として扱う場合は、「-f」オプションを付与する。
curl -f http://対象のURL
[root@test-node work]# curl http://www.google.com/dummy.txt <!DOCTYPE html> <html lang=en> <meta charset=utf-8> <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> <title>Error 404 (Not Found)!!1</title> <style> *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px} </style> <a href=//www.google.com/><span id=logo aria-label=Google></span></a> <p><b>404.</b> <ins>That’s an error.</ins> <p>The requested URL <code>/dummy.txt</code> was not found on this server. <ins>That’s all we know.</ins> [root@test-node work]# echo $? 0 [root@test-node work]# curl -f http://www.google.com/dummy.txt curl: (22) The requested URL returned error: 404 Not Found [root@test-node work]# echo $? 22
curlで、Cookieを用いてログイン情報を保存し、その後認証が必要なページにアクセスする場合は、以下のようにログイン情報を転送する。
※「-d」で渡している設定名・値は各環境で異なるので注意。
curl -c cookie.txt -d 'username=ユーザ名' -d 'password=パスワード' http://対象のログインURL curl -b cookie.txt http://ログイン後に情報を取得するページ
curlでUserAgentを偽装する場合は、「-A」オプションを用いる。
curl -A "偽装するUserAgent" http://対象のURL
とりあえず、個人的に使いそうな使い方だけを抜粋してみた。
wcコマンドといえば、Linux/UNIXで使える行数やバイト数を数えるのに使えるコマンドだ。
今回は、このwcコマンドで覚えておきたい使い方についてをまとめてみる。
基本的には、以下のように用いる事でファイルの改行数、単語数、バイト数を表示する。
wc ファイルPATH
[root@test-node work]# wc /tmp/test 50 120 1270 /tmp/test
表示させる内容については、以下のオプションで指定した数字だけを出力させることができる。
読み込まれたファイルの、最も長い行の文字数を表示するには、「-L」オプションを付与する。
wc -L ファイルPATH
[root@test-node work]# wc -L /tmp/test 101 /tmp/test
wcコマンドで対象のファイルを指定した場合、ファイル名も同時に出力されてしまう。
これは、複数を同時に指定した場合も同様である。
[root@test-node work]# wc /tmp/* 50 120 1270 /tmp/example.org 50 120 1270 /tmp/test 100 240 2540 合計
もしファイル名を取得したくない場合は、リダイレクトで読み込ませる事でその値のみを取得することが出来る。
wc < ファイルPATH
[root@test-node work]# wc -c /tmp/test 1270 /tmp/test [root@test-node work]# wc -c
ちょっとR言語をいじってみようと思ったので、CentOS 7にRをインストールしてみる。
インストールの仕方は簡単。以下のコマンドを実行しyumでインストールするだけだ。
yum install -y epel-release yum install -y R
これで、Rがインストールできた。
[root@BS-PUB-CENT7-01 ~]# rpm -qa | grep R libRmath-3.2.3-4.el7.x86_64 R-core-3.2.3-4.el7.x86_64 R-java-3.2.3-4.el7.x86_64 perl-Time-HiRes-1.9725-3.el7.x86_64 libRmath-devel-3.2.3-4.el7.x86_64 R-core-devel-3.2.3-4.el7.x86_64 R-devel-3.2.3-4.el7.x86_64 R-3.2.3-4.el7.x86_64 perl-TermReadKey-2.30-20.el7.x86_64 R-java-devel-3.2.3-4.el7.x86_64
なんとなしにネットサーフィンをしていた所、Linuxコンソール上でGUIでアスキーアートを描く事が出来る『aewan』コマンドというものを見かけたので、試しに使ってみる事にする。
なお、インストール先はUbuntu Server 14.04 LTSとする。
まずはインストールから。
以下のコマンドをコンソール上で実行する。
sudo apt-get install aewan
それでは、実際に新規でアスキーアートを作ってみよう。
コンソール上で、以下のようにコマンドを実行する。
aewan
コマンドを実行すると上のような画面が表示されるので、「F1」キーを2回ほど押下し、「[F1] File」 > 「New」で新規のアスキーアートを作成する。
そのままだと何も書けないので、「[F3] Layer」 > 「Add layer」で新しいレイヤーを追加する。
後は、新しく追加されたレイヤーで十字キー+キーボードでアスキーアートを書いていけば良い。
なお、入力できる色は「[F2] Edit」 > 「Drawing Color」で自由に選択できる。
レイヤーのサイズを変更する場合は、「[F3] Layer」 > 「Resize layer」で行える。
さて、一通り書き終わったら「[F1] File」 > 「Save」で保存をする。
保存後、そのままだとcatで開くことは出来ない。
ひとまず、aewan用のビューアーである「aecat」コマンドで開いて、それをリダイレクトで書き出す事でcatでも開くことが出来るようになる。
結構簡単にコンソール上でアスキーアートを描く事が出来る。
Linuxでバックグラウンド実行させているプロセスを、フォアグラウンドに戻したい時もあるだろう。
そんなときは、「fg」コマンドを用いる。
[root@BS-PUB-MONITOR-01 ~]# nohup ping 8.8.8.8 & [1] 14841 nohup: 入力を無視し、出力を `nohup.out' に追記します [root@BS-PUB-MONITOR-01 ~]# [root@BS-PUB-MONITOR-01 ~]# jobs [1]+ 実行中 nohup ping 8.8.8.8 & [root@BS-PUB-MONITOR-01 ~]# [root@BS-PUB-MONITOR-01 ~]# ps -ef | grep [p]ing root 14841 14022 0 22:25 pts/1 00:00:00 ping 8.8.8.8 zabbix 27268 27239 0 3月06 ? 00:00:54 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000004 sec, idle 5 sec] [root@BS-PUB-MONITOR-01 ~]# [root@BS-PUB-MONITOR-01 ~]# fg %1 nohup ping 8.8.8.8 ^C [root@BS-PUB-MONITOR-01 ~]# ps -ef | grep [p]ing zabbix 27268 27239 0 3月06 ? 00:00:54 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000004 sec, idle 5 sec] [root@BS-PUB-MONITOR-01 ~]# jobs [root@BS-PUB-MONITOR-01 ~]#
先日のOSCで、NixOSという関数管理型のパッケージマネージャなるものを持つLinuxディストリビューション『NixOS』というものを知ったので、入れてみる事にした。
手順としては、こちらの内容を元に作業をしている。
まずは、こちらでISOファイルのダウンロードをする。
とりあえずGUIのついたLiveCDをダウンロードすれば良いだろう。
ダウンロードしたら、このISOをインストール先で読めるようにする。
(物理だったら焼くなり、仮想マシンならISOをマウントしろってことね。)
コンソール表示後、以下のコマンドを実行しディスクのフォーマットとマウント、インストール時の設定ファイルを作成させる。
parted /dev/sda mklabel msdos parted /dev/sda mkpart primary 0% 100% mkfs.xfs -L nixos /dev/sda1 mount LABEL=nixos /mnt nixos-generate-config --root /mnt
設定ファイル作成後、nanoで「/mnt/etc/nixos/configuration.nix」を開き、以下の項目のコメントアウトを外す。
設定ファイルを編集したら、以下のコマンドを実行しNixOSをインストールする。
nixos-install
インストール処理が完了後、rebootを行う事でインストール完了。
reboot
Linuxで、すでにバックグラウンドや他のターミナルで動作中のプロセスの管理を今接続しているセッションに紐付けたい時もあるだろう。
そんな時は、今回紹介する『reptyr』コマンドを用いる事で、現在のセッションでプロセスを動作させる事が出来るようになる。
まずはインストール。
以下のコマンドでインストールを行う。
●RHEL系の場合
yum install -y epel-release yum install -y reptyr
●Ubuntu/Debian系の場合
sudo apt-get install reptyr
それでは、実際に使ってみよう。
まず、事前にpsコマンドで現在のセッションに管理を移したいプロセスのIDを確認しておく。
その後、以下のようにコマンドを実行することで、そのプロセスの管理を現在のセッションに移すことが出来る。
reptyr プロセスID
もし他のセッションで利用していたプロセスの場合、この時点でそのセッションからはプロセスが切り離されている状態となる。
間違えて特定のプロセスをバックグラウンドジョブにしてしまって、さらにターミナルの接続が切れてしまった時や、他の利用者にプロセスの引き継ぎをしたい時などに利用できるだろう。
Linuxのコンソール上で統計情報を計算する方法について調べていたところ、「st」というコマンドがそれを出来るようだということがわかったので試してみる事にした。
利用するOSはCentOS 7とする。
まず、以下のコマンドでインストールを行う。
yum install git perl-ExtUtils-MakeMaker git clone https://github.com/nferraz/st cd st/ perl Makefile.PL make && make install
さて、それでは実際に使ってみよう。
基本的には、他のコマンドの出力をパイプで渡してやることで利用可能となる。
コマンド | st
[root@BS-PUB-CENT7-01 st]# seq 1 3 100 | st N min max sum mean stddev 34 1 100 1717 50.5 29.8747
find+lsとかと組み合わせてやれば、ファイルサイズの統計を計算したり出来るだろう。
Proxmoxのクラスタ間でのライブマイグレーションを行う場合、通常であればiSCSIやSANで仮想HDDなどをおいておくストレージが必要なのだけど、それなしでもvSANやNutanix CEを利用するようにしてライブマイグレーションを出来ないか調べてみた。
一応、ProxmoxのノードでCeph(RBD)を利用することが出来るのだけど、そうなると最低でも3台構成以上じゃないとあまり旨味が無いので、なんかいい方法が無いかと調べていたところ、各クラスタノードで共通のディレクトリ(ディスク)をDRBDで同期させて、そこに仮想マシンのファイルを配置することで対応出来そうだったので、やってみることにした。
前提として、すでにProxmoxクラスタは構築済、ディスクはまだフォーマットされていないけど各クラスタに同容量のが刺さってる状態で、DRBD9を導入する。
また、DRBDでディスクの同期を行うために、Proxmox上の仮想マシンで利用しないNIC(ここではeth1)を別途用意しておく必要がある。
作業はこちらの情報を参考に進めていく。
ネットワークの設定ファイル(/etc/network/interfaces)を編集し、DRBDで通信を行うためのNIC(eth1)について設定を追加する。
●/etc/network/interfaces(例)
auto lo iface lo inet loopback auto eth1 iface eth1 inet static address IPアドレス(DRBD用) netmask 255.255.255.0 auto vmbr0 iface vmbr0 inet static address IPアドレス(通常利用) netmask XXX.XXX.XXX.XXX gateway XXX.XXX.XXX.XXX bridge_ports eth0 bridge_stp off bridge_fd 0
設定完了後、念のため再起動しておくと良いだろう。
次に、各クラスタでディスク(/dev/sdb)のフォーマットを行う。
事前にpartedを導入しておくと良いだろう。
サブスクリプションは契約していないため、このままだとdebianのapt-getも出来ないので不要なファイルを削除してパッケージをインストールする。
rm /etc/apt/sources.list.d/pve-enterprise.list echo "deb http://download.proxmox.com/debian jessie pve-no-subscription" >> /etc/apt/sources.list apt-get update apt-get install parted thin-provisioning-tools
次に、partedコマンドでディスクのフォーマットを行う。
parted /dev/sdb mktable gpt parted /dev/sdb mkpart drbd 1 100% parted /dev/sdb p
root@BS-PUB-MICROSERVER-01:~# parted /dev/sdb mktable gpt Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No? Y Information: You may need to update /etc/fstab. root@BS-PUB-MICROSERVER-01:~# parted /dev/sdb mkpart drbd 1 100% Information: You may need to update /etc/fstab. root@BS-PUB-MICROSERVER-01:~# parted /dev/sdb p Model: ATA Hitachi HCS54505 (scsi) Disk /dev/sdb: 500GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 500GB 500GB drbd
ディスクフォーマット後、LVMの設定を実施する。
vgcreate drbdpool /dev/sdb1 lvcreate -L 450G -n drbdthinpool -T drbdpool
root@BS-PUB-MICROSERVER-02:~# vgcreate drbdpool /dev/sdb1 Physical volume "/dev/sdb1" successfully created Volume group "drbdpool" successfully created root@BS-PUB-MICROSERVER-02:~# lvcreate -L 450G -n drbdthinpool -T drbdpool Logical volume "drbdthinpool" created.
次に、drbdmanage をapt-getから導入する。
apt-get install drbdmanage
互いにssh接続を行う必要があるので、DRBD用のNICがknown_hostsに登録されるよう事前にログインしあっておく。
(事前にクラスタ化しているようであれば、鍵認証はすでに出来てるはずである)
クラスタのウチの1台(ここでは、「BS-PUB-MICROSERVER-01」)で、以下のコマンドを実行する。
drbdmanage init -q 自身のDRBD用IPアドレス
root@BS-PUB-MICROSERVER-01:~# drbdmanage init -q 10.50.10.101 Failed to find logical volume "drbdpool/.drbdctrl_0" Failed to find logical volume "drbdpool/.drbdctrl_1" Logical volume ".drbdctrl_0" created. Logical volume ".drbdctrl_1" created. md_offset 4190208 al_offset 4157440 bm_offset 4153344 Found some data ==> This might destroy existing data! <== Do you want to proceed? *** confirmation forced via --force option *** initializing activity log NOT initializing bitmap Writing meta data... New drbd meta data block successfully created. md_offset 4190208 al_offset 4157440 bm_offset 4153344 Found some data ==> This might destroy existing data! <== Do you want to proceed? *** confirmation forced via --force option *** initializing activity log NOT initializing bitmap Writing meta data... New drbd meta data block successfully created. empty drbdmanage control volume initialized. empty drbdmanage control volume initialized. Operation completed successfully
次に、以下のコマンドでもう一台のノード(ここでは、「BS-PUB-MICROSERVER-02」)を追加する。
drbdmanage add-node -q ノード名 IPアドレス
root@BS-PUB-MICROSERVER-01:~# drbdmanage add-node -q BS-PUB-MICROSERVER-02 10.50.10.102 Operation completed successfully Operation completed successfully Executing join command using ssh. IMPORTANT: The output you see comes from BS-PUB-MICROSERVER-02 IMPORTANT: Your input is executed on BS-PUB-MICROSERVER-02 Logical volume ".drbdctrl_0" successfully removed Logical volume ".drbdctrl_1" successfully removed Logical volume ".drbdctrl_0" created. Logical volume ".drbdctrl_1" created. You want me to create a v09 style flexible-size internal meta data block. There appears to be a v09 flexible-size internal meta data block already in place on /dev/drbdpool/.drbdctrl_0 at byte offset 4190208 Do you really want to overwrite the existing meta-data? *** confirmation forced via --force option *** Do you want to proceed? *** confirmation forced via --force option *** NOT initializing bitmap md_offset 4190208 al_offset 4157440 bm_offset 4153344 Found some data ==> This might destroy existing data! <== initializing activity log Writing meta data... New drbd meta data block successfully created. You want me to create a v09 style flexible-size internal meta data block. There appears to be a v09 flexible-size internal meta data block already in place on /dev/drbdpool/.drbdctrl_1 at byte offset 4190208 Do you really want to overwrite the existing meta-data? *** confirmation forced via --force option *** Do you want to proceed? *** confirmation forced via --force option *** NOT initializing bitmap md_offset 4190208 al_offset 4157440 bm_offset 4153344 Found some data ==> This might destroy existing data! <== initializing activity log Writing meta data... New drbd meta data block successfully created. Operation completed successfully
※もしこの時、「Error: Operation not allowed on satellite node」というエラーが出た場合は、こちらに記述されている対応を行うと良いだろう。
最後に、以下のコマンドを実行しノードの一覧を確認する。
drbdmanage list-nodes
root@BS-PUB-MICROSERVER-01:~# drbdmanage list-nodes +------------------------------------------------------------------------------------------------------------+ | Name | Pool Size | Pool Free | | State | |------------------------------------------------------------------------------------------------------------| | BS-PUB-MICROSERVER-01 | 460800 | 458910 | | ok | | BS-PUB-MICROSERVER-02 | 460800 | 458910 | | ok | +------------------------------------------------------------------------------------------------------------+
ちゃんとPool Size/Pool Freeの値が表示されている事が確認出来たら、「/etc/pve/storage.cfg」の内容を以下のように追記する。
なお、「redundancy」には同期するノード数を記述する(物理ノード数より大きい値は入れられないので注意)。
dir: local path /var/lib/vz content vztmpl,images,iso,rootdir maxfiles 0 drbd: drbd1 content images,rootdir redundancy 2
DRBDの設定ができたら、後はWEBコンソール上で仮想マシンを作成するだけだ。
※当たり前の話だが、ディスクの作成先はDRBDのディスク上となる。また、ディスクフォーマットは「raw」一択なので注意。
で、作成後に対象のノードを右クリック、[マイグレート]を選択。
後は「オンライン」にチェックが入った状態でマイグレートを実施するだけだ。
確かに、別途ストレージ機器を用意しなくてもライブマイグレーションを行える事が確認できた。
ディスク容量はその分食うけど、仮想ホストノード機器のみでマイグレーションを行えるのはいいね。
仕事で見積もりを作る際、ファイルサイズの統計(平均や中央値)が欲しかったので少し調べてみた。
で、いくつかの手法があることがわかったので、備忘として残しておく。
まずは、一番準備が手軽なawkでの計算方法。
基本、どのUNIX系OSでも入ってるので、とりあえずはすぐ使えるだろう(Macとかの場合はgawkにしたほうが良いけど)。
以下、ざっと項目別に出すコマンドを書いてみる。
awk '{x++;sum+=$1}END {print sum/x}'
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | awk '{x++;sum+=$1}END {print sum/x}' 2645.75
awk '{v[i++]=$1;}END {x=int((i+1)/2); if(x&amp;amp;lt;(i+1)/2) print (v[x-1]+v[x])/2; else print v[x-1];}'
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" |sort -n | awk '{v[i++]=$1;}END {x=int((i+1)/2); if(x<(i+1)/2) print (v[x-1]+v[x])/2; else print v[x-1];}' 352.5
awk '{col=$1}{{b[col]++}if(b[col]&gt;hf){hf=b[col]}}END{for (i in b){if(b[i]==hf){(k=="")? (k=i):(k=k FS i)}{FS=","}}print&nbsp;k}'
[root@BS-PUB-CENT7-01 ~]# find /root ! -size 0 -type f -printf "%s\n" | awk '{col=$1}{{b[col]++}if(b[col]>hf){hf=b[col]}}END{for (i in b){if(b[i]==hf){(k=="") ? (k=i):(k=k FS i)}{FS=","}}print k}' 184
awk '{if(min==""){min=max=$1};if($1&amp;amp;gt;max){max=$1};if($1&amp;amp;lt; min){min=$1};} END {print min, max}'
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | awk '{if(min==""){min=max=$1};if($1>max){max=$1};if($1< min){min=$1};} END {print "min:"min,"\nmax:" max}' min:0 max:57828
以前、こちらでも紹介したstコマンドを用いた場合。
統計用のコマンドなので、awkよりは簡単に結果を求める事が出来る。
st ファイルPATH
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | st N min max sum mean stddev 60 0 57828 158745 2645.75 8064.21
st --mean ファイルPATH
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | st --mean 2645.75
st --median ファイルPATH
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | st --median 352.5
st --max --min ファイルPATH
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | st --max --min min max 0 57828
統計用の言語であるR言語でターミナル上で処理を行う事で、統計情報を取得する。
コマンド | xargs Rscript -e 'summary(as.numeric(commandArgs(TRUE)))'
[root@BS-PUB-CENT7-01 ~]# find -type f -printf "%s\n" | xargs Rscript -e 'summary(as.numeric(commandArgs(TRUE)))' Min. 1st Qu. Median Mean 3rd Qu. Max. 0.0 100.8 352.5 2879.0 1405.0 57830.0
コマンド | xargs Rscript -e 'mean(as.numeric(commandArgs(TRUE)))'
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | xargs Rscript -e 'mean(as.numeric(commandArgs(TRUE)))' [1] 2832.197
コマンド | xargs Rscript -e 'median(as.numeric(commandArgs(TRUE)))'
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | xargs Rscript -e 'median(as.numeric(commandArgs(TRUE)))' [1] 342
コマンド | xargs Rscript -e 'names(which.max(table(as.numeric(commandArgs(TRUE)))))'
[root@BS-PUB-CENT7-01 ~]# find -type f ! -size 0 -printf "%s\n" | xargs Rscript -e 'names(which.max(table(as.numeric(commandArgs(TRUE)))))' [1] "184"
コマンド | xargs Rscript -e 'max(as.numeric(commandArgs(TRUE)))'
[root@BS-PUB-CENT7-01 ~]# find -type f ! -size 0 -printf "%s\n" | xargs Rscript -e 'max(as.numeric(commandArgs(TRUE)))' [1] 57828
コマンド | xargs Rscript -e 'min(as.numeric(commandArgs(TRUE)))'
[root@BS-PUB-CENT7-01 ~]# find -type f ! -size 0 -printf "%s\n" | xargs Rscript -e 'min(as.numeric(commandArgs(TRUE)))' [1] 18
今後使うことがあるかわからないけど、とりあえずまた何かあったら役に立つだろう。
Linuxで、裏で実行中のプロセスが出力している内容を確認したい場合、「/proc」配下を直接みることで確認出来るようなのでやってみた。
以下のようにコマンドを実行することで、そのプロセスの標準出力をみることができる。
tail -F /proc/プロセス番号/fd/1
各プロセスで0~3とあるのだが、この「1」というのは標準出力のこと。
つまり、当然その他の番号も「0:stdin」「1:stdout」「2:stderr」と紐付いている。
残念ながら他のコンソールで直接見ているプロセスの出力は見れなかったのだが、なんとなく裏で動いているプロセスの動作が気になった時などに使えるのではなかろうか。
仕事でpingを打ちっぱなしにしてた時、音で成功した祭は通知させられないかなぁ、と思ったので、やれないか調べてみた。
まぁ、そもそもビープ音でよければもう用意はされているのだけど、イヤホンで音楽聴いてたりしていると聞き逃すので、もうちょっと主張の激しい音で知らせて欲しい。
という訳で、pingで疎通に成功・失敗した際に任意の音で通知をさせるようにしてみよう。
前提として、ssh越しのサウンドのやり取りというのが設定とか面倒そうなので、この方法はssh接続先のサーバで実行するのではなく、あくまでも手元のMacやLinux上からとなる。
pingの疎通成功・失敗時に任意の文字列を読み上げさせる場合は、Macであればsayコマンド、Linuxであればaplay+text2waveを用いると良いだろう。
以下の例では、疎通成功時は「OK」、疎通失敗時は「NG」と読み上げさせる。
●Macの場合
while true; do ping -c 1 対象ホスト > /dev/null && say "OK" || say "NG" ; sleep 1; done
●Linuxの場合
while true; do ping -c 1 対象ホスト > /dev/null && (echo "OK" | text2wave | aplay) || (echo "NG" | text2wave | aplay) ; sleep 1; done
任意のオーディオファイルを読み上げさせる場合は、どちらもmplayerを使えば良いだろう。
while true; do ping -c 1 対象ホスト > /dev/null && mplayer オーディオファイルPATH || mplayer オーディオファイルPATH ; sleep 1; done
bashでcp/mvコマンドを使用してファイルのバックアップとか移動をする際、出来ればキー入力は少ない方がいいわけで。
長いファイル名とか、PATH名だととても面倒だったりする。
というわけで、個人的にキー入力を短縮するためにやっている指定方法について、記述しておく。
同一PATH内に、末尾に文字列を追加してバックアップ・移動をする場合は、以下のようにコマンドを実行することでキー入力を減らすことが出来る。
cp 対象PAHT{,文字列}
[root@BS-PUB-CENT7-01 ~]# ls -la /tmp/test* -rw-r--r--. 1 root root 0 4月 1 08:40 /tmp/test [root@BS-PUB-CENT7-01 ~]# cp /tmp/test{,.bk} [root@BS-PUB-CENT7-01 ~]# ls -la /tmp/test* -rw-r--r--. 1 root root 0 4月 1 08:40 /tmp/test -rw-r--r--. 1 root root 0 4月 1 08:40 /tmp/test.bk
違うPATHにバックアップ・移動したり、ファイル名の一部をリネームしてコピーしたりする場合は、2つ目の引数に「!#$」を指定し、それを加工して上げれば良い。
この「!#$」は、ひとつ前の引数の値を指定する事が出来るので、これを指定し、さらにbash変数として置換することで簡単に別PATHにコピー・移動させたりすることができる。
以下の例では、「/tmp/test」を「/opt/test」としてコピーしている。
cp /tmp/test !#$:s/tmp/opt
[root@BS-PUB-CENT7-01 ~]# ls -la {/opt,/tmp}/test ls: /opt/test にアクセスできません: そのようなファイルやディレクトリはありません -rw-r--r--. 1 root root 0 4月 1 08:40 /tmp/test [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# cp /tmp/test !#$:s/tmp/opt cp /tmp/test /opt/test [root@BS-PUB-CENT7-01 ~]# ls -la {/opt,/tmp}/test -rw-r--r--. 1 root root 0 4月 1 08:45 /opt/test -rw-r--r--. 1 root root 0 4月 1 08:40 /tmp/test
投資の自己責任論が叫ばれる昨今、金相場や為替レートは気になるもの。
それがたとえコンソールにアクセスしている真っ最中でも。
というわけで、コンソール操作中でも金相場や為替レートを調べる方法を紹介。
まぁ、以下のコマンドを実行するだけだ。
ドルレート
wget https://rate-exchange-1.appspot.com/currency\?from=USD\&to=JPY -q -O - | jq -r ".from,.rate,.to" | tr '\n' ',' | awk -F, '{print "1 "$1"="$2" "$3}'
金相場
wget https://rate-exchange-1.appspot.com/currency\?from=XAU\&to=JPY -q -O - | jq -r ".from,.rate,.to" | tr '\n' ',' | awk -F, '{print "1 "$1"="$2" "$3}'
[root@BS-PUB-CENT7-01 ~]# wget https://rate-exchange-1.appspot.com/currency\?from=USD\&to=JPY -q -O - | jq -r ".from,.rate,.to" | tr '\n' ',' | awk -F, '{print "1 "$1"="$2" "$3}' 1 USD=111.727 JPY [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# wget https://rate-exchange-1.appspot.com/currency\?from=XAU\&to=JPY -q -O - | jq -r ".from,.rate,.to" | tr '\n' ',' | awk -F, '{print "1 "$1"="$2" "$3}' 1 XAU=136579.05 JPY
欲しいレートがある場合は、URLのfromとtoをその都度書き換えて上げれば良い。