[Linux] ファイル一覧表示の順番が順不同(lsコマンド)

スポンサーリンク

さて、今日もワンコインVPNのServersMan@VPSでお遊び。

ls コマンド結果のファイル一覧が順番に並ばない

のでちょっと調べてみた。

「ファイルが順番に並ばない」ってのは、lsコマンドの結果で「.」から始まるファイルとそれ以外のファイルが順番ばらばらで混ざって表示されている状態。いままで慣れていたのは、小文字大文字を見分けて、名前順(アルファベット順)に並ぶもの。「.」から始まる隠しファイルは一番最初に表示されていた。

ちなみに現状はこんな感じ。

[root@trippyboy ~]# touch apple ←ファイル「apple」を作成
[root@trippyboy ~]# touch nipple ←ファイル「nipple」を作成
[root@trippyboy ~]# touch shippo ←ファイル「shippo」を作成
[root@trippyboy ~]# ls -la ←隠しファイルを含めて一覧表示
total 60
drwx------ 4 trippyboy trippyboy  4096 Jul  1 15:40 .
drwxr-xr-x 5 root      root       4096 Jun 30 14:12 ..
-rw-r--r-- 1 root      root          0 Jul  1 15:40 apple
-rw------- 1 trippyboy trippyboy 10689 Jul  1 15:38 .bash_history
-rw-r--r-- 1 trippyboy trippyboy    33 Jun 25 23:45 .bash_logout
-rw-r--r-- 1 trippyboy trippyboy   176 Jun 25 23:45 .bash_profile
-rw-r--r-- 1 trippyboy trippyboy   240 Jun 26 19:32 .bashrc
-rw------- 1 trippyboy trippyboy   274 Jul  1 09:41 .lesshst
drwx------ 8 trippyboy trippyboy  4096 Jul  1 10:23 Maildir
-rw------- 1 root      root       1208 Jun 29 12:35 .mysql_history
-rw-r--r-- 1 root      root          0 Jul  1 15:40 nipple
-rw------- 1 trippyboy trippyboy  1024 Jun 26 23:08 .rnd
-rw-r--r-- 1 root      root          0 Jul  1 15:40 shippo
drwx------ 2 trippyboy trippyboy  4096 Jun 28 21:57 .ssh
-rw------- 1 trippyboy trippyboy  8149 Jul  1 10:55 .viminfo
[root@trippyboy ~]#

「.」から始まるファイルも混ざって一覧表示されている・・・ なぜだ!!!

ちなみに大文字小文字も検証してみた

[root@trippyboy ~]# touch Aa
[root@trippyboy ~]# touch Apple
[root@trippyboy ~]# touch aa
[root@trippyboy ~]# ls -al
total 60
drwx------ 4 trippyboy trippyboy  4096 Jul  1 15:41 .
drwxr-xr-x 5 root      root       4096 Jun 30 14:12 ..
-rw-r--r-- 1 root      root          0 Jul  1 15:41 aa
-rw-r--r-- 1 root      root          0 Jul  1 15:41 Aa
-rw-r--r-- 1 root      root          0 Jul  1 15:40 apple
-rw-r--r-- 1 root      root          0 Jul  1 15:41 Apple
-rw------- 1 trippyboy trippyboy 10689 Jul  1 15:38 .bash_history
-rw-r--r-- 1 trippyboy trippyboy    33 Jun 25 23:45 .bash_logout
-rw-r--r-- 1 trippyboy trippyboy   176 Jun 25 23:45 .bash_profile
-rw-r--r-- 1 trippyboy trippyboy   240 Jun 26 19:32 .bashrc
-rw------- 1 trippyboy trippyboy   274 Jul  1 09:41 .lesshst
drwx------ 8 trippyboy trippyboy  4096 Jul  1 10:23 Maildir
-rw------- 1 root      root       1208 Jun 29 12:35 .mysql_history
-rw-r--r-- 1 root      root          0 Jul  1 15:40 nipple
-rw------- 1 trippyboy trippyboy  1024 Jun 26 23:08 .rnd
-rw-r--r-- 1 root      root          0 Jul  1 15:40 shippo
drwx------ 2 trippyboy trippyboy  4096 Jun 28 21:57 .ssh
-rw------- 1 trippyboy trippyboy  8149 Jul  1 10:55 .viminfo

うん。とても気持ちが悪いですね・・・・

そこで、 「strace」コマンドを使ってlsコマンドの動作をトレースしてみました!!

# strace -o ./strace-ls -f /bin/ls ←straceコマンドで/bin/lsをトレースし、その結果を strace-ls に吐き出す。
# grep open strace-ls ←トレースの結果から「open」を含む行を表示

上記の結果がこちら↓

