Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

UNIX(Linux)
入門編

  1. UNIX(Linux)とは
  2. ディストリビューションとは
  3. CentOSとMacOSとCUIについて
  4. 仮想化ソフトウェアを使ったCentOSのインストールとMacOSのCUI環境について
  5. ログインとrootユーザーとシャットダウン等について
  6. コマンドの構造と注意点について
  7. ファイルシステムとカレントディレクトリの移動と表示(cdとpwd)について
  8. 各主要ディレクトリの解説とディレクトリ等の内容表示(ls)について
  9. ちょっと高度なディレクトリの移動(cd)とパスについて
  10. 『ls』コマンドの応用(1)とドットファイルについて
  11. 『ls』コマンドの応用(2)
  12. タブキーを使った入力補完について
  13. ディレクトリの作成方法(mkdir)について
  14. ファイルの簡易作成(touch)とファイルについて
  15. 標準入出力とリダイレクション(>と>>)を使ったファイル生成とechoとcatについて
  1. ファイルとディレクトリの削除(rm)について
  2. ファイルとディレクトリのコピー(cp)について
  3. ファイルとディレクトリの移動と名前変更(mv)について
  4. viエディタとは
  5. viの基本的な使い方(1)
  6. viの基本的な使い方(2)
  7. ターミナル(sshとTera Term)を使ったリモート操作について
  8. ソフトウェアのインストール方法(yumとパッケージ管理ツール)について
  9. ユーザーの概要と確認と追加と切り替え(adduserとsu)について
  10. ユーザーのパスワードと削除と更新と管理者権限での実行(passwdとuserdelとusermodとsudo)について
  11. グループの概要と確認方法(groups)について
  12. グループの追加と削除と設定変更(groupaddとgroupdelとgroupmod)とユーザー追加方法について
  13. パーミッション(権限)について
  14. パーミッションの設定方法(chmodとchown)について
  1. トップページ
  2. UNIX(Linux)入門編 - 『ls』コマンドの応用(1)とドットファイルについて

『ls』コマンドの応用(1)とドットファイルについて

みなさまいかがおすごしでしょうか。

続きまして『ls』コマンドの応用とか『ドットファイル』とかについてやっていきます。

最初に『ls』コマンドのおさらいですが、『ls』コマンドは「現在のディレクトリ(カレントディレクトリ)の中身を出力してくれるコマンド」になり、更にこの『ls』コマンドにはいくつかオプションが用意されているのでそれをバシッと確認していきましょう。

まず以下は『/』に居る状態なわけなんですが普通に『ls』だけを打つとこんな感じになりますよね。

[root@localhost /]# ls
bin   dev  home  lib64       media  opt   root  selinux  sys  usr
boot  etc  lib   lost+found  mnt    proc  sbin  srv      tmp  var

ざざざっとディレクトリとかファイルとかが出力されている感じです。

この際に『-1』をくっつけると1行ごとに改行して出力してくれます。『-2』とかもイケそうですが『1』以外はダメですのでご注意ですね。

[root@localhost /]# ls -1
bin
boot
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
var

そして『-R』を付けると中に居るディレクトリの中も更にその中に居るディレクトリの中とかも全て表示してくれます。少し難しい言葉を使うと「再帰的に表示される」なんて言い方をするのですがこいつをちょいと試してみましょう。

現在『/root』に居て、その中に『test』ディレクトリを作って更にその中に『test』ディレクトリを作って更にその中に『test』ディレクトリを作ってみました。この状態で『ls』だけ叩くととこうなりますが

[root@localhost ~]# ls
test

『ls -R』を叩くとこうなります。

[root@localhost ~]# ls -R
.:
test

./test:
test

./test/test:
test

./test/test/test:

中に居るディレクトリを全て出力してくれてますね。カレントディレクトリの構成を知りたいなんて時はとっても便利なのでぜひ覚えておいてください。

前の記事でもちょろっと紹介しましたが『ls -R』コマンドのように現在のディレクトリ状況を知りたい場合は『tree』コマンドを使うと便利です。『tree』コマンドを叩くと以下のような出力がされます。

[root@localhost var/www]# tree
.
├── index.html
├── test
    └── index.html

その名の通りツリー構造で出力してくれていますね。著者も『ls -R』コマンドよりも便利だなーって感じておるので「ディレクトリの構造が知りたいぜー」って時は『tree』コマンドを使う事が多いです。

ただ『tree』コマンドはデフォルトの状態ではインストールされてない場合が多く、もし「権限の関係で『tree』コマンドがインストールできないぜー」なんて場合は必須コマンドかつ最初から必ず用意されているコマンドである『ls』コマンドの『-R』オプションの方を使っちゃってください。

続いて紹介したいのが『-F』になります。『-F』を付けると『タイプ識別子』っていうのがファイル名またはディレクトリ名の後にくっついた状態で出力してくれます。

