シェルスクリプトで第何何曜日を取得する方法について調べてたので、今度はcronで、毎月決まった週の曜日にだけスクリプトを実行させるような指定方法がないか調べてみることにした。
で、調べてみると、どうやら日の範囲と曜日はandではなくor指定になっているようで、以下のように指定すると「指定曜日もしくは指定範囲日の場合はコマンド実行」となってしまう。

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of...

シェルスクリプトで指定した月の第何何曜日を取得する

いい感じで家でお酒飲んでて、ゴミ出しの日を意識してふと思い立ち、指定した日の第何何曜日(第3水曜とか、第4金曜とか…)をbashで取得出来ないかなと思ったのでやってみた。
ncalとかあると一行で取得出来そうだったけど、手元のCentOS 7だと入ってなかったのでそれを使わずに出来ないか調べた。

で、dateコマンドのみでで上手く出せれば良かったんだけど、少し目論見が外れてしまった。
「-d」で月初日と次の曜日を同時に指定できればよかったんだけど…

[root@test-centos7 ~]# date
2015年 11月 27日 金曜日 00:20:52 JST
[root@...

dateutilsを使って簡単に指定月の第何何曜日を取得する

先ほど、指定月の第何何曜日を取得するスクリプトを作成したのだが、もうちょっといいツールが無いか探して見たところ、dateutilsというものを見つけた。
これのdateconvを使えば、かなり簡単に指定曜日の日付を取得出来そうだ。

1.インストール

インストールは、RHEL系だとコンパイルが必要のようだ。
以下のコマンドを実行する。

wget https://bitbucket.org/hroptatyr/dateutils/downloads/dateutils-0.3.4.tar.xz
tar xvf dateutils-0.3.4.tar.xz
cd dateutil...

tarコマンド(GNU拡張版)で覚えておきたい使い方13個

Linux、UNIXでアーカイブファイルに関するコマンドといえば、やはりtarコマンドだろう。
アーカイブファイルとは、多数のファイルをそのユーザ・グループ情報やパーミッション、タイムスタンプ等の情報と共に、一つにまとめたファイルのことだ。ただのアーカイブファイルだと圧縮までは行われないため、通常はgzipと組み合わせて圧縮もさせる。

今回はこのtarを作成するtarコマンドについて、覚えておくと便利な使い方を紹介する。
なお、使用したのはCentOS 7にインストールされている以下のバージョンとなる。

[root@test-centos7 ~]# tar --version...

シェルスクリプトで『getopts』を使ってオプションの処理を行わせる

仕事などでシェルスクリプトを作っていると、引数としてオプションを付与させるようなスクリプトを作りたくなる事がある。
そういったオプション関係の処理を簡単に行えるのが、今回紹介する『getopts』コマンドだ。仕事でスクリプトを組んでいれば、一度は利用するだろう。

このコマンドを利用することで、オプションを付与させるタイプのシェルスクリプトを簡単に作成することが可能になる。
基本的には、以下の例のようにwhile、caseと組み合わせる使い方がセオリーだ。

example.sh

#!/bin/sh

#####################################...

nc(Ncat)コマンドで覚えておきたい使い方3個(ncコマンドCentOS 7版)

前回も紹介したLinuxでポートの疎通確認を行う際によく用いるncコマンド。
実はこのコマンド、netcatではなくCentOS 7の場合だとnampプロジェクトのncatに置き換えられているのだ。

今後はncもこのncatコマンドに置き換えられている事になるので、このコマンドの使い方についても(あんま変わらんけど)紹介することにした。
なお、検証に使用したコマンドはCentOS 7に入れている"Ncat: Version 6.40 ( http://nmap.org/ncat )"とする。

[root@test-centos7 ~]# nc --version
Ncat:...

シェルでグルーピングを利用してリダイレクトを一発で行う

リダイレクトで、複数のコマンドの実行結果を同じファイルに書き出したいとき、1コマンドに対し1リダイレクトの処理を書くと結構面倒くさい。
そんなときは、グルーピング({}で実行するコマンドを囲む)してリダイレクトを行うと良いだろう。

[root@test-centos7 ~]# { echo "aaaaaa";
> echo "bbbbb";
> echo "ccccc"; } > /tmp/test1234.txt
[root@test-centos7 ~]#
[root@test-centos7 ~]# cat /tmp/test1234.txt
aaaaaa
bbbbb
cccc...

Linuxのzip/unzipコマンドで覚えておきたい使い方11個

Linuxでzipファイルを扱う際、欠かせないのがzip/unzipコマンド。
今回は、このコマンドについて覚えておきたい使い方について紹介しておく。

