8946のTake#1から#4まで

いまさらながら8946|ハッキングチャレンジサイトというサイトを見かけたので、ちょこちょこ解いてみましょう

特に答えを書くなという注意はないが、答えを書くのはマナー違反かとおもうので、自分が思い出せるようなヒントだけ

Take1:読む Take2:読む

Take3:Base64 - Wikipediaが4文字ずつの変換で余りを=で埋めることを知って入れば良い*1。 Take4:

Take4:32文字の16進数表記といえば…?*2*3

参考

RLoginでログに制御文字を記録しないための設定

  • RLoginでログをとっておき後で見返したりしたい。

  • RLoginのログ設定のデフォルトはRAWであり、そのままログを取ると制御文字などをすべてログに書き込むため、後で読むときにしんどい。

  • 設定変更して単純なテキストファイルとしての可読性を上げることができる。

続きを読む

/bootの容量不足でyum updateに失敗する場合はyum-utilsを使って古いKernelを削除する

  • yum update を実行すると/bootの容量が足りず更新できないことがある

  • これは古いカーネルが/boot以下に保存されているために発生する*1

  • yum-utilsを利用してpackage-cleanup --oldkernels するとgrubも含めて古いカーネルをよろしく削除してくれる

*1:アップデート後に不具合があった場合などに古いカーネルで起動するため

続きを読む

awkスクリプトのデバック方法

ここひと月ぐらい割とawkを使うようになり、自分なりにmanを読んだり、試行錯誤したawkスクリプトのデバック方法のメモ。

  • 環境
  • gawkのデバックオプションを使う
  • printデバックする
  • gawkの互換性チェックのオプションを使う
  • gawk付属のプロファイラを使う
  • gawk付属のデバッガを使う
  • 参考
続きを読む

CentOSにおけるコマンドの格納パスのおさらい

CentOSの一般ユーザーでlsofを使おうとしたがPATHが通っていなかった。なぜだろうと調べたところ、Filesystem Hierarchy Standardで決まっているコマンドの格納パスについてすっかり忘れていたのでおさらいした際のメモ

本論

あるサーバーでlsofを使おうとしたら以下の通り存在するがPATHが通っておらず実行できなかった。

疑似的に再現すると以下のような形

#lsofが見つからず実行できない
[mk55@localhost ~]$ lsof
bash: lsof: command not found...

#$PATH以下をwhichコマンドで探してみてもない
[mk55@localhost ~]$ which lsof
/usr/bin/which: no lsof in (/usr/local/bin:/usr/bin:/usr/local/sbin:/home/mk55/.local/bin:/home/mk55/bin)

#一般的なパス+$PATH+$MANPATHを検索してくれるwhereisで探してみると/usr/sbinの中にあった
[mk55@localhost ~]$ whereis lsof
lsof: /usr/sbin/lsof /usr/share/man/man8/lsof.8.gz

で、なぜだろうと思ったのだが、そもそもコマンドの用途によって実行可能なユーザーって決まっていたような…… というわけで再度調べてみると以下の通りになっているそうだ。

PATH 内容 CentOS6以前 CentOS7以前
/bin 一般ユーザーでも使えてシングルユーザーモード*1に必須な一般的なコマンドが配置される あり なし 
/sbin rootユーザーが使える管理コマンドが配置される あり なし 
/lib /binと/sbinで使用する共有ライブラリやカーネルモジュール あり なし 
/usr/bin 一般ユーザーでも使えてシングルユーザーモードに必須でない一般的なコマンドが配置される あり あり
/usr/sbin 必須でない管理コマンドが配置される あり あり
/usr/lib /usr/binや/usr/sbin以下が使用する共有ライブラリやカーネルモジュール あり あり
/usr/local ローカル環境で使うものが配置される。配下にbin/, lib/がある あり あり


上の表で”なし”と書いたディレクトリは実態が存在しなくなり、ファイルは/usr配下へ統合され、フォルダは統合先へのシンボリックリンクになっている 試しにCentOS7でls -al /してみると確かにシンボリックリンクになっている。

[mk55@localhost ~]$ cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 
[mk55@localhost ~]$ ls -l /
total 36
lrwxrwxrwx.   1 root root     7 May  1 18:06 bin -> usr/bin
dr-xr-xr-x.   4 root root  4096 May  6 10:27 boot
drwxr-xr-x.  19 root root  3320 May 24 23:50 dev
drwxr-xr-x. 139 root root 12288 May 25 00:02 etc
drwxr-xr-x.   3 root root    17 Nov  6  2016 home
lrwxrwxrwx.   1 root root     7 May  1 18:06 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 May  1 18:06 lib64 -> usr/lib64
drwxr-xr-x.   2 root root     6 Nov  6  2016 media
drwxr-xr-x.   3 root root    18 Nov  6  2016 mnt
drwxr-xr-x.   3 root root    15 Nov  6  2016 opt
dr-xr-xr-x. 130 root root     0 May 24 23:50 proc
dr-xr-x---.  13 root root  4096 May  6 13:18 root
drwxr-xr-x.  35 root root  1120 May 25 00:02 run
lrwxrwxrwx.   1 root root     8 May  1 18:06 sbin -> usr/sbin
drwxr-xr-x.   2 root root     6 Nov  6  2016 srv
dr-xr-xr-x.  13 root root     0 May 24 23:50 sys
drwxrwxrwt.  10 root root  4096 May 25 00:02 tmp
drwxr-xr-x.  13 root root  4096 May  1 18:06 usr
drwxr-xr-x.  23 root root  4096 May 24 23:50 var

参考

  1. whereisとwhereの違い ⇒ 探し物は何ですか?(Linuxコマンドパス検索「which」他編) | UserSide Staff Blog

  2. RHEL7(CentOS7)以降のファイルシステムレイアウトの変更内容 ⇒ 2.3. ファイルシステムレイアウト

    /bin、/sbin、/lib、および /lib64 ディレクトリーは、/usr 下に移動しています。

  3. Linuxディレクトリ構造についてもっと知りたいならFilesystem Hierarchy Standardを調べましょう

*1:Wikipedia日本語版に記載がない!

Excel VBAでシートの存在有無を判定するのにループはいらない。On Errorステートメントを使おう

Excel VBAでシートの存在有無を判定する場合にループ使うのは冗長だなーと思ったのだが、実はOn Errorステートメントを使うとすっきりと書けた、という話。

元ネタはExcel VBA If WorkSheet(“wsName”) Exists - Stack Overflow

続きを読む

ワイルドカードによるマッチングはGLOBっていうんですね

日常的にワイルドカードを使っているくせにちゃんと名前を知らなかったんだなあ、というメモ。

ワイルドカードってのはls *.txtのようなやつ。

文字列に ‘?’, ‘*’, ‘[’ が含まれていると、 それはワイルドカードパターンとみなされる。 「glob する」というのは、ワイルドカードパターンを展開して、 そのパターンにマッチするパス名のリストを得ることである。

出典: Man page of GLOB

参考

Man page of GLOB

glob (programming) - Wikipedia)*1

BashのGlobは積極的に利用しましょう - 理系学生日記

glob(グロブ)について - Qiita

*1:日本語のWikipediaには記載がなかった。