aliasは便利ですが、aliasを解除したコマンドを使用したい場合があります。

そんなときは頭に \ (バックスラッシュ) を付けるとaliasを一時的に無効にしてくれます。

一時的にaliasを無効にする

1

$ \cp -f hoge/ piyo

知らんかった…

JavaScript力向上の為、node.jsで何か作ってみようと思いインストールしてみた。

環境

CentOS 6.3

依存パッケージのインストール

1

$ yum install git openssh-devel

nvm(node.jsバージョン管理)のインストール

node.jsのバージョン管理はnvmの他にnodebrewnodeenvがあるらしいが、初めてなので安直にStarが多かったnvmを利用してみる。

1

$ curl https://raw.github.com/creationix/nvm/master/install.sh | sh

~/.bash_profileを確認すると次の設定が追加されていた。

1

[[ -s /root/.nvm/nvm.sh ]] && . /root/.nvm/nvm.sh # This loads NVM

反映

ということで反映

1

$ source ~/.bash_profile

サブコマンドの補完

nvmコマンドは使えるようになったが、サブコマンドの補完が効かないので以下の設定を ~/.bash_profile または ~/.bashrc に追加

1

[[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion

設定を反映させたら nvm [tab][tab] でサブコマンドの補完が効くようになる。

1

2

3

$ nvm

alias          copy-packages  help           list           ls             run            uninstall      version

clear-cache    deactivate     install        list-remote    ls-remote      unalias        use

node.jsのインストール

サブコマンド「ls-remote」で利用可能なnode.jsのバージョンが確認できるので表示させてみる。

利用可能なバージョンの確認

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

$ nvm ls-remote

   v0.1.14     v0.1.29    v0.1.100      v0.3.3      v0.4.9      v0.6.0     v0.6.15      v0.7.8     v0.8.10      v0.9.1     v0.10.3

   v0.1.15     v0.1.30    v0.1.101      v0.3.4     v0.4.10      v0.6.1     v0.6.16      v0.7.9     v0.8.11      v0.9.2     v0.10.4

   v0.1.16     v0.1.31    v0.1.102      v0.3.5     v0.4.11      v0.6.2     v0.6.17     v0.7.10     v0.8.12      v0.9.3     v0.10.5

   v0.1.17     v0.1.32    v0.1.103      v0.3.6     v0.4.12      v0.6.3     v0.6.18     v0.7.11     v0.8.13      v0.9.4     v0.11.0

   v0.1.18     v0.1.33    v0.1.104      v0.3.7      v0.5.0      v0.6.4     v0.6.19     v0.7.12     v0.8.14      v0.9.5     v0.11.1

   v0.1.19     v0.1.90      v0.2.0      v0.3.8      v0.5.1      v0.6.5     v0.6.20      v0.8.0     v0.8.15      v0.9.6

   v0.1.20     v0.1.91      v0.2.1      v0.4.0      v0.5.2      v0.6.6     v0.6.21      v0.8.1     v0.8.16      v0.9.7

   v0.1.21     v0.1.92      v0.2.2      v0.4.1      v0.5.3      v0.6.7      v0.7.0      v0.8.2     v0.8.17      v0.9.8

   v0.1.22     v0.1.93      v0.2.3      v0.4.2      v0.5.4      v0.6.8      v0.7.1      v0.8.3     v0.8.18      v0.9.9

   v0.1.23     v0.1.94      v0.2.4      v0.4.3      v0.5.5      v0.6.9      v0.7.2      v0.8.4     v0.8.19     v0.9.10

   v0.1.24     v0.1.95      v0.2.5      v0.4.4      v0.5.6     v0.6.10      v0.7.3      v0.8.5     v0.8.20     v0.9.11

   v0.1.25     v0.1.96      v0.2.6      v0.4.5      v0.5.7     v0.6.11      v0.7.4      v0.8.6     v0.8.21     v0.9.12

   v0.1.26     v0.1.97      v0.3.0      v0.4.6      v0.5.8     v0.6.12      v0.7.5      v0.8.7     v0.8.22     v0.10.0

   v0.1.27     v0.1.98      v0.3.1      v0.4.7      v0.5.9     v0.6.13      v0.7.6      v0.8.8     v0.8.23     v0.10.1

   v0.1.28     v0.1.99      v0.3.2      v0.4.8     v0.5.10     v0.6.14      v0.7.7      v0.8.9      v0.9.0     v0.10.2

release notesを確認すると現時点ではv0.10.5がstableなのでこいつをインストールする。

v0.10.5のインストール

1

nvm install 0.10.5

Aliasの設定

新しくshellを立ち上げたり再起動をかけるとnvmの設定がリセットされるようなのでデフォルトのバージョンを設定する。

1

$ nvm alias default 0.10.5

とりあえずこんな感じで大丈夫なのかな。

参考

Node Version Manager

2つのファイルを単純に結合するには「cat」コマンドを使えばいいですが、 行ごとに結合をする場合 「paste」コマンドなるものがあることを知りました。

pasteコマンドを使ったファイルの連結

fileAとfileBをpasteコマンドで連結します。

1

$ paste fileA.txt fileB.txt > fileC.txt

fileA.txt

1

2

3

AAA

BBB

CCC

fileB.txt

1

2

3

111

222

333

出力結果

以下のフォーマットで出力してくれます。素敵!

fileC.txt

1

2

3

AAA 111

BBB 222

CCC 333

区切り文字はデフォルトはタブですが -d [区切り文字] オプションを指定することでカンマなどで区切ることができます。

区切り文字をカンマに

1

$ paste -d , fileA.txt fileB.txt > fileC.txt

出力結果

fileC.txt

1

2

3

AAA,111

BBB,222

CCC,333

使う機会はそれほどないかもしれませんが、知っておくと楽できそうです。

ほんとに今更感があるが、ちょっとしたことでもブログに書いておこうと思う。

親切心からかPHPはデフォルトでレスポンスヘッダにPHPのバージョン情報を出力しています。

1

2

3

4

5

6

HTTP/1.1 200 OK

Date: Wed,  24 Apr 2013 13:46:59 GMT

Server: Apache

X-Powered-By: PHP/5.2.0

Content-Length: 2558

Content-Type: text/html; charset=UTF-8

PHPのバージョン出力を抑制する

PHPのバージョン情報が出力されると、そのバージョンの脆弱性を狙った攻撃を受ける可能性がある為、PHPのバージョン情報を出力しないよう設定行います。

php.ini に次の設定を加え、Apache or Nginx の再起動します。

1

expose_php=Off

設定を加えた後のレスポンスヘッダ

1

2

3

4

5

6

HTTP/1.1 200 OK

Date: Wed,  24 Apr 2013 13:46:59 GMT

Server: Apache

Content-Length: 2558

Content-Type: text/html; charset=UTF-8

...

バージョン情報が出力されていないことが確認できます。 セキュリティ上 Webサーバのバージョン情報も抑制したほうがよいでしょう。

ヘッダ情報の確認方法

以下の方法で簡単にヘッダ情報を確認できます。

wgetコマンドでも確認できますがmacはデフォルトではwgetコマンドがインストールされていないのでcurlを利用するのがいいと思います。Winはtelnet?

1

curl -I http://hoge.com
php

MacでPHP5.3.24をインストールしようとしたらコンパイル時に以下のエラーが発生した。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

-----------------

|  BUILD ERROR  |

-----------------



Here are the last 10 lines from the log:



-----------------------------------------

/var/tmp/php-build/source/5.3.24/Zend/zend_objects.c:96: warning: assignment discards qualifiers from pointer target type

/var/tmp/php-build/source/5.3.24/Zend/zend_object_handlers.c: In function ‘zend_get_property_guard’:

/var/tmp/php-build/source/5.3.24/Zend/zend_object_handlers.c:301: warning: passing argument 3 of ‘zend_unmangle_property_name’ from incompatible pointer type

/var/tmp/php-build/source/5.3.24/Zend/zend_object_handlers.c:301: warning: passing argument 4 of ‘zend_unmangle_property_name’ from incompatible pointer type

/var/tmp/php-build/source/5.3.24/Zend/zend_object_handlers.c:304: warning: assignment discards qualifiers from pointer target type

/var/tmp/php-build/source/5.3.24/sapi/apache2handler/sapi_apache2.c: In function ‘php_handler’:

/var/tmp/php-build/source/5.3.24/sapi/apache2handler/sapi_apache2.c:675: warning: format ‘%u’ expects type ‘unsigned int’,  but argument 3 has type ‘size_t’

ld: library not found for -lltdl

collect2: ld returned 1 exit status

make: *** [libs/libphp5.bundle] Error 1

-----------------------------------------

libtoolのインストール

昔Linuxで似たエラーを経験したことがあったので「libtool」をいれる。

1

$ brew install libtool

これで無事インストールができた。このブログ全然コード書いてないですね。

Apacheのconfigファイルの文法をチェックする方法として「configtest」があるが、 MySQLの文法チェックはどうやるのか調べてみた。

MySQLのconfigファイルの文法をチェックする方法

次のコマンドで再起動せずに文法をチェックできる。

—defaults-file と —pid-file は適宜変更すること。

1

$ mysqld --help --verbose --skip-networking --defaults-file=<path to my.cnf> --pid-file=$(tempfile) 1>/dev/null

MySQLのhelpコマンドはヘルプ情報をコマンドライン上に表示しすぐに終了するが、configファイルは読みにいくようでそれを利用し文法のチェックを行う。

また同じシステム上で既にMySQLが起動している場合、干渉することを避ける為 —skip-networking と —pid-file オプションを指定。

注意点

この方法は文法エラーを見つけるだけで値のチェックは行わないので注意する。

ほぼ参考にした記事を翻訳しただけですね。はい

参考

How to check MySQL configuration file syntax?

How to syntax-check your my.cnf file

mac, php

普段、開発環境は仮想マシン上にしか作らないのだが検証の必要があってローカルにPHPをインストールしようとしたところ コンパイル時に以下のエラーが発生した。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

-----------------

|  BUILD ERROR  |

-----------------



Here are the last 10 lines from the log:



-----------------------------------------

  "_sk_shift", referenced from:

      _load_all_certs_from_file in openssl.o

  "_sk_value", referenced from:

      _zif_openssl_csr_new in openssl.o

      _zif_openssl_pkcs7_verify in openssl.o

      _php_openssl_parse_config in openssl.o

      _php_openssl_sockop_set_option in xp_ssl.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

make: *** [sapi/cli/php] Error 1

-----------------------------------------

同様の現象に悩んでる方がいてそのコメントにOpenSSLのバージョンあげろと書いてあったので その通りにしてみたらインストールできた。

OpenSSLのアップデート方法

1

2

3

4

5

$ brew install openssl

$ brew link openssl --force

$ exec $SHELL -l

$ openssl version

OpenSSL 1.0.1e 11 Feb 2013

インストールできたついでに初めてコメントを書いてみたが自身の英語力がなくて泣けてくる。

次のSQLを実行する

1

2

3

4

5

6

SELECT

  AUTO_INCREMENT

FROM

  INFORMATION_SCHEMA.TABLES

WHERE

  table_name='hoge';

結果

+----------------+

| AUTO_INCREMENT |

+----------------+

|         662058 |

+----------------+

最近shellにハマってるので調べて便利そうなものをまとめてみます。

タイトルに「1」と記載してますがシリーズ化するかは分かりません。たぶんしないでしょう…

cd コマンド 少しのスペルミスを自動で修正して実行してくれる

次の一文を ~/.bashrc または ~/.bash_profile に記載

1

$ shopt -s cdspell

ex)

1

2

$ cd Dropbix/Publoc

Dropbox/Public

少しのスペルミスは構わず実行します。リファレンスによるとチェックされるスペルミスは

チェックされる誤りは、文字の入れ替わり・文字の欠け・ 1 文字余分にあることです

だそうです。このオプションは対話型のみに有効でスクリプト内では無効となっています。

historyからのコマンドの実行は一度編集バッファに出力する

次の一文を ~/.bashrc または ~/.bash_profile に記載

1

$ shopt -s histverify

ex)

