技術メモのかけら

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

ログインシェルが/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()がエラーになっているのだが最後の行しか表示されてないので一見すると正常終了しているように見えてしまう。 f:id:eichisanden:20181123151316p:plain

遡ってメッセージを確認する方法が分からなくて、調べたらコマンドに:messageと入力すれば良いことが分かった。 f:id:eichisanden:20181123152051p:plain

実行すると、ある一定の行数が履歴として残っているので参照することができる。これでエラーの原因などが確認できる。 f:id:eichisanden:20181123152238p:plain

実は、最後から 2行目にmessageコマンドで参照してねという情報が出力されていたのだが、messageコマンドを実行しないと見れないという、、、

Macのバージョンを確認するコマンド

今まで->このMacについてで調べてましたが、sw_versというコマンドがあるようです。
Mac/iOS以外の環境では文字化けしていると思いますが、Appleのりんごのアイコンです)
割と長くMacを使っているけど知らなかった。

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14
BuildVersion:   18A391v

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 searchrpm名などキーワードから該当するパッケージを探すことができる。

# 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.