ログインシェルが/sbin/nologinのユーザでコマンドを実行したい
通常ログインする必要がないユーザは、セキュリティのためログインシェルに/sbin/nologinが指定されている。
# grep apache /etc/passwd apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
su しようとするとエラーになってしまいます。
# su - apache Last login: Sat Dec 15 12:58:36 UTC 2018 on pts/0 This account is currently not available.
そんな場合は オプションに --shell=シェルへのパス
を指定することで su できる。意外と知らなかった。
su apache --shell=/bin/sh -c bundle install
vimのコマンドが出力するメッセージを確認する
コマンドモードで入力したコマンドがエラーになった場合、エラーメッセージが出力されるが、最後の 1行しか表示されない。
下記の画像では、call dein#update()
がエラーになっているのだが最後の行しか表示されてないので一見すると正常終了しているように見えてしまう。
遡ってメッセージを確認する方法が分からなくて、調べたらコマンドに:message
と入力すれば良いことが分かった。
実行すると、ある一定の行数が履歴として残っているので参照することができる。これでエラーの原因などが確認できる。
実は、最後から 2行目にmessageコマンドで参照してねという情報が出力されていたのだが、messageコマンドを実行しないと見れないという、、、
PostgreSQLの識別子63バイト制限は別名にも適用される
試した環境: PostgreSQL 11
PostgreSQLのテーブル名や列名など識別子には最大63バイトの制限があり、それ以上の長さは切り捨てられる。
例えば、123456789A123456789B123456789C123456789D123456789E123456789F123456789G
と70バイトの名前をつけようとすると、勝手に63バイトで切り捨てられて123456789A123456789B123456789C123456789D123456789E123456789F123
という名前になる。
postgres=# create table postgres=# "123456789A123456789B123456789C123456789D123456789E123456789F123456789G" postgres=# (col1 text); NOTICE: identifier "123456789A123456789B123456789C123456789D123456789E123456789F123456789G" will be truncated to "123456789A123456789B123456789C123456789D123456789E123456789F123" CREATE TABLE
エラーではなく切り捨てられるのは意外だったが、列名やテーブル名にAS
でつけた別名にも同じ制限が掛かるのはもっと意外だった。
postgres=# select 1 as "123456789A123456789B123456789C123456789D123456789E123456789F123456789G"; NOTICE: identifier "123456789A123456789B123456789C123456789D123456789E123456789F123456789G" will be truncated to "123456789A123456789B123456789C123456789D123456789E123456789F123" 123456789A123456789B123456789C123456789D123456789E123456789F123 ----------------------------------------------------------------- 1 (1 row)
ただし、同じSQL内で別名を参照している場合、切り捨てたとNOTICEは出ているものの、長い名前の参照が問題なく行えます。
postgres=# select * from ( postgres=# select 1 as "123456789A123456789B123456789C123456789D123456789E123456789F123456789G") as a postgres=# where "123456789A123456789B123456789C123456789D123456789E123456789F123456789G" = 1; NOTICE: identifier "123456789A123456789B123456789C123456789D123456789E123456789F123456789G" will be truncated to "123456789A123456789B123456789C123456789D123456789E123456789F123" NOTICE: identifier "123456789A123456789B123456789C123456789D123456789E123456789F123456789G" will be truncated to "123456789A123456789B123456789C123456789D123456789E123456789F123" 123456789A123456789B123456789C123456789D123456789E123456789F123 ----------------------------------------------------------------- 1 (1 row)
SELECTした結果、別名をMAPのキーにして返すような実装をしていると見事にハマるので注意が必要。
そんな長い名前の別名をつけることないですが。
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 * extras: ftp-srv2.kddilabs.jp * updates: ftp-srv2.kddilabs.jp ========================================================= Matched: yumdownloader ========================================================= yum-utils.noarch : Utilities based around the yum package manager
yum provides
でファイルがどのパッケージに含まれるか調べることができる。
どうやってインストールしたか分からなくなったコマンド調べる時に便利。
# yum provides "*/yumdownloader" Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp-srv2.kddilabs.jp * epel: mirror.vinahost.vn * extras: ftp-srv2.kddilabs.jp * updates: ftp-srv2.kddilabs.jp yum-utils-1.1.30-41.el6.noarch : Utilities based around the yum package manager Repo : base Matched from: Filename : /usr/bin/yumdownloader yum-utils-1.1.30-42.el6_10.noarch : Utilities based around the yum package manager Repo : updates Matched from: Filename : /usr/bin/yumdownloader yum-utils-1.1.30-42.el6_10.noarch : Utilities based around the yum package manager Repo : installed Matched from: Filename : /usr/bin/yumdownloader
ファイルの指定は */yumdownloader
か*bin/yumdownloader
の形式にしないとダメみたい。
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--1.2.sql /usr/pgsql-9.6/share/extension/pg_bigm.control
インストールした後は rpm -qs
で調べる。
$ rpm -qs pg_bigm 通常 /usr/pgsql-9.4/lib/pg_bigm.so 通常 /usr/pgsql-9.4/share/extension/pg_bigm--1.0--1.1.sql 通常 /usr/pgsql-9.4/share/extension/pg_bigm--1.1--1.2.sql 通常 /usr/pgsql-9.4/share/extension/pg_bigm--1.2.sql 通常 /usr/pgsql-9.4/share/extension/pg_bigm.control
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: (not installed) Build Host: localhost Group : Applications/Databases Source RPM: pg_bigm-1.2.20161011-1.pg96.el6.src.rpm Size : 89410 License: The PostgreSQL License Signature : (none) URL : http://pgbigm.sourceforge.jp/index.html Summary : 2-gram full text search for PostgreSQL Description : The pg_bigm module provides full text search capability in PostgreSQL. This module allows a user to create 2-gram (bigram) index for faster full text search. Note that this package is available for only PostgreSQL 9.6.