ちょっと前のシェル芸勉強会の時にも触れたのだけど、Googleのサジェストをxml形式で出力してくれるページへcurlでアクセスすることで、サジェストの一覧を取得することができる。 以下、「AIUEO(あいうえお)」というキーワードでサジェストを取得している。なお、出力結果はSJISとなっているようなので、途中でnkfでUTF-8に変換している。


諸事情があり、OSのrootユーザは持っているけどadminユーザのパスワードが分からない(変更も今はできない)+Web画面で新規ユーザの作成を制限しているGitlabに対し、ユーザを追加するという必要があった。 で、そういった場合には「gitlab-rails」コマンドを使って処理をすることで、コンソール上からadminユーザのパスワード変更やユーザの追加と言った処理を行えるようだ。

まず、以下のコマンドを実行してgitlab-railsでコンソールに接続する。 コンソールの起動まで少し時間がかかる。

gitlab-rails console production

コンソールが起...


ときたま、既存のPostgreSQL環境でテーブルやビューの作成時のSQLを確認することがある。 MySQLとかだと「SHOW CREATE ~」で確認できるのだけど、PostgreSQLでテーブル定義文を確認する場合はSQLからは確認ができず、pg_dumpでバックアップデータを取得してCREATE TABLEを抽出することで対応する。

pg_dump DB名 -s -t テーブル名 | awk '/^CREATE TABLE/,/^)/'
-bash-4.2$ pg_dump test_db -s -t test_table --schema-only | awk '/^CRE...

Apache 2.4で設定を行っていた際、同じ文字列を多用して設定することが多かったので変数を利用することにした。 Apache 2.4以降であればDefineディレクティブというものが追加されているため、それを利用することで変数を定義することができる。

Define var Value
${var}

そんな感じの処理について見かけたので、一応備忘で残しておく。 例えば、以下のようなvmstatの出力をカンマ区切りの表に切り替えたいとする。

[root@BS-PUB-CENT7-01 ~]# vmstat 1 10 | tail -n+2
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 1291364   1812 500100    0    0     0     0    9   14  0  0 100  0  0
 0  0      0...

Twitterをボケーッと見てたところ、そんな感じの処理についてしたいというツイート見かけたので、備忘で残しておく。 urlの箇所をgrepするだけであれば、以下のように正規表現を記述してやればいい。 ※マルチバイト非対応。日本語を含む場合はパーセントエンコーディングである必要あり。

grep -zoP -- 'http(s?)://[0-9a-zA-Z?=#+_&:/.%]+'
blacknon@BS-PUB-DEVELOP:~$ cat test_url1.list

yyy="https://example.co.jp/test...

AWSのELBで、IAMを使って証明書を管理している場合に、WEBコンソール上からだと証明書のアップロードをして変更する際にエラーが出たり、証明書の削除ができなかったりといったことがある。 で、じゃあどうすればいいのかというと、基本はaws-cliを使って対応するのがセオリーのようだ。以下、備忘でコマンドを残しておく。

まず、事前確認として以下のコマンドでIAM管理している証明書の一覧を取得する。

aws iam list-server-certificates | jq -r '.ServerCertificateMetadataList[].ServerCertificateNam...

調べ物をしてたところ、ヒストリーからTUIで対象のコマンドを選択できる「HSTR」というツールを見かけたので、実際に使ってみることにする。 gifがgithubのREADMEに上がっているので、そちらを見れば大体のイメージは湧くと思う。

1. インストール

インストールは以下のコマンドで行える。

CentOSの場合

sudo yum install hstr

Ubuntuの場合

sudo add-apt-repository ppa:ultradvorka/ppa
sudo apt-get update
sudo apt-get install hh

ソースから

...

コンソール上で、複数ファイルの行を交互に出力させる処理について見かけて実際にやってみたので、記録として残しておくことにする。 基本的にはpasteコマンドを利用する事で対応する。

1. 複数ファイルの内容を1行ごとに交互に出力させる

単純に、複数ファイルの内容を1行ごとに交互に出力させる場合。 この場合は、pasteでデリミタを改行にして以下のように出力させればいいだけだ。

paste -d'\n' file1 file2 # ファイルの場合
paste -d'\n' <(command1) <(command2) # コマンドの実行結果を利用する場合
blacknon@BS-...

以前にsedでn個目~n個目までにヒットした箇所のみを置換する処理について記述したが、今回は奇数・偶数回目にヒットした箇所、n回目ごとにヒットした箇所のみを置換する処理についてを備忘として残しておくことにする。 基本は同じで、ブレース展開を使って置換処理についての箇所を生成させるというもの。 以下、実行例。