『タイプ識別子』っていうのは「そのデータが一体どういうデータなのかー」ということを教えてくれる記号になります。んでどういう風に教えてくれるのかというと以下のような感じです。

何も表示なし通常ファイル
*実行可能ファイル
@シンボリックリンク
/ディレクトリ

って感じですね。

上記の『シンボリックリンク』っていうのはWindowOSで言うところのショートカット的なやつになります。

ではこの『ls -F』をちょいと使ってみましょう。

んで『ls -F』はコマンド用とかの実行ファイルが置いてあるディレクトリで叩かないとなーーんも面白くないわけでございますのでここは超基本コマンドが詰まってる『/bin』の中身をバシッと出力してみましょう。

ここでちょいとテクニックを紹介したいと思います。これまでは『cd』コマンドを使ってディレクトリを移動した状態で『ls』コマンドを叩いてましたよね。実はまだ紹介していなかった記法なのですが『ls』コマンドくんの第1引数には『パス』を渡すことができ、そうするとその『パス』で指定されたディレクトリの中身を教えてくれる感じになります。

というわけでこちらも合わせてちょいと使ってみましょう。無駄にホームディレクトリである『/root』に移動してみます。

[root@localhost bin]# cd
[root@localhost ~]# pwd
/root

今現在居るホームディレクトリの中から『-F』オプションを付けた『ls』コマンドを使って『/bin』の中身を出力するとなると『ls -F /bin』と叩けばOKですので早速叩いてみましょう。するとこんな結果になります。

[root@localhost bin]# cd
[root@localhost ~]# pwd
/root
[root@localhost ~]# ls -F /bin
arch*           fgrep@               mktemp*         sort*
awk@            find*                more*           stty*
basename*       findmnt*             mount*          su*
bash*           fusermount*          mountpoint*     sync*
cat*            gawk*                mv*             tar*
chgrp*          grep*                netstat*        taskset*
chmod*          gtar@                nice*           touch*
chown*          gunzip*              nisdomainname@  tracepath*
cp*             gzip*                ping*           tracepath6*
cpio*           hostname*            ping6*          true*
cut*            ipcalc*              plymouth*       ulockmgr_server*
dash*           iptables-xml@        ps*             umount*
date*           iptables-xml-1.4.7@  pwd*            uname*
dd*             kbd_mode*            raw*            unicode_start*
df*             kill*                readlink*       unicode_stop*
dmesg*          link*                rm*             unlink*
dnsdomainname@  ln*                  rmdir*          usleep*
domainname@     loadkeys*            rpm*            vi*
dumpkeys*       logger*              rvi@            view@
echo*           login*               rview@          ypdomainname@
egrep@          ls*                  sed*            zcat*
env*            lsblk*               setfont*
ex@             mkdir*               sh@
false*          mknod*               sleep*

いかがでしょうか。ホームディレクトリに居るにもかかわらず『/bin』の中身が出力できており、更に各ディレクトリや各フォルダの末尾に『タイプ識別子』がくっついているのが確認できたと思います。とっても良い感じでございますね。

ただ、最近のUNIX系OSの『ls』コマンドは最初から色別に出力してくれたりするので正直この『タイプ識別子』ってあんま使わなくなってるんですよね。なので長々と紹介しておいてこんな事を言うのも大変恐縮なのですが『-F』はシカトでいいかもです。『ls』コマンドの第1引数だけは覚えておきましょう、はい。

『ls』コマンドは複数の引数を取ることもできます。そしたらどうなるのかというとこうなります。以下は『/bin』、『/etc』、『/var』を出力した感じですね。

[root@localhost ~]# ls /bin /etc /var
/bin:
arch           echo                kill           ping6     tar
awk            egrep               link           plymouth  taskset
basename       env                 ln             ps        touch
bash           ex                  loadkeys       pwd       tracepath
cat            false               logger         raw       tracepath6
chgrp          fgrep               login          readlink  true
chmod          find                ls             rm        ulockmgr_server
chown          findmnt             lsblk          rmdir     umount
cp             fusermount          mkdir          rpm       uname
cpio           gawk                mknod          rvi       unicode_start
cut            grep                mktemp         rview     unicode_stop
dash           gtar                more           sed       unlink
date           gunzip              mount          setfont   usleep
dd             gzip                mountpoint     sh        vi
df             hostname            mv             sleep     view
dmesg          ipcalc              netstat        sort      ypdomainname
dnsdomainname  iptables-xml        nice           stty      zcat
domainname     iptables-xml-1.4.7  nisdomainname  su
dumpkeys       kbd_mode            ping           sync

