よくわからないエンジニア

よく分からないエンジニアの日々の記録

よくわからないエンジニア

CentOS7 コマンドのソースコードを取得する

題名の通りです。
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

後はお望みのファイルのソースコードが参照出来ます。