The mount command, and it's cousin umount can be used to mount and unmount filesystems on your Linux system.
An extract from the mount(1) man page:
|
All files accessible in a Unix system are arranged in one big tree, the file hierarchy, rooted at /. These files can be spread out over several devices. The mount command serves to attach the file system found on some device to the big file tree. Conversely, the umount(8) command will detach it again. |
||
| --man mount(1) | ||
Issuing the mount command without any parameters will display the current mounted filesystems, and their status, on your system:
So when you created the filesystems at installation time a relevant device was created in the /dev directory. The devices that were created each have an address that points to a series of datablocks on your hard disk.
As an example let us say that when you were installing the operating system you specified a third filesystem called "database" that you wanted to create as well as the root filesystem and the swap filesystem. A device called database (/dev/database) would be created at that time and a mount point would be created as well called say /database.
Now when you do a listing under root you will see an empty directory called "database". When you attach or mount the filesystem to the empty directory now called a mount-point, then you are able to access the series of datablocks reserved on the hard disk for that filesystem as defined by /dev/database at installation time.
Once mounted the filesystem is now accessible through the mount-point called /database.
debian:~# mount
/dev/hda2 on / type ext2 (rw,errors=remount-ro)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
|
Here you can see that there are currently three file systems mounted.
One is your root ("/") file system, which is mounted off "hda2", which you should remember is the second partition on your primary master IDE drive. You can also see that the filesystem is mounted as "read-write", and is of type "ext2" (short for Linux second extended file system)
There are then two special filesystems, proc, and "devpts". The "devpts" filesystem is a simple, virtual filesystem which allows for easy control over the terminal devices and their ownership. We will explain the proc filesystem within the next section.
You can mount additional filesystems, as long as they been defined in your /etc/fstab file, by using the mount command:
In the following example we are going to mount /dev/cdrom on a mount-point called /cdrom:
debian:~# mount
/dev/hdb2 on / type ext2 (rw,errors=remount-ro)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
debian:~# mount /cdrom
debian:~# mount
/dev/hdb2 on / type ext2 (rw,errors=remount-ro)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/cdrom on /cdrom type iso9660 (ro,noexec,nosuid,nodev)
debian:~#
|
In the example above, we've successfully mounted a CD-ROM onto the /cdrom mount point. You can now change directory into the /cdrom directory and you will have access to the information held on the CDROM itself. Read write access will depend on the capabilities of the CDROM and the permissions of your username.
To unmount it again once we've finished, we can use the unmount command:
debian:~# umount /cdrom
debian:~# mount
/dev/hdb2 on / type ext2 (rw,errors=remount-ro)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
debian:~#
|
If you wish to mount a filesystem which isn't configured in your /etc/fstab file, then you can use the following syntax:
SYNTAX:
mount -t <type> -o <options> <device> <mount point>
|
debian:~# mount -t ext2 -o rw /dev/hdb3 /mnt
debian:~# mount
/dev/hdb2 on / type ext2 (rw,errors=remount-ro)
/dev/hdb3 on /mnt type ext2 (rw)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
debian:~# umount /mnt
|
As you can see, it takes fields very similar to what you find in /etc/fstab. As a point of interest, the currently mounted filesystem information is kept in a file called /etc/mtab.
debian:~# cat /etc/mtab
/dev/hdb2 / ext2 rw,errors=remount-ro 0 0
proc /proc proc rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
|
Make sure that whether you mount a diskette, cdrom or hard drive filesystem that you un-mount it prior to removing it from the system or prior to shutting down the system.
The /proc filesystem is a special interface to the Linux kernel. It allows you to access various Linux kernel structures as if they were normal files.
Let's take a look:
debian:~# cd /proc
debian:/proc# ls -F
./ 1886/ 2035/ 2110/ 6/ ksyms
../ 1887/ 2068/ 2146/ 7/ loadavg
1/ 1888/ 2069/ 2309/ 8/ locks
1080/ 1908/ 2070/ 2325/ 899/ lvm/
11/ 1940/ 2071/ 2388/ 902/ mdstat
1116/ 1941/ 2072/ 2425/ 961/ meminfo
1254/ 1959/ 2073/ 2426/ acpi/ misc
1283/ 1962/ 2074/ 2427/ asound/ mm
1292/ 1965/ 2075/ 2428/ buddyinfo modules
1300/ 1968/ 2076/ 2439/ bus/ mounts@
1322/ 1984/ 2077/ 3/ cmdline mtrr
1323/ 1986/ 2079/ 3291/ config.gz net/
1435/ 1987/ 2082/ 3342/ cpufreq partitions
1663/ 1989/ 2083/ 3348/ cpuinfo pci
1668/ 1990/ 2084/ 3349/ crypto/ pisch
1719/ 1992/ 2087/ 3350/ devices pisch_version
1752/ 1994/ 2095/ 3351/ dma scsi/
1759/ 1997/ 2096/ 3352/ driver/ self@
1804/ 2/ 2098/ 3517/ execdomains slabinfo
1806/ 2007/ 2100/ 3562/ fb splash
1814/ 2009/ 2101/ 3662/ filesystems stat
1815/ 2013/ 2102/ 3663/ fs/ swaps
1816/ 2015/ 2103/ 3751/ ide/ sys/
1817/ 2017/ 2104/ 3753/ interrupts sysrq-trigger
1818/ 2018/ 2105/ 3754/ iomem sysvipc/
1822/ 2019/ 2106/ 3763/ ioports tty/
1883/ 2021/ 2107/ 386/ irq/ uptime
1884/ 2028/ 2108/ 4/ kcore version
1885/ 2030/ 2109/ 5/ kmsg video/
|
The numbers refer to process IDs, and within those directories you can find out information about that currently running process. The self directory is a symlink to the process that checks it's current PID.
Some useful files in proc are:
This file displays information about the system's CPU(s):
debian:/proc# cat cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 3
model name : AMD Duron(tm) Processor
stepping : 1
cpu MHz : 656.476
cache size : 64 KB
fdiv_bug : no
hlt_bug : no
sep_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr
: mca cmov pat pse36 psn mmxext \
mmx fxsr 3dnowext 3dnow
bogomips : 1307.44
debian:/proc#
|
One of the things that almost all operating systems do not handle very well is running out of disk space. Some applications will fail relatively gracefully, but probably won't be able to save their most recent changes. Other applications, usually the more complicated ones, will only be able to partially save, thus resulting in corrupted file data, which means you're going to have to end up restoring from backups!
You will find the following commands useful for keeping an eye on your filesystems:
The df (disk free) command shows your the amount of free disk space on the currently mounted filesystems:
debian:~# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hdb2 9550788 79056 8986572 1% /
|
You can use the "-h" parameter to tell df to display the values in "human readable" form:
debian:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdb2 9.8G 81M 9.2G 1% /
|
Specifying the "-i" switch will cause df to display the free inode count, instead of the default free block count:
debian:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hdb2 1214400 12043 1202357 1% /
|
The du (disk used) command can be used to determine how much space has been used by directories. This is useful when you're doing some cleaning up and looking for areas that are consuming a lot of space:
debian:~# du -sh /usr
53M /usr
|
The "-s" switch gives us a summary, rather than a listing of each sub directory, and the "-h" switch again gives us the values in "human readable" form, rather than in block sizes.
You can use a combination of these commands to track down disk usage on your filesystems.
A good system administrator should keep an eye on the output of df and note when filesystems are reaching their limit, so that a new disk can be arranged before the system runs out of space!
It's often useful to look for the largest files and directories on a certain drive, as you may be wishing to free up some space quickly. You can use the "du" command together with a few others to achieve this:
debian:~# du -k /usr | sort -n | tail -10
37660 /usr/X11R6
39864 /usr/bin
52704 /usr/share/doc
76588 /usr/local/src/kernel-source-2.4.18/drivers
122336 /usr/lib
154308 /usr/local/src/kernel-source-2.4.18
155456 /usr/local/src
155496 /usr/local
192672 /usr/share
583824 /usr
|
The "-k" switch tells "du" to display the size of everything in kilobytes; it's important for the unit of measurement to be the same so that the "sort" command can order things properly.
The "-n" switch tells "sort" to treat the numbers as values, rather than words.
The "tail -10" command specifies that only the last 10 lines of output should be displayed.
This little one liner can now easily give you the top 10 largest files and directories in a specified path!
We've dealt previously with "chmod", and with the "r", "w" and "x" permission bits. However, there are a few more, which we will deal with now.
The "set user id" (suid) and "set group id" (sgid) on execution bits are denoted by an "s" in the column that would normally have an "x" (execute) character.
For example, the "passwd" command has its suid bit set:
debian:~# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 24680 Apr 7 2002 /usr/bin/passwd
|
These bits have the effect of causing the command to be run as the user (suid) and/or as the group (sgid) that owns the file. In the case of "passwd", it means that even if you execute the "passwd" command as a normal user, the kernel will elevate the command's privileges to that of the root user.
In this specific case, it is so that the passwd command can access the /etc/shadow password file, so that it can check and change passwords.
![]() |
Note |
|---|---|
|
Problems with suid and sgid binaries can very often lead to a system compromise, so it is very important to make sure that you know which files on your system have these bits set, and to make sure that you keep that particular package up to date with security fixes, or perhaps even uninstall it if the package isn't necessary. |
|
You can use the "find" command to locate all the suid and sgid binaries on your system:
debian:~# find / -xdev -perm +4000 -ls
17591 24 -rwsr-xr-x 1 root root 21112 Sep
23 2003 /bin/su
12789 32 -rwsr-xr-x 1 root root 31188 Sep
23 2003 /bin/ping
9736 36 -rwsr-xr-x 1 root audio 36142 Sep
23 2003 /bin/eject
40687 76 -rwsr-xr-x 1 root root 77488 Sep
23 2003 /bin/mount
12790 28 -rwsr-xr-x 1 root root 26996 Sep
23 2003 /bin/ping6
40688 40 -rwsr-xr-x 1 root root 40788 Sep
23 2003 /bin/umount
64765 60 -rwsr-xr-x 1 root root 61396 Sep
24 2003 /opt/kde3/bin/fileshareset
52172 8 -rwsr-xr-x 1 root root 6206 Sep
24 2003 /opt/kde3/bin/artswrapper
64769 16 -rwsr-xr-x 1 root shadow 14134 Sep
24 2003 /opt/kde3/bin/kcheckpass
54971 8 -rwsr-xr-x 1 root root 7946 Sep
24 2003 /opt/kde3/bin/kpac_dhcp_helper
198953 44 -rwsr-xr-x 1 root video 43996 Sep
24 2003 /opt/gnome/sbin/zapping_setup_fb
64521 36 -rwsr-xr-x 1 root root 35196 Sep
23 2003 /usr/bin/at
43724 8 -rwsr-xr-x 2 root root 4572 Sep
24 2003 /usr/bin/man
49943 16 -rwsr-xr-x 1 root root 15488 Sep
23 2003 /usr/bin/rcp
49946 12 -rwsr-xr-x 1 root root 8228 Sep
23 2003 /usr/bin/rsh
69488 228 -rwsr-xr-x 1 root root 229480 Sep
23 2003 /usr/bin/ssh
144705 32 -rwsr-xr-x 1 root trusted 30623 Sep
23 2003 /usr/bin/bing
58745 76 -rwsr-xr-x 3 root shadow 77204 Sep
24 2003 /usr/bin/chfn
58745 76 -rwsr-xr-x 3 root shadow 77204 Sep
24 2003 /usr/bin/chsh
17782 92 -rwsr-xr-x 1 root root 90508 Sep
23 2003 /usr/bin/sudo
49653 16 -rwsr-xr-x 1 lp sys 15206 Sep
23 2003 /usr/bin/lppasswd
202972 16 -rwsr-xr-x 1 root trusted 14880 Sep
23 2003 /usr/bin/vboxbeep
71038 24 -rwsr-xr-x 1 root root 22812 Sep
23 2003 /usr/bin/crontab
58662 60 -rwsr-xr-x 1 root shadow 60944 Sep
24 2003 /usr/bin/chage
43724 8 -rwsr-xr-x 2 root root 4572 Sep
24 2003 /usr/bin/mandb
|
The sticky bit is denoted by a "t" in instead of the group execute permission ("x"). An example is the /tmp directory:
debian:~# ls -ld /tmp
drwxrwxrwt 2 root root 4096 Mar 15 04:35 /tmp
|
The sticky bit only has an affect on directories, not regular files. It turns a directory into an append-only directory. This means that files in this directory can only be removed or renamed by the owner of the file. Thus, it is very useful for directories, which are publically writable, but where you want to protect the user's files from other users.
Again, you can use the "find" command to show you all the sticky-bit directories on your system:
debian:~# find / -xdev -perm +1000 -ls
97153 4 drwxrwxrwt 2 root root 4096 Mar 12 04:35 /tmp
1117249 4 drwxrwxrwt 2 root root 4096 Feb 8 2002 /var/lock
1182017 4 drwxrwxrwt 3 root root 4096 Mar 11 14:22 /var/tmp
|
In addition to the standard Unix file permission scheme, the ext2 file system has the ability to set the following attributes on both files and directories:
When a file or directory with this attribute is accessed for reading or writing, its last access time (atime) will not be updated. This may be useful on files which are accessed very often, but which you're not interested in recording the atime for. An example might be the system man pages.
Files with this attribute set can only be appended to. For directories, this means that you can only add files to it; you cannot delete or rename files.
This prevents the dump(8) backup utility from backing up a file or directory marked with this attributed.
This prevents the file from being modified in any way. Only the root user can set or clear this attribute.
When a file or directory with this attribute is deleted, the space they occupied on the disk is overwritten with zeros before the filesystem entries are removed.
Modifications to files or directories with this bit set are written to disk immediately, without doing any buffering.
You can use the following commands to examine and set ext2 attributes:
The "chattr" command can set and remove attributes on files.
debian:~# ls -l test.txt
-rw-r--r-- 1 root root 9 Mar 15 03:17 test.txt
debian:~# lsattr test.txt
-------------- test.txt
debian:~# chattr +i test.txt
debian:~# lsattr test.txt
---i---------- test.txt
debian:~# rm test.txt
rm: remove write-protected file 'test.txt'? y
rm: cannot unlink 'test.txt': Operation not permitted
debian:~# chattr -i test.txt
debian:~# rm test.txt
|
As you can see, even the root user cannot delete an "immutable" file until the attribute has been removed.