Table of Content

Weight: 2

Description: Candidates should be thoroughly familiar with the Filesystem Hierarchy Standard (FHS), including typical file locations and directory classifications.

Key Knowledge Areas:

  • Understand the correct locations of files under the FHS
  • Find files and commands on a Linux system
  • Know the location and purpose of important file and directories as defined in the FHS

Terms and Utilities:

find
locate
updatedb
whereis
which
type
/etc/updatedb.conf

FHS

Filesystem Hierarchy Standard (FHS). This new standard is based on FSSTND but extends it substantially

path

[root@dclab-centos7 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

which

which command shows you the first occurrence of a command in your path

[oldhorse@dclab-centos7 ~]$ which awk
/usr/bin/awk

[root@dclab-centos7 ~]# echo $(which -a awk)
/bin/awk /usr/bin/awk
[root@dclab-centos7 ~]# ls -l $(which -a awk)
lrwxrwxrwx. 1 root root 4 Sep 19 14:00 /bin/awk -> gawk
lrwxrwxrwx. 1 root root 4 Sep 19 14:00 /usr/bin/awk -> gawk

whereis

find more information than just the location of a program

[oldhorse@dclab-centos7 ~]$ whereis awk
awk: /usr/bin/awk /usr/libexec/awk /usr/share/awk /usr/share/man/man1/awk.1.gz

type

The typecommand is a builtin that will tell you how a given command string will be evaluated for execution

[oldhorse@dclab-centos7 ~]$ type awk
awk is /usr/bin/awk

[root@dclab-centos7 ~]# which ls
alias ls='ls --color=auto'
        /bin/ls
[root@dclab-centos7 ~]# type ls
ls is aliased to `ls --color=auto'

find

# find /home -name ā€œ*.cā€

find /home/oldhorse/ -user oldhorse

[root@dclab-centos7 ~]# find /tmp -iregex ".*unix*."
/tmp/.X11-unix
/tmp/.ICE-unix
/tmp/.XIM-unix
/tmp/.font-unix
/tmp/.Test-unix

[root@dclab-centos7 ~]# find /tmp -iregex ".*unix*." -type d
/tmp/.X11-unix
/tmp/.ICE-unix
/tmp/.XIM-unix
/tmp/.font-unix
/tmp/.Test-unix

[root@dclab-centos7 ~]# find /tmp -perm -o=rwt
/tmp
/tmp/.X11-unix
/tmp/.ICE-unix
/tmp/.XIM-unix
/tmp/.font-unix
/tmp/.Test-unix

locate

The locate command matches against any part of a path name, not just the file name.

root@dclab-u1504s:~# ls -l $(which -a locate)
lrwxrwxrwx 1 root root 24 Sep 20 06:33 /usr/bin/locate -> /etc/alternatives/locate
root@dclab-u1504s:~# type locate
locate is hashed (/usr/bin/locate)

oldhorse@dclab-u1504s:~$ locate /bin/ls
/bin/ls
/bin/lsblk
/bin/lsmod
/usr/bin/lsattr
/usr/bin/lsb_release
/usr/bin/lscpu
/usr/bin/lshw
/usr/bin/lsinitramfs
/usr/bin/lslocks
/usr/bin/lsof
/usr/bin/lspci
/usr/bin/lspgpot
/usr/bin/lsusb
/usr/lib/klibc/bin/ls

root@dclab-u1504s:~# locate -S
Database /var/lib/mlocate/mlocate.db:
        8,944 directories
        69,989 files
        3,582,563 bytes in file names
        1,534,796 bytes used to store database

locatedb updated by updatedb command

To enable daily updates, the root user needs to edit /etc/updatedb.conf and set DAILY_UPDATE=yes. To create the database immediately, run the updatedb command as root.

root@dclab-u1504s:~# less /etc/updatedb.conf 
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"

ls -l /usr/bin/{slocate,locate,updatedb}
ls: cannot access /usr/bin/slocate: No such file or directory
lrwxrwxrwx 1 root root 24 Sep 20 06:33 /usr/bin/locate -> /etc/alternatives/locate
lrwxrwxrwx 1 root root 26 Sep 20 06:33 /usr/bin/updatedb -> /etc/alternatives/updatedb

Quiz questions

1. What is the distinction between /usr/bin and /bin?
2. What determines whether an executable is in /usr/bin or /usr/sbin?
3. When should files appear in /usr/local?
4. Why is /lib separate from /usr/lib?
5. What is the relationship between the which command and the PATH environment
variable?
Answers to quiz questions
1. /bin contains files which are essential for booting when /usr may not be available.
2. The contents of /bin is standardised, but anything can appear in /usr/bin.
3. When the files have been prepared for local conditions, e.g. customised programs, etc.
4. boot time vs run time when /usr is available.
5. which searches the directories in the PATH variable.