はじめに
普段使っているlsコマンドはどのように動いているのか疑問に思い、記事にしました。C言語の勉強に役立つと思うのでぜひtryしてみてください。
tarコマンドで展開
まずは下記のサイトからtarballを入手
https://directory.fsf.org/wiki/Coreutils
ダウンロードが完了したら適当なディレクトリに移動
hibi221b@hibi221b:~$ pwd
/home/hibi221b
hibi221b@hibi221b:~$ mkdir command
hibi221b@hibi221b:~$ cd command/
hibi221b@hibi221b:~/command$ mv ~/coreutils-8.29.tar.xz .
hibi221b@hibi221b:~/command$ ls
coreutils-8.29.tar.xz
hibi221b@hibi221b:~/command$
次にtarコマンドで展開します tar Jxvf coreutils-8.29.tar.xz
hibi221b@hibi221b:~/command$ tar Jxvf coreutils-8.29.tar.xz
coreutils-8.29/
coreutils-8.29/.version
...
...
...
hibi221b@hibi221b:~/command$ ls
coreutils-8.29 coreutils-8.29.tar.xz
hibi221b@hibi221b:~/command$ cd coreutils-8.29/
hibi221b@hibi221b:~/command/coreutils-8.29$ pwd
/home/hibi221b/command/coreutils-8.29
hibi221b@hibi221b:~/command/coreutils-8.29$
展開後、coreutils-8.29ディレクトリに移動します。
コンパイル&インストール
コンパイルする前にMakefileを生成するconfigureコマンドを行います
これからの手順:
1.====>./configure
2.====>make
3.====>su
4.====>make install
hibi221b@hibi221b:~/command/coreutils-8.29$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...
...
...
config.status: executing depfiles commands
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
make
コマンドでコンパイルします
hibi221b@hibi221b:~/command/coreutils-8.29$ make
GEN lib/alloca.h
GEN lib/arpa/inet.h
...
...
...
make[3]: Leaving directory '/home/hibi221b/command/coreutils-8.29/gnulib-tests'
make[2]: Leaving directory '/home/hibi221b/command/coreutils-8.29/gnulib-tests'
make[1]: Leaving directory '/home/hibi221b/command/coreutils-8.29'
hibi221b@hibi221b:~/command/coreutils-8.29$
インストールするための権限を取得するために
make install
はrootユーザで行う必要があります。
(./configure --prefix=$HOME/適当なディレクトリ
を指定すれば一般ユーザでroot権限がなくてもインストールできるみたい)
hibi221b@hibi221b:~/command/coreutils-8.29$ su
パスワード:
root@hibi221b:/home/hibi221b/command/coreutils-8.29# make install
make install-recursive
make[1]: Entering directory '/home/hibi221b/command/coreutils-8.29'
...
...
...
make[2]: Leaving directory '/home/hibi221b/command/coreutils-8.29/gnulib-tests'
make[1]: Leaving directory '/home/hibi221b/command/coreutils-8.29'
root@hibi221b:/home/hibi221b/command/coreutils-8.29# exit
exit
hibi221b@hibi221b:~/command/coreutils-8.29$
lsコマンドの場所は?
hibi221b@hibi221b:~/command/coreutils-8.29$ ls -l
合計 7728
-rw-r--r-- 1 hibi221b hibi221b 93787 11月 30 2016 ABOUT-NLS
-rw-r--r-- 1 hibi221b hibi221b 3760 11月 23 2016 AUTHORS
-rw-r--r-- 1 hibi221b hibi221b 35147 8月 23 2011 COPYING
...
...
...
drwxr-xr-x 4 hibi221b hibi221b 12288 8月 22 00:13 src
drwxr-xr-x 25 hibi221b hibi221b 4096 12月 28 2017 tests
-rwxr-xr-x 1 hibi221b hibi221b 441 5月 28 2012 thanks-gen
hibi221b@hibi221b:~/command/coreutils-8.29$ cd src
srcディレクトリに移動すると...
hibi221b@hibi221b:~/command/coreutils-8.29/src$ ls -l
合計 39136
...
...
...
-rwxr-xr-x 1 hibi221b hibi221b 617592 8月 22 00:13 ls
-rw-r--r-- 1 hibi221b hibi221b 44 10月 16 2016 ls-dir.c
-rw-r--r-- 1 hibi221b hibi221b 2144 8月 22 00:12 ls-dir.o
-rw-r--r-- 1 hibi221b hibi221b 37 10月 16 2016 ls-ls.c
-rw-r--r-- 1 hibi221b hibi221b 2144 8月 22 00:13 ls-ls.o
-rw-r--r-- 1 hibi221b hibi221b 46 10月 16 2016 ls-vdir.c
-rw-r--r-- 1 hibi221b hibi221b 2144 8月 22 00:13 ls-vdir.o
-rw-r--r-- 1 hibi221b hibi221b 161713 12月 11 2017 ls.c
-rw-r--r-- 1 hibi221b hibi221b 201 11月 18 2015 ls.h
-rw-r--r-- 1 hibi221b hibi221b 580368 8月 22 00:12 ls.o
lsコマンドを見つけることができました。