Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

特定のディレクトリだけパーミッションを確認したい

TSの型迷宮に迷い込んだエンジニアのid:dorapon2000です。

ディレクトリのパーミッションを調べるとき、皆さんどうしていますか。例えば/etcのパーミッションを確認したいとき、以前の僕はこうです。

ls -l /
total 104
drwxr-xr-x   2 root root  4096  628 18:34 bin
drwxr-xr-x   3 root root  4096  628 18:35 boot
drwxr-xr-x  15 root root  3640 1116 10:02 dev
drwxr-xr-x 128 root root 12288 112 10:55 etc
drwxr-xr-x   4 root root  4096  46  2021 home
drwxr-xr-x  22 root root  4096  615  2020 lib
drwxr-xr-x   2 root root  4096  628 18:33 lib64
drwx------   2 root root 16384  47  2020 lost+found
drwxr-xr-x   2 root root  4096  47  2020 media
drwxr-xr-x   2 root root  4096  47  2020 mnt
drwxr-xr-x   4 root root  4096  61 16:33 opt
dr-xr-xr-x 173 root root     0 1116 10:02 proc
drwx------   9 root root  4096 106 19:26 root
drwxr-xr-x  30 root root  1120 1116 10:03 run
drwxr-xr-x   2 root root 12288  628 18:34 sbin
drwxr-xr-x   6 root root  4096  39  2021 snap
drwxr-xr-x   2 root root  4096  47  2020 srv
dr-xr-xr-x  13 root root     0 1116 10:24 sys
drwxrwxrwt  10 root root 12288 1116 10:25 tmp
drwxr-xr-x  11 root root  4096  61 16:33 usr
drwxr-xr-x  14 root root  4096  311  2021 var

うっ、数が多くてため息が出てしまいます...

-dオプションを使うと次のようになります。

ls -ld /etc
drwxr-xr-x 128 root root 12288 112 10:55 /etc

もっと早く知りたかった...

DBIのcanは、関数が生えているかでなく、実装されているかどうかを判定する

 次のコードの通り、DBIx::Sunnyを利用した際、$dbh->select_oneを呼び出せるにも関わらず、$dbh->can('select_one')falseとなります。

 canの挙動が、デフォルトと異なり、一見すると困惑します。

use Test2::V0;
use DBIx::Sunny;
use Types::Standard qw(HasMethods);

my $dsn = "dbi:SQLite:dbname=test.db";
my $dbh = DBIx::Sunny->connect($dsn, 'root', '');

ok !$dbh->can('select_one'), '不思議な挙動';
ok $dbh->select_one('SELECT 1');

ok $dbh->UNIVERSAL::can('select_one');

done_testing;

 これは、DBIがcanを上書きし、Driverで実装されているか、あるいはDBIでデフォルトで提供されているメソッドかどうか判定するためです。デフォルトの挙動で動かしたいのであれば、UNIVERSAL::canで確かめられます。

metacpan.org