[root@trippyboy ~]# grep open strace-ls
50311 open(“/etc/ld.so.cache”, O_RDONLY) = 3
50311 open(“/lib/librt.so.1″, O_RDONLY) = 3
50311 open(“/lib/libacl.so.1″, O_RDONLY) = 3
50311 open(“/lib/libselinux.so.1″, O_RDONLY) = 3
50311 open(“/lib/libc.so.6″, O_RDONLY)  = 3
50311 open(“/lib/libpthread.so.0″, O_RDONLY) = 3
50311 open(“/lib/libattr.so.1″, O_RDONLY) = 3
50311 open(“/lib/libdl.so.2″, O_RDONLY) = 3
50311 open(“/lib/libsepol.so.1″, O_RDONLY) = 3
50311 open(“/etc/selinux/config”, O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
50311 open(“/proc/mounts”, O_RDONLY|O_LARGEFILE) = 3
50311 open(“/usr/lib/locale/locale-archive”, O_RDONLY|O_LARGEFILE) = 3
50311 open(“/usr/share/locale/locale.alias”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_IDENTIFICATION”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_IDENTIFICATION”, O_RDONLY) = 3
50311 open(“/usr/lib/gconv/gconv-modules.cache”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_MEASUREMENT”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_MEASUREMENT”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_TELEPHONE”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_TELEPHONE”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_ADDRESS”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_ADDRESS”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_NAME”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_NAME”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_PAPER”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_PAPER”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_MESSAGES”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_MESSAGES”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_MONETARY”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_MONETARY”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_COLLATE”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_COLLATE”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_TIME”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_TIME”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_NUMERIC”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_NUMERIC”, O_RDONLY) = 3
50311 open(“/usr/lib/locale/en_US.UTF-8/LC_CTYPE”, O_RDONLY) = -1 ENOENT (No such file or directory)
50311 open(“/usr/lib/locale/en_US.utf8/LC_CTYPE”, O_RDONLY) = 3
50311 open(“.”, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
[root@trippyboy ~]#

どうやらlocaleを読んでいるらしい。 ふむふむ。

現状のlocaleはこ ちら↓

[root@trippyboy ~]# locale
LANG=en_US.UTF-8
LC_CTYPE=”en_US.UTF-8″
LC_NUMERIC=”en_US.UTF-8″
LC_TIME=”en_US.UTF-8″
LC_COLLATE=”en_US.UTF-8″
LC_MONETARY=”en_US.UTF-8″
LC_MESSAGES=”en_US.UTF-8″
LC_PAPER=”en_US.UTF-8″
LC_NAME=”en_US.UTF-8″
LC_ADDRESS=”en_US.UTF-8″
LC_TELEPHONE=”en_US.UTF-8″
LC_MEASUREMENT=”en_US.UTF-8″
LC_IDENTIFICATION=”en_US.UTF-8″
LC_ALL=
[root@trippyboy ~]#

ためしにlocaleをCにしてみる。

[root@trippyboy ~]# LANG=C
[root@trippyboy ~]#
[root@trippyboy ~]# locale
LANG=C
LC_CTYPE=”C”
LC_NUMERIC=”C”
LC_TIME=”C”
LC_COLLATE=”C”
LC_MONETARY=”C”
LC_MESSAGES=”C”
LC_PAPER=”C”
LC_NAME=”C”
LC_ADDRESS=”C”
LC_TELEPHONE=”C”
LC_MEASUREMENT=”C”
LC_IDENTIFICATION=”C”
LC_ALL=
[root@trippyboy ~]#

で、ls -la実行!

drwx------ 4 trippyboy trippyboy  4096 Jul  1 15:44 .
drwxr-xr-x 5 root      root       4096 Jun 30 14:12 ..
-rw------- 1 trippyboy trippyboy 10689 Jul  1 15:38 .bash_history
-rw-r--r-- 1 trippyboy trippyboy    33 Jun 25 23:45 .bash_logout
-rw-r--r-- 1 trippyboy trippyboy   176 Jun 25 23:45 .bash_profile
-rw-r--r-- 1 trippyboy trippyboy   240 Jun 26 19:32 .bashrc
-rw------- 1 trippyboy trippyboy   274 Jul  1 09:41 .lesshst
-rw------- 1 root      root       1208 Jun 29 12:35 .mysql_history
-rw------- 1 trippyboy trippyboy  1024 Jun 26 23:08 .rnd
drwx------ 2 trippyboy trippyboy  4096 Jun 28 21:57 .ssh
-rw------- 1 trippyboy trippyboy  8149 Jul  1 10:55 .viminfo
-rw-r--r-- 1 root      root          0 Jul  1 15:41 Aa
-rw-r--r-- 1 root      root          0 Jul  1 15:41 Apple
drwx------ 8 trippyboy trippyboy  4096 Jul  1 10:23 Maildir
-rw-r--r-- 1 root      root          0 Jul  1 15:41 aa
-rw-r--r-- 1 root      root          0 Jul  1 15:40 apple
-rw-r--r-- 1 root      root          0 Jul  1 15:40 nipple
-rw-r--r-- 1 root      root          0 Jul  1 15:40 shippo
-rw-r--r-- 1 root      root      12446 Jul  1 15:44 strace-ls
[root@trippyboy ~]#

これでとても気持ちが良いw

ちなみに/etc/sysconfig/i18n を変更しておくと起動時に読み取ってくれるよ

でも、この設定嫌いじゃないから自分は原因が分れば、それでいいっかな~

 

ファイルが順番に並ばない理由はlocaleにあったのでした。

めでたしめでたし

 

コメント

タイトルとURLをコピーしました