sed -e's/before/after/'{1,{2..1000..1}} # 奇数ごとの場合
sed -e's/before/after/'{2,{3..1000..1}} # 偶数ごとの場合
sed -e's/before/after/'{n,{(n*2-1)..1000....

YubikeyでWindows 10ログイン時に二要素認証を行うよう設定する

Windows 10でYubikeyを用いたログイン・ロック解除時の二要素認証設定をする機会があったので、記録として残しておく。 Mac OS Xでの設定についてはこちらでやっている。 なお、事前にチャレンジレスポンスの設定は行っているものとするが、以下の点について注意が必要。

  • 鍵作成時に「Require user input(button press)」のチェックは外しておくこと
    • →このチェックが入った状態だと、ログイン時にボタンをタッチしても認識されず、エラーになってログインできなくなるため
  • バックアップキーには同じ鍵を登録すること
    • →複数の鍵を登録できないため
  • ...

第31回シェル芸勉強会に参加してきました(復習)

だいぶ遅くなってしまったけど、第31回シェル芸勉強会に行ってきたのでその復習。今回は問題数がいつもより1問多く、9問出題されている。 問題・解答はこちら。 正直、今回はえらい難しかった気がする。あまり解けなかった。

事前に、問題用のデータを以下のコマンドでダウンロードしておく。

git clone https://github.com/ryuichiueda/ShellGeiData.git

Q1.

num.txtという数字が羅列されたファイルから、「1」の前の数字を削除するという問題。 改行は無視する必要があるので、ただ単純にsedで後方参照をすればいいというものではない...


ターミナル上でファイルの更新日付きのリストを作成する(Linux or 商用UNIX(AIX/HP-UX))

Twitterでそういった処理について見かけたので、備忘として残しておく事にする。 GNU拡張されたlsやfindのあるLinuxであれば処理は結構簡単なのだけど、POSIXのコマンドしか無い場合だとperlとかを使うしか無い。

Linux等の場合なら、lsを使う場合は以下のようにすれば取得が可能だ。

ls -lad $PWD/{.,}* --time-style="+%F %T"|eval awk "'{print" \${6..8}\, "_ }'"
ls -lad $PWD/{.,}* --time-style="+%F %T"|tr -s ' '|cut -d ' ' -f6-...

ターミナル上で「n~mまでの列を出力」といった処理をする場合、個人的には以下のようにawkで処理をする場合が多かった。

awk '{for(i=n;i<=m;i++){a=a" "$i}gsub("^ ","",a);print a}'
[root@BS-PUB-CENT7-01 ~]# echo {01..10} | awk '{for(i=3;i<=8;i++){a=a" "$i}gsub("^ ","",a);print a}'
03 04 05 06 07 08

ただやはりこれだと長くてわかりにくいため、もうちょっと短く書けないかなと調べてみたので、備忘として残しておくこと...


Twitterでそういった処理について見かけたので、念のため備忘として残しておく事にする。 findコマンドではnotで指定条件以外を出力できるのだが、対象ディレクトリ配下に指定したファイル名以外のものが入っているとヒットしてしまうのでそれでは対応できない。

なので、一度その指定したファイル名のあるディレクトリのみを取得し、その後findで得た全体のディレクトリ名を突合させてやるという方法で抽出ができる。

find ./ -type d | grep -v -f <(find ./ -type f -name "*filename" -printf "%h\n")
find ./ -t...

コンソール上で、同じ文字の繰り返し(ゾロ目とか)を抽出、置換したいことがあったので、備忘で残しておく事にする。 抽出する場合は、以下のようにgrepで正規表現を書いてやる。 Nのトコはゾロ目の数-1の数字を入れてやる。

grep -oE '(.)\1{N}'
[root@BS-PUB-CENT7-01 test_dir]# seq -w 0 999 | grep -E '(.)\1{2}'
000
111
222
333
444
555
666
777
888
999

置換する場合も同様で、sedで以下のように記述してやればいい。


sshというと22番ポートを利用するものだが、環境によっては利用できない事がある。 で、そういった場合だと443番ポート(SSL)を利用する場合が多いのだが、Webサーバなんかの場合だとすでにhttpsで使用している場合が多い。 そんなとき、sshとsslを443番ポートで同居させて、それぞれのパケットのときは適切に割り振りをしてくれるリバースプロキシのような動作をしてくれるのが『SSLH』になる。

1. インストール

CentOSやDebian系のOSを使っている場合は簡単で、yum(epelが必要)やaptからインストールが可能だ。

Debian/Ubuntu系の場合

s...

ちょっと前に、Twitter上でシェル芸を使って漢数字ソートをするという内容があったので、備忘として残しておく。 そもそも、普通に漢数字をソートした場合はUnicodeのハッシュでソートされるのだが、その順番はバラバラになってしまう。

blacknon@BS-PUB-DEVELOP:~$ echo "一二三四五六七八九〇" | grep -o . | sort
〇
一
九
五
三
四
七
二
八
六

これは、文字コード策定の際に画数の少ない順で振られているとか、色々と事情があるようだ。 まぁ確かに、「one,two,three...」と記述してsortしても順番どおりには並ばないし...