技術メモのかけら

内容はもとより調べたことすら忘れてしまうので個人的なメモです。とにかく短く、結論だけ書いていきます。

PostgreSQLの識別子63バイト制限は別名にも適用される

試した環境: PostgreSQL 11 PostgreSQLのテーブル名や列名など識別子には最大63バイトの制限があり、それ以上の長さは切り捨てられる。 例えば、123456789A123456789B123456789C123456789D123456789E123456789F123456789Gと70バイトの名前をつけようとすると…

yum の検索オプション

yum search で rpm名などキーワードから該当するパッケージを探すことができる。 # yum search yumdownloader Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp-srv2.kddilabs.jp * epel: mirror.vinahost.vn * extra…

rpmがインストールするファイルを調べる

rpm -qlp $ rpm -qlp pg_bigm-1.2.20161011-1.pg96.el6.x86_64.rpm /usr/pgsql-9.6/lib/pg_bigm.so /usr/pgsql-9.6/share/extension/pg_bigm--1.0--1.1.sql /usr/pgsql-9.6/share/extension/pg_bigm--1.1--1.2.sql /usr/pgsql-9.6/share/extension/pg_bigm--…

rpmの情報を調べる

rpm -qip $ rpm -qip pg_bigm-1.2.20161011-1.pg96.el6.x86_64.rpm Name : pg_bigm Relocations: (not relocatable) Version : 1.2.20161011 Vendor: NTT DATA CORPORATION Release : 1.pg96.el6 Build Date: 2016年10月20日 11時58分33秒 Install Date: (no…

rpmファイルの依存関係を調べる

rpmファイルを指定して依存関係を調べる方法。 rpm -qpR ファイル名 $ rpm -qpR pg_bigm-1.2.20161011-1.pg96.el6.x86_64.rpm libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) postgresql96-libs rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadF…

Bashで変数展開やコマンド置換しないでヒアドキュメントしたい

クリップボードの内容をSSHで接続した先のファイルに保存したい場合にヒアドキュメントを良く使うのですが、 ↓こういう書き方をすると、""で囲った時と同じように変数展開されたりコマンド置換されてしまい、シェルスクリプトのコピーなどでは都合が悪いです…

シェルでtrimする方法

実はechoするだけでtrimできてしまうという目から鱗。 $ S=" Hello World " $ echo $S Hello World sedやawkでやるより全然楽です。

ファイルからパターンにマッチした範囲の行を取得する

sedの場合はsed -n '/開始パターン/,/終了パターン/p' で、開始パターンにヒットした行から終了パターンの行の範囲を取得できる。 $ seq 10 | sed -n '/5/,/8/p' 5 6 7 8 awkは awk '/開始パターン/,/終了パターン/' で書けるのでこっちの方が簡単である。 $…

既に存在しないディレクトリでコマンドを実行したときのエラー

ターミナルで作業中に、カレントディレクトリが他プロセスにより削除された後でコマンドを打つとエラーになることがあります。 冷静にメッセージを見れば察しはつくのですが、余裕がない時に起きるとちょっとビックリする。 pwdコマンドは削除済みのフォルダ…

pg_dumpのZオプションで作ったファイルの解凍&リストアにいつも混乱する

pg_dumpコマンドに、 -Z 9 のようにZオプションを与えるとダンプファイルがgzipで圧縮できます。 $ pg_dump -f /mydb.sql -Z 9 mydb -F でフォーマットを指定しない場合、plain形式(要はSQLファイル)でダンプ&gzipで圧縮されるだけなんですが、なぜか私は…

bashのpipefailオプション

以前から set -e を使って、エラー時に実行を止めるシェルをよく書いてましたが、 パイプでコマンドを繋げた場合、最後のコマンドにしか効かないことを今更ながら知ったのでメモ。 例えば、以下のシェルはslなんてコマンドは存在しないので、そこでエラーに…

ヒアストリング<<<

<<<で標準入力に価を渡せる。 echo "hoge" | commandとcommand <<< "hoge" は等価 改行を入れることも可能 $ cat <<< 'アイウエオ カキクケコ'

ファイルを掴んでいるプロセスを調べる

lsof <ファイル名>でファイルを使用しているプロセルを特定できる。 $ sudo lsof /var/log/messages COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 1055 root 3w REG 253,0 7164 100839039 /var/log/messages 実行結果の4番目のフィールドが…

awkのNF変数

awkの組み込みのNF変数には現在行のフィールド数が入っています。 $ cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) $ awk '{print NF}' /etc/redhat-release 5 これを利用して、後方からフィールドを参照できます $ awk '{print $(NF),$(NF…