/etc:
DIR_COLORS               filesystems     modprobe.d      rpc
DIR_COLORS.256color      fstab           motd            rpm
DIR_COLORS.lightbgcolor  gai.conf        mtab            rsyslog.conf
NetworkManager           gcrypt          multipath       rsyslog.d
X11                      gnupg           my.cnf          rwtab
adjtime                  group           networks        rwtab.d
aliases                  group-          nsswitch.conf   sasl2
aliases.db               grub.conf       openldap        securetty
alternatives             gshadow         opt             security
anacrontab               gshadow-        pam.d           selinux
audisp                   host.conf       passwd          services
audit                    hosts           passwd-         sestatus.conf
bash_completion.d        hosts.allow     pkcs11          shadow
bashrc                   hosts.deny      pki             shadow-
blkid                    init            plymouth        shells
centos-release           init.conf       pm              skel
chkconfig.d              init.d          popt.d          ssh
cron.d                   inittab         postfix         ssl
cron.daily               inputrc         ppp             statetab
cron.deny                iproute2        prelink.conf.d  statetab.d
cron.hourly              iscsi           printcap        sudo-ldap.conf
cron.monthly             issue           profile         sudo.conf
cron.weekly              issue.net       profile.d       sudoers
crontab                  krb5.conf       protocols       sudoers.d
crypttab                 ld.so.cache     rc              sysconfig
csh.cshrc                ld.so.conf      rc.d            sysctl.conf
csh.login                ld.so.conf.d    rc.local        sysctl.d
dbus-1                   libaudit.conf   rc.sysinit      system-release
default                  libuser.conf    rc0.d           system-release-cpe
depmod.d                 localtime       rc1.d           terminfo
dhcp                     login.defs      rc2.d           udev
dracut.conf              logrotate.conf  rc3.d           virc
dracut.conf.d            logrotate.d     rc4.d           xdg
environment              lvm             rc5.d           xinetd.d
ethers                   magic           rc6.d           yum
exports                  makedev.d       redhat-release  yum.conf
favicon.png              mke2fs.conf     resolv.conf     yum.repos.d

/var:
cache  empty  lib    lock  mail  opt       run    tmp
db     games  local  log   nis   preserve  spool  yp

これ中々便利なのでぜひ使ってみてください。

続いて紹介したいのは『-a』になります。この『-a』はかなり使用頻度が高いオプションになりましてどういう効果があるのかというと『ドットファイル』も表示してくれるようになります。

んで「『ドットファイル』ってなんじゃ?」ってお話なんですが『ドットファイル』はその名の通り「『.』(ドット)から始まるファイル名を持ったファイル」の事で、「つまりは何者じゃ?」と言われるとWindowsOSで言うところの隠しファイルってやーつでございましてUNIX系OSでは隠しファイル(設定用ファイルとかであんまり触ってほしくないファイル)はファイル名の頭に『.』を付けるような風習があったりするので「ドットファイル → 隠しファイル」みたいな感じになったわけですね。

というわけでちょいと試してみましょう。以下はルートディレクトリで『ls -a』を叩いた結果になります。

[root@localhost /]# ls -a
.          bin   etc   lib64       mnt   root     srv  usr
..         boot  home  lost+found  opt   sbin     sys  var
.autofsck  dev   lib   media       proc  selinux  tmp

『-a』オプションを付けないとこうなります。

[root@localhost /]# ls
bin   dev  home  lib64       media  opt   root  selinux  sys  usr
boot  etc  lib   lost+found  mnt    proc  sbin  srv      tmp  var

見比べてみると『.』と『..』と『.autofsck』が居たり居なかったりしてますね。

この中だと『.autofsck』が『ドットファイル』と呼ばれるものになります。

この『.』と『..』についてなんですが『cd』コマンドのときと同じく『.』が現在のディレクトリ、『..』が親ディレクトリになります。

ここで「ルートディレクトリは一番上の階層になるはずなのにルートディレクトリで『ls -a』で『..』が出力されるのはおかしくね?」と思った方、著者もそのとおりだと思います。これについては昔からずっとそんな感じなっており著者も昔調べたことあるのですが未だに良い答えが見つからずでちょっと理由はなぞですね。まあ「ルートディレクトリでの『ls -a』の『..』は『.』と同じくルートディレクトリを指す」って事をちょいと頭の隅に置いておけば問題ないので気にしなくてOKかなって思います。

ちなみに『.autofsck』っていうのはUNIX系OSでOSが起動した時に生成され、そして正常終了した場合に削除されるっていうちょっと不思議なファイルになります。OS起動時に『.autofsck』が存在するかどうかで「正常終了したかどうか」を判定している感じになりますね。まあこれは余談ですので覚えなくてOKです。

あと『-a』と同じようなオプションで『-A』というのが用意されています。これは基本的に『-a』と同じ効果を持つのですが『.』と『..』以外の情報が出力されるようになるのでもし「『.』と『..』が邪魔だなー」って気分になったら使ってみると良いかもしれません。

(´-`).。oO(まあ『.』と『..』が邪魔になるってことは滅多に無いと思うので『-a』だけ覚えておけばOKかなと思います...)

というわけでちょいと長くなってしまったのでここで一旦切りますね。続いての記事でも『ls』コマンドについてやっていきます。ではまたお会いしましょう。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。