1.基本的な使い方

基本的には、zipファイルとして圧縮もしくは解凍する際は以下のようにコマンドを実行する。

zip 作成するZIPファイルPATH 圧縮対象PATH ... # 圧縮時
unzip 解凍するZIPファイルPATH # 解凍時

[root@test-centos7 ~]# zip /tmp/test1.zip /work3/TEST1.sh /work3/TEST2.sh
  adding: work3/T...

linuxで指定したファイルの合計サイズを取得する

linuxで、ディレクトリ内のファイルの合計容量を取得するのではなく、個別に指定したファイル(ワイルドカードで拡張子等を指定したファイルなど)の合計サイズを取得する場合、大まかに分けて2つの方法がある。

1.ls(find)とawkで容量の合計を計算する

ls(+find)とawkで、指定したファイルの合計容量を取得することができる。
lsの実行結果を、awkコマンドで加工する事で合計容量の取得を行えば良い。計算対象をうまく記述出来なければ、ファイルにPATHを記述して$(cat ファイル)で読み出せば良い。

もしCentOS7もしくはUbuntu 14.04以降のOSで、かつ人...


ヌルコマンドでシェルスクリプトの変数が空の場合に特定の値を代入させる

シェルスクリプトを書いていると、特定の変数の値が空(NULL)の時はデフォルト値を代入する処理を行う必要が出てくる事がある。
そんなときは、ヌルコマンドで変数が空の時はデフォルト値を代入するように記述すると良いだろう。

変数の値が空の時にデフォルト値を代入する場合は、以下のように記述する。

: ${変数:=デフォルト値}

以下の例では、引数を代入する変数『TEST_VAR』に値がない場合、デフォルト値として『DEFAULT_123』という値を代入する

#!/bin/sh
TEST_VAR=$1
: ${TEST_VAR:='DEFAULT_123'}

echo $TEST_...

数字を人の読みやすいように加工する『numfmt』コマンド

シェルスクリプトやCUIでLinuxを操作していると、バイトで記述された容量を人が読みやすい状態に加工したい時がある。
それを簡単に行えるのが、Coreutils 8.22から追加された『numfmt』コマンドだ。

少なくとも、CentOS 7やUbuntu 14.04 LTSでは標準で利用することが出来る。

このコマンドの使い方については、もう見てもらった方が早いだろう。
以下のようにechoで「4096000(4MB相当)」を出力し、それをnumfmtに渡す。すると…

echo 4096000 | numfmt --to=iec

