題名の通りです。
C言語のお勉強をしていると、lsとかcatを作ってみよう。って出てくるのですが、実際にいつも使ってるコマンドの中身を見てみたいなと思ったのでやってみました。
目次
コマンドの確認
まずは利用したいコマンドを確認します。今回はcatを探してみます。
whichコマンドでcatコマンドの場所を探し、rpmでcatコマンドが含まれるパッケージを確認します。
# which cat /bin/cat # rpm -qf /bin/cat coreutils-8.22-15.el7_2.1.x86_64
coreutilsパッケージに含まれている事が分かりました。
ソースのダウンロード
パッケージのsrc.rpmをダウンロードしてからバラします。
# yumdownloader --source coreutils # mkdir -p coreutils # cd coreutils/ # ls # rpm2cpio ../coreutils-8.22-18.el7.src.rpm |cpio -id # tar -xvf coreutils-8.22.tar.xz # cd ../ # cd coreutils-8.22/src/ # ls base64.c chroot.c cut.c echo.c find-mount-point.c head.c link.c make-prime-list.c nproc.c printenv.c remove.c shuf.c tac-pipe.c tsort.c users.c basename.c cksum.c date.c env.c find-mount-point.h hostid.c ln.c md5sum.c numfmt.c printf.c remove.h sleep.c tac.c tty.c wc.c c99-to-c89.diff comm.c dcgen expand.c fmt.c hostname.c local.mk mkdir.c od.c prog-fprintf.c rm.c sort.c tail.c uname-arch.c who.c cat.c copy.c dd.c expr.c fold.c id.c logname.c mkfifo.c operand2sig.c prog-fprintf.h rmdir.c split.c tee.c uname-uname.c whoami.c chcon.c copy.h df.c extent-scan.c fs-is-local.h install.c longlong.h mknod.c operand2sig.h ptx.c runcon.c stat.c test.c uname.c yes.c chgrp.c cp-hash.c dircolors.c extent-scan.h fs.h ioblksize.h ls-dir.c mktemp.c paste.c pwd.c selinux.c stdbuf.c timeout.c uname.h chmod.c cp-hash.h dircolors.h extract-magic getlimits.c join.c ls-ls.c mv.c pathchk.c readlink.c selinux.h stty.c touch.c unexpand.c chown-core.c cp.c dircolors.hin factor.c group-list.c kill.c ls-vdir.c nice.c pinky.c realpath.c seq.c sum.c tr.c uniq.c chown-core.h csplit.c dirname.c false.c group-list.h lbracket.c ls.c nl.c pr.c relpath.c setuidgid.c sync.c true.c unlink.c chown.c cu-progs.mk du.c fiemap.h groups.c libstdbuf.c ls.h nohup.c primes.h relpath.h shred.c system.h truncate.c uptime.c
後はお望みのファイルのソースコードが参照出来ます。