1

2

3

直前に実行したコマンドを再実行

$ !!

rake preview

histverifyオプションが無効の場合、即時に実行されますが有効の場合は、確認後に実行することができます。

連続して実行したコマンドはhistoryに保存しない

次の一文を ~/.bashrc または ~/.bash_profile に記載

1

$ export HISTCONTROL=ignoredups

historyの最後の行と同じコマンドは記録されません。

空白で始まるコマンドはhistoryに保存しない

次の一文を ~/.bashrc または ~/.bash_profile に記載

1

$ export HISTCONTROL=ignorespace

ignoredups ignorespace 両方を指定したい場合

1

$ export HISTCONTROL=ignoreboth

EOF (Ctrl-D) 入力の許可数を設定する

次の一文を ~/.bashrc または ~/.bash_profile に記載

1

$ export IGNOREEOF=5

デフォルトでは Ctrl-D を一度押すとログアウトしてしまいますが、IGNOREEOFを設定することでその回数を任意に決めることができます。

バックアップファイルを簡単に作成する

作業をする際に念のためconfファイルのバックアップをとっておきたい場合があります。

通常のコピー

1

$ cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.back

もっと短く書けます。

1

$ cp /etc/httpd/conf/httpd.conf{,.back}

ディレクトリを複数作成する

上記と同じ方法で複数のディレクトリを作成することできます。

1

2

3

4

5

6

7

8

$ mkdir -p ~/rpm/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

$ ll ~/rpm/



drwxr-xr-x  2 noto  staff  68  4 17 00:19 BUILD

drwxr-xr-x  2 noto  staff  68  4 17 00:19 RPMS

drwxr-xr-x  2 noto  staff  68  4 17 00:19 SOURCES

drwxr-xr-x  2 noto  staff  68  4 17 00:19 SPECS

drwxr-xr-x  2 noto  staff  68  4 17 00:19 SRPMS

参考