きんときんの技術メモ

日々の業務で学んだ技術を中心に書きます。CentOS7で作業すること多め。

sedコマンドの最新版をダウンロードする

今回は、sedコマンドのダウンロード方法について紹介する。

ある業務で「-z」オプションを使用すれば効率よくいくと考え、「sed -z」にて実行しようとした。しかしエラー。原因は、ver4.2.1では「-z」オプションがまだリリースされていなかったからだ。

ver4.2.2にてzオプションはリリースされているが、どうせ古いバージョンで更新するなら、最新版にしてしまえと思い、最新版にすることにした。

以下、ダウンロードする際のコマンドである。

 

1.GNUプロジェクトのページから対象ファイルをwgetでダウンロード

$ wget https://ftp.gnu.org/gnu/sed/sed-4.5.tar.xz

 

2.ダウンロードしたファイルを解凍する

$ xz -dc sed-4.5.tar.xz | tar xfv -

 

3.回答によって生成されたディレクトリに移動

$ cd sed-4.5

 

4.Makefileファイルの生成(環境の検査の実施)

$ ./configure

※ここで、エラーが出た場合、原因となっているコマンドをyum等でインストールする。私の場合、gccが足りなかった。

 

5.バイナリの生成

$ make

 

6.システムへの書き込み実行

$ make install

 

うまくいけば、/usr/local/binにsedがインストールされているはずだ。

これを所定の位置に移動したりして、sedコマンドを打てばOKだ!

 

アップデートできたかの確認は、

$ sed --version
sed (GNU sed) 4.5
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

作者 Jay Fenlason、 Tom Lord、 Ken Pizzini、
および Paolo Bonzini。
GNU sed home page: <https://www.gnu.org/software/sed/>.
General help using GNU software: <https://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-sed@gnu.org>.

でOKだ!

 

【CentOS7】nkf コマンドのインストール方法

久しぶりに更新します。

最近、懸賞にハマっていて、プライベートはほぼ懸賞です。。(笑)

(懸賞ブログも始めたいと思ってたりもしますw)

 

さて、今回はnkfコマンドのインストール方法について書き留めます。

yumにてインストールしようと思ったのですが、以下のようなエラーが出てしましました。

# yum install -y nkf 
    読み込んだプラグイン:fastestmirror

Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
base                                                     | 3.6 kB     00:00
extras                                                   | 3.4 kB     00:00
remi-safe                                                | 2.9 kB     00:00
updates                                                  | 3.4 kB     00:00
(1/3): extras/7/x86_64/primary_db                          | 204 kB   00:00
(2/3): remi-safe/primary_db                                | 1.3 MB   00:00
(3/3): updates/7/x86_64/primary_db                         | 6.0 MB   00:00
Determining fastest mirrors
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * remi-safe: ftp.riken.jp
 * updates: ftp.iij.ad.jp
パッケージ nkf は利用できません。
エラー: 何もしません

「パッケージ nkf は利用できません。」と怒られてしまいました。

理由は、デフォルトのリポジトリにないからです。

ローカルのリポジトリにはないので、どこからか取得しなくてはなりません。

 

以下のコマンドでインストールすることができます。

# yum localinstall -y http://mirror.centos.org/centos/6/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86_64.rpm

 

SSHコマンドでログインするときの奴

SSHコマンドで別サーバにファイルをコピーしたいとき、以下のようなコマンドを打つと思う。

 

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /var/lib/jenkins/secrets/repos0.key" /tmp/hoge.txt XXX@XXXX.com:/tmp/

 

接続はできるのだが、以下のメッセージが出てきてややこしい。

Warning: Permanently added '' (RSA) to the list of known hosts.

 

LogLevelオプションを追加することで解消した。

ssh -o LogLevel=error -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /var/lib/jenkins/secrets/repos0.key" /tmp/hoge.txt XXX@XXXX.com:/tmp/

【PHP】休日を省いた日付処理

現在日付から4営業日後の日付を取得するロジックを作りました。

//本日から4営業日後の計算

$setbizDays = 4; //何営業日後かを設定
$offdays = array('Sat','Sun'); //土、日を配列に格納
$holidays = array('2018-03-21','2018-04-29','2018-04-30','2018-05-03','2018-05-04','2018-05-05','2018-07-16','2018-08-11','2018-09-17','2018-09-23','2018-09-24','2018-10-08','2018-11-03','2018-11-23','2018-12-23','2018-12-24'); //休日を配列に格納
$fourbizDays = date("Y-m-d"); //現在日付を設定
$fourbizDaystmp = date("Y-m-d"); //処理用に現在日付を設定

$i = 1;
$j = $setbizDays;

//現在日付から1日単位で休日かを判定する
while($i <= $j){
$tmp = strtotime($fourbizDaystmp . " + $i day ");
if(in_array(date("D", $tmp), $offdays) ||
in_array(date("Y-m-d", $tmp), $holidays)){
$i++;
$j++;
}else{
$i++;
}

$fourbizDays = date("Y-m-d", strtotime($fourbizDays . " + 1 day ")); 
}

あとは、$fourbizDaysを表示させるなり、煮るなり焼くなりすればOK!

$holidaysはGoogleのカレンダーAPIから取得したいですね。。

【CentOS7】firewalldの設定

開発で使っているサーバから別のサーバへhttp接続をさせたいと思い、

telnetコマンドで接続を試したが、うまくいかなかった。

 

原因を探ったところ、どうやらfirewallが行く手を阻んでいるようだった。

firewall自体は落としたくなかったので、firewallにルールを追加することにした。

 

以下のコマンドでfirewallにルールを付与した。

$ firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -m state --state NEW -d [ipアドレス] -m tcp -p tcp --dport 80 -j ACCEPT

http接続できるようになった。。

これで、json取得できる。。!(*´▽`*)

【シェルスクリプト】bashの場合、Java風のfor文が書ける!

商用データの移行をしていて、めんどくさいループ作業があったので、シェルを作っている。

シェルのfor文について、以下のような、シェル特有の書式でしか書けないと思っていた。

for 変数 in リスト
do
処理...
done

 

しかし、bashの場合のみ、Java風の記述が可能である。

#!/bin/bash
for (( i=0 ; i<10 ; i++ ))
do
echo "$i"
done