[root@test-apache...

nc(netcat)コマンドで覚えておきたい使い方8個

Linuxでポートの疎通確認を行う際によく用いるncコマンド。
今回は、このncコマンドで覚えておきたい使い方についてまとめてみる事にする。

使用したのは、Ubuntu 14.04 LTSに入っている以下のもの。

test@test-vm-ubuntu:~$ nc --help
nc: invalid option -- '-'
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46bCD...

Linuxサーバで、ミドルウェアインストール前にネットワークの疎通確認を行う場合、ncコマンドが入っていれば簡易的なTCP/UDPサーバを立ち上げてポートを開けて確認を行う事が出来る。

TCPの場合は、待受側で以下のようにコマンドを実行する。

nc -vkl ポート番号

UDPの場合、keepaliveオプションが無いため、catを使って無理やり受信を続けさせる。
そのため、待受側では以下のようにコマンドを実行する。

nc -e /bin/cat -kuvl ポート番号


時折、ログのアーカイブなどで当日が月末か否かでスクリプトの処理を変えさせる必要があったりする。
シェルスクリプトで対象の日付が月末か否かを判断させる場合、以下のようにすると良いだろう。

get_date=`date +%d -d '1 day'`
if [ $get_date = "01" ];then
    echo "月末です"
fi

まぁ、単純にdateコマンドで日だけを取得して1日足して、その値が"01"で...


少し前に、今いるプロジェクトでApacheによるリバースプロキシでのBasic認証を設定する事があったので、その備忘。
ApacheのProxyでBasic認証を処理させる場合は、以下の例ようにhttpd.conf(というか、最近ではそれをIncludeしている設定ファイル)で記述してあげればいい。


tarでアーカイブ作成時に特定のディレクトリ・ファイルを除外する

tarでアーカイブを作成する際、ディレクトリを指定してその配下全てをアーカイブ化することが多いだろう。
その中で、特定のサブディレクトリのみ除外してアーカイブを作成する場合は、「--exclude」オプションもしくは「-X」オプションを付与すると良いだろう。

1.「--exclude」オプション

コマンドラインで直接PATHを指定する場合は、「--exclude」オプションを付与する。

tar cvf 作成するアーカイブファイルPATH --exclude 除外ディレクトリのPATH アーカイブ対象ディレクトリ

[root@test-centos7 ~]# find /w...

先日から作成しているPythonでの選択肢型ssh自動接続スクリプト、なんとかタイムスタンプ付きのログを取得出来るよう改良した。
まぁ、一時ファイルを作成してタイムスタンプを付与、しかもtailのラッパースクリプトとして動作させているので、あまり納得はいってないんだけど…一応動くし、まぁいいか。どうせMacかLinuxでしか動かさないし。

1.host.list

host.listについては、前回作成した内容から変わらない。

host.list

# SSHAutoLogin.ttl用 ログインホスト設定ファイル
# 左から順に、以下の内容を記述していく。
# HOST_NAM...

だいぶ前に、Windows上でnohupのようにプログラムをバックグラウンド実行させられないか調べた事があった。
Windowsでnohup相当の処理を行わせるには、『-AsJob』パラメーターを利用するか、PowerShellに用意されている『Start-Job』コマンドを利用する。
コマンドによっては「-AsJob」はサポートしていないので、基本的に『Start-Job』で対応する事が多そうだ。

Start-Jobコマンドは、基本的に以下のように実行する。

Start-Job -ScriptBlock { 実行コマンド }

今までに、SSHでの選択型の自動ログインについてはTeratermマクロPythonのスクリプトを作ってみたりしたが、そういえばRDPの接続ではやってないなぁ…
と思ったので、簡素なものではあるがPowerShellで作ってみた。

まぁ、転職するので今後Windowsサーバを仕事で使うことがあるのやら不明だけど。
次のクライアントMacだし。

作りは、ホストのIPアドレスやらユーザ、パスワードを記述した「host.list」とスクリプト本体である「RDP_CONNECT.ps1」の2つ。
同じディレクトリ配下においておく。

1.host.list

「host.l...


2017/02/18

バージョン管理するのもつらいし、ソース等はGitHubに移動することにした。
利用するのであれば、そちらを参照してもらったほうがいいと思う。

https://github.com/blacknon/TeratermListLoginMacro


先日作成したPythonスクリプトで鍵認証対応させたので、Teratermマクロでもやってみる。

1.SSHAutoLogin.ttl

変更点としては、こちらの内容に鍵認証を加えただけだ。

;+++++++++++++++++++++++++++++++++++++++++++++++++++++...

cp/mvコマンドで、配置先に同名のファイルがあった場合のみリネームして配置させる

Windowsのエクスプローラーでコピーをすると、同名のファイルがあった場合には以下のような画面が表示される。
その時に表示される選択肢である「コピーするが両方のファイルを保持する」とほぼ同等の動作をLinuxのcp/mvコマンドで実現する場合、どうすればいいのだろう?

厳密な動作は少々異なるが、これらをcp/mvコマンドで実現する場合は「--backup」オプションを付与し、その際の動作を指定する事で実現可能だ。
例えば、連番の場合は以下のようにする。

cp --backup=t コピー元 コピー先
mv --backup=t 移動元 移動先

[root@test-c...

先日作成したssh自動接続用のスクリプト、基本的にパスワード認証のみで考えていたのだけどAWSとかAzureだと鍵認証なんだよね。
という訳で、微修正ながら鍵認証に対応させてみた。

1.host.list

host.listには、鍵ファイルの指定列を新しく追加した。

host.list

# SSHAutoLogin.ttl用 ログインホスト設定ファイル
# 左から順に、以下の内容を記述していく。
# HOST_NAME(任意の名称。接続するホストの選択時やログ名に利用する。必須。)
# HOST_IP(ホストのIPアドレス。接続時に利用する。必須。)
# KEY_FILE(鍵...

Pythonによるssh自動接続用スクリプト(試作)

2017/08/18 追記

Golangで書き直してgithubに上げてるので、ちゃんと使うならそっちのほうがいいかも。


(すっごい久々にブログの記事書いた気がする…)

この度、転職が決まったんですが新しい職場だとクライアントはMacを使える事になった。
今までの職場だとTeratermのlistboxを使用したマクロでサーバにログインしてたので、似たようなものをMac用に作ることにしてみた。

で、最初bashで書こうかと思ったんだけど、勉強がてらPythonで書いてみようと思いPythonにした。
とりあえず、今の状態で出来ることとしては以下。

  • host.lis...