groupaddとuseraddのrオプションでシステムアカウントを作成する

groupaddとuseraddにrオプションを指定するとsystemアカウントになる -r, --system create a system account # groupadd -r r_group # groupadd -r r_group2 # grep r_group /etc/group r_group:x:998: r_group2:x:997: IDが振られる範囲は/etc/login.defsの…

途中まで打ったコマンドを保持しつつ別のコマンドを実行する方法

zsh

途中まで打ったけど、別のコマンドを打ちたくなった、でも打ちかけたのを消すのは惜しい。 そんな場合は Alt + q $ docker exec -it (あれ、コンテナIDなんだっけ?) Alt + qを押すと一旦プロンプトがクリアされる。 $ 別のコマンドを実行して、めでたくコ…

SQL中のVALUES

SELECT句が使える場所ならどこでもVALUESが使えるとのこと。 -- select 1,'one' union select 2,'two' union select 3,'three'と等価 postgres=# VALUES (1, 'one'), (2, 'two'), (3, 'three'); column1 | column2 ---------+--------- 1 | one 2 | two 3 | …

Re:dashのユーザ削除

GUIで操作できないので、コマンドから行う必要がある。 自分の場合はDockerでインストールしたので、下記コマンドを実行して削除。 画面で操作できるようにならないかな。 docker exec -it {コンテナID} ./manage.py users delete {メアド}

botからのアクセスを拒否する

拒否してるのにbeingbotがしつこくアクセスしてくるのでユーザエージェント指定で弾くApacheの設定を入れた。 httpd.confあたりに書いておく。 BrowserMatch "beingbot" bot <Directory /> order allow,deny allow from all deny from env=bot </Directory>

readlineが7にバージョンアップされてgradleとpsqlが動かなくなった

何もした覚えがないのだが、ある日急にgradleとpsqlが動かなくなった。 $ gradle tasks dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib Referenced from: /usr/local/bin/bash Reason: image not found [1] 52259 abort gradle…

RedmineでSVNの差分を見ようとすると「リポジトリに、エントリ/リビジョンが存在しません。」エラーになる

Passenger+ApacheでRedmineを運用しているが、SVNのコミットの差分を見ようとすると「リポジトリに、エントリ/リビジョンが存在しません。」とエラーが表示されるようになった。 コミットメッセージなどは取得出来ているので、リビジョンが存在しないと言わ…

nkfコマンドでファイルの文字コードと改行コードを調べる

nkf –guess filename.txt 改行コードが混在してたらどうなるんだろう。後で調べよう。

xargsコマンドで変数を使う

-i変数名 でパイプで渡された値を変数に格納して処理できる。 gitのタグ一覧を取得してまとめて処理する実行例はこんな感じ。 git branch -r | egrep --text "tags/" | cut -d / -f3|xargs -iVAR git tag svn/VAR svn/tags/VAR

grepでマッチした箇所をハイライトする

grep --color=auto yamada /etc/passwd grepの--colorオプションを付けるとヒットした文字がハイライトされる。 どこがヒットしたか目で追うのはしんどいので大変便利です。 リダイレクトやパイプ使用時にはハイライトしないようにしてくれるので、基本 auto…

シェルの$括弧

$(コマンド) バッククォートで括ったのと同様にコマンドを実行できる。 ネストできたり開始終了が分かりやすいので、こっちを使ったほうが良い $((演算)) exprでやったような演算ができる。$(expr 1 + 1) とやるよりスマート

bashによく設定するsetオプション

set -u 未定義の変数を参照するとエラー・メッセージを表示する set -e コマンドが0以外のステータスで終了した場合,一部の場合を除いて即座に終了する set -C 存在するファイルに対して、>でリダイレクトしたらエラーにする

viでコマンドの実行結果を挿入する

vim

:r!コマンド と入力する。 :r!date :r!ls

jconsoleでリモートのTomcatを監視する

毎度忘れるのでメモしておく。 事前準備としてTomcat起動のjavaオプションに以下を追加しておく。 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7900 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.aut…

portの使用状況を確認する

すぐ忘れるのでメモ。以下のコマンドで一覧を表示できる。 lsof -i ポートを指定して調べることもできる。 lsof -i:<port_not></port_not>

コンフリクト時に共通の祖先の情報を書き出す

git

あらかじめgit configしておく。 git config --global merge.conflictstyle diff3 そうすると、コンフリクト時に 共通の祖先の内容も書き出される。 func main() { <<<<<<< HEAD fmt.Println("h2") ||||||| merged common ancestors fmt.Println("Hello") ==…