goo blog サービス終了のお知らせ 

dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

cmake のメモ

2018-06-05 12:43:47 | linux
cmake を実行する際のメモ。
cmake の対象のディレクトリで
cmake .

と実行してしまうと、対象のディレクトリにいろいろなファイルが作成してしまうため、
mkdir build
cd build
cmake ..

とすると、build ディレクトリにファイルが作成されるので、
どのファイルが新たに作成されたかがわかりやすくなります。


インストール先をデフォルト(/usr/local)から変えたい場合には、
cmake_install.cmake 内の
SET(CMAKE_INSTALL_PREFIX "/usr/local")

を変更すれば、インストール先を変更できます。


また、コンパイラを変えたい場合には
export CC=Cコンパイラのパス
export CXX=C++コンパイラのパス

を実行してから、cmake すれば指定のコンパイラでコンパイルできます。

apacheのmod_rewriteで特定のCGIパラメータを削除する方法

2013-06-07 23:23:09 | linux
CGIパラメータに不要なパラメータがある場合に、mod_rewriteでCGIパラメータを除去する方法です。
例えば session という変数を除去するには以下のように設定します。

RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.*)(?:(?:^|[&])session=[^&]*)(.*)$
RewriteRule ^/rewrite\.cgi(.*)$ /rewrite.cgi?%1%2 [PT]

RewriteCond の正規表現にマッチした文字列は、RewriteRule では %n で参照します。


wgetでcookieを扱う方法

2012-06-21 22:37:35 | linux
wget コマンドで cookie を保存するには --save-cookies オプションを使います。

$ wget --save-cookies=cookie.txt 'http://www.goo.ne.jp/'

--save-cookies で指定されたファイルに cookie が保存されます。

$ cat cookie.txt
# HTTP cookie file.
# Generated by Wget on 2012-06-21 22:36:44.
# Edit at your own risk.

www.goo.ne.jp FALSE / FALSE 1371821801 gootopstay FA:1340285801&FR:0&FS:&FT:&UC:********************************
www.goo.ne.jp FALSE / FALSE 1342877801 gootop RK:1&LU:38_24_23_49_48_16&MV:1&AX:**********************&AS:*******************************&SR:01003
.goo.ne.jp TRUE / FALSE 1403357801 gooproperty AR%3D%26WE%3D%26TV%3D%26TH%3D%26ST%3D%26HO%3D%26TR%3D%26TP%3D%26MP%3D
.goo.ne.jp TRUE / FALSE 2145801600 NGUserID ********-****-**********-*


逆に cookie を送信するには、--load-cookies オプションを指定します。
上記の形式の cookie のファイルを編集すれば、自由に cookie を指定することができます。

$ wget --load-cookies=cookie.txt 'http://www.goo.ne.jp/'


splitコマンドで行単位で分割する方法

2011-08-10 21:04:49 | linux
splitコマンドでファイルを分割する際に、-C オプションを使うと、指定バイト数を超えないところで、行単位でファイルを分割することができます。

$ cat test.txt
abc
defgh

-C 7 を指定して、行単位で7バイト毎に分割します。
$ split -C 7 test.txt
$ ls x*
xaa xab
$ cat xaa
abc
$ cat xab
defgh


-C ではなく -b オプションを指定すると単純にバイト単位で分割されます。

$ split -b 7 test.txt
$ ls x*
xaa xab
$ cat xaa
abc
def
$ cat xab
gh


grepでパターンをファイルで指定する方法

2011-07-02 22:51:53 | linux
grepで検出したいパターンを以下のようにファイルで指定することもできます。

grep -f {パターンファイル} {ファイル}

パターンファイルは1行1パターンで指定します。

$ cat pat.txt
http://abc.com/
http://abc.com/def/
http://abc.com/def/ghi/

$ cat test.txt
http://abc.com/DEF/

$ grep -f pat.txt test.txt
http://abc.com/DEF/


grepコマンドの戻り値

2011-05-16 00:10:40 | linux
grepコマンドの戻り値は、マッチした行があれば0、マッチした行がなければ1になります。

$ cat test.txt
abc
abcd
abcde
abcdef

■マッチする場合
$ grep cde test.txt
abcde
abcdef

$ echo $?
0

■マッチしない場合
$ grep CDE test.txt
$ echo $?
1

標準出力の行数を wc でカウントするのもよいかもしれません。



duコマンドで出力結果のディレクトリ階層数を指定する方法

2011-04-29 17:09:36 | linux
du コマンドで --max-depth オプションを指定すると、ファイル容量を指定の階層数までにまとめて出力してくれます。

$ du -m /usr --max-depth=1
1 /usr/X11R6
145 /usr/bin
1 /usr/etc
1 /usr/games
86 /usr/include
...


--max-depth 指定がない場合には全ディレクトリ毎に容量を表示します。

$ du -m /usr
...
1 /usr/lib/locale/aa_DJ.utf8/LC_MESSAGES
2 /usr/lib/locale/aa_DJ.utf8
1 /usr/lib/locale/aa_DJ/LC_MESSAGES
1 /usr/lib/locale/aa_DJ
...

wgetでproxyを指定する方法

2011-04-26 01:03:05 | linux
wgetでproxy経由でHTMLを取得するには、コマンドラインオプションで -e HTTP_PROXY={proxyホスト名} を指定します。

$ wget -e HTTP_PROXY=proxy.co.jp 'http://www.goo.ne.jp/'

ポート番号を指定する場合には、proxyホスト名の後ろに ":{ポート番号}" を追加します。

$wget -e HTTP_PROXY=proxy.co.jp:8080 'http://www.goo.ne.jp/'



プロセスの生死を確認する方法

2011-04-03 21:59:58 | linux
kill -0(ゼロ) PID で、指定プロセスの生死を確認することができます。

$ sleep 30&
[1] 12858

30秒間スリープする。sleep のプロセスIDは 12858。
30秒経過する前に kill -0 12858 を実行すると、kill コマンドの終了ステータスは 0 になります。

$ kill -0 12858; echo $?
0

sleep コマンド終了後に kill -0 12858 を実行すると、

$ kill -0 12858; echo $?
-bash: kill: (12858) - そのようなプロセスはありません
1

終了コードは 1 になっているので、kill -0 PID でプロセスの生死を確認することができます。


grepで固定文字列の検索

2011-02-22 22:50:21 | linux
grep で文字列を検索するときに、-F を使うとパターンではなく、指定文字列での文字列的な一致になります。

$ cat test.txt
http://abc.com/def/ 200
http://abc.com/ 200

$ grep -F 'http://abc.com/*' test.txt

$ grep 'http://abc.com/*' test.txt
http://abc.com/def/ 200
http://abc.com/ 200

grep の引数をユーザが指定するようなアプリケーションの場合には、パターン文字列のエスケープを考慮しなくてよいので、-F オプションが便利そうです。

ちなみに、tsv ファイルを検索するときなどに、タブを検索文字列に含める場合には、bash では Ctrl-v TAB(Ctrl-iも可) でタブを入力できます。
emacs でプログラム中にタブを埋め込むなら、Ctrl-q TAB(Ctrl-i) です。