I like to jot down the things I learn as I go along; it helps me to remember. I’ve reproduced this list of useful Linux files and folders which will hopefully grow over time, to represent those I have encountered. I figure if I write them here, they might be of use to others too. The majority can be explored with cat, a pager or a text editor.

/

root directory that must contain:
bin boot dev etc lib media mnt opt sbin srv tmp usr and var subfolders

FOLDER

~/.forward

Mail forwarding configuration FILE

SYNTAX for line in file:

mrnoobot, mrsnoobot
#forwards to specified users

mrnoobot, "|/usr/bin/vacation"
#forwards to user and runs program

/boot

contains Linux kernel and bootloader files FOLDER

/boot/efi

contains Linux kernel and bootloader files (EFI)

/boot/grub/grub.conf

The GRUB bootloader configuration file. FILE

Notable sections:

GLOBAL OPTIONS
default = 0 #title to boot to by default
fallback = 1 #title to boot to if default fails
timeout = 5 #time to choose boot option
splashimage = /grub/splash/image.jpg #background image
hiddenmenu #hides all but default title unless key is pressed
password Password123 #password needed to use GRUB CLI

TITLES
#denote available operating systems
root(hd0,2) #provides location of boot directory using hd syntax
kernel #image file and parameters to be passed to kernel
initrd #ramdisk to match kernel
password #when used in title, password must be entered before booting that title
password --md5 <MD5HASH> #uses an encrypted password for password functions (safer). Can be generated using grub-md5-crypt
rootnoverify #specifies bootable non-Linux operating systems
chainloader +1 #specify path to bootloader on non-Linux bootable OS OR +1 if it is in the first sector of the partition

/dev

pseudo-filesystem that represents all devices currently connected to the Linux system. FOLDER

/dev/sda1
#represents SATA/SCSI/USB device A partition 1
/dev/hdb2
#represents IDE device b partition 2

/etc/adjtime

Log FILE of the hardware clock first setting and subsequent adjustments.

/etc/apt/sources.lst

configuration file for locating package repositories (Debian) FILE

/etc/at.allow

FILE which specifies a list of users (one per line) who are permitted to use the at command. By default all users are allowed to use the command if it is installed and this file does not exist. 

If this file exists, then /etc/at.deny should NOT exist

/etc/at.deny

FILE which specifies a list of users (one per line) who are NOT permitted to use the at command. By default all users are allowed to use the command if it is installed and this file may not exist (or will be empty). 

If this file exists, then /etc/at.allow should NOT exist

Adding a user to this file will not affect any existing at jobs that user has created. These should be removed manually using atrm

/etc/chrony.conf

FILE for configuring the chronyd time service (an alternative to network time protocol for high latency environment)

pool <address> #specifies NTP server pools
logdir #specify location of log files
server #server address to use
keyfile #location of authentication information for NTP servers
driftfile #location of file to monitor drift for correction
allow <IP or subnet> #hosts that can use this server
deny <IP or subnet> #hosts that may not use this server

/etc/cron.allow

FILE which specifies a list of users (one per line) who are permitted to use the crontab command. By default all users are allowed to use the command and this file does not exist. 

If this file exists, then /etc/cron.deny should NOT exist

/etc/cron.d

FOLDER containing system crontab (scheduled) jobs that do not require environment variables to be loaded before script execution

/etc/cron.deny

FILE which specifies a list of users (one per line) who are NOT permitted to use the crontab command. By default all users are allowed to use the command and this file does not exist. 

If this file exists, then /etc/cron.allow should NOT exist

Adding a user to this file will not affect any existing cron jobs that user has created. These should be removed manually using crontab -u mrnoobot -r

/etc/crontab

System crontab FILE for the scheduling of tasks.

The file will:
Define the environment for the scripts eg using SHELL/PATH variables
Define the frequency of script execution
Define what user the script will run as
Define a path to the script

User crontab files are similar but only run as the user.

Frequency is established by defining the following:
minutes (0-59)
hours (0-23)
day of the month (1-31)
month (1-12)
day of the week (0-7) (0 & 7 == Sunday)

Multiple days/weekdays/months can be specified using comma separation or defining a range with - 

These frequency fields can be replaced by the following keywords:
@reboot
@yearly/@annually
@monthly
@weekly
@daily/@midnight
@hourly

/etc/default/grub

contains entries for default boot FOLDER

/etc/default/locale

As the path suggests, a FILE in which the default locale can be adjusted by changing the LANG variable to an available locale. See also locale command. 

/etc/fstab

file system table - configures filesystems that will be mounted automatically on boot FILE

FORMAT:
UUID/DEV/LABEL MOUNTPOINT FILESYSTEM OPTIONS DUMPBIT CHECKPRIORITY

UUID/DEV/LABEL #lists the uuid, the device or the label
MOUNTPOINT #the point to mount the device on
FILESYSTEM # the filesystem on the device
OPTIONS #any specified options
DUMPBIT #1 for TRUE, 0 for FALSE - available to dump command
CHECKPRIORITY #0 for NEVER - order that filesystems are checked

OPTIONS
ro #read only
rw #read and write
suid #allow suid executes
nosuid #do not allow suid executes
dev #allow device files
nodev #do not allow device files
exec #allow executable files
noexec #do not allow executable files
auto #automatically mount
noauto #do not automatically mount
async #asynchronous writes
sync #synchronous writes
relatime #only update access timestamp if file is modified or metadata changed
defaults #stick to default options

/etc/group

FILE containing list of groups and their members

Four fields delimited by colon:

group_name:password:GID:members

group_name #name of the group
password #unusual but if x indicates password entry in /etc/gshadow
GID #numeric group ID
members #list of users who are members of the group delimited by ,

/etc/grub.d

contains scripts run by GRUB2 FOLDER

/etc/gshadow

similar to /etc/shadow this FILE holds the security information for groups in the /etc/group file

contains four fields delimited by colon :
groupname:password:admins:members

groupname #the group name
password #an encrypted password for the group, if it exists (can prevent use of newgrp command)
admins #users who are group admins
members #users who are normal members of the group

/etc/hosts

FILE deprecated by DNS but still used for bootstrapping, non-internet(isolated) nodes and input for Network Information Services database

FIELDS
<IP ADDRESS>     <HOSTNAME>            <ALIAS>
192.168.24.11     test.noobot.com      noobot

/etc/init/SERVICE.override

Where this FILE exists, it may simply contain the word 'manual'. This will automatically override the .conf file and prevent the service from running automatically.

/etc/init/rc-sysinit.conf

ubuntu variant of /etc/inittab; default runlevel can be amended

DEFAULT_RUNLEVEL = 

See also Shell Commands: runlevel for runlevel descriptions
See /etc/inittab for systemv/Red Hat systems

/etc/inittab

determines which scripts will be executed to provide services at startup FILE

default runlevel can be set in this file (see Shell Commands: runlevel for descriptions)

id:5:initdefault:
#in this line, 5 is the default runlevel and can be amended

SYSTEM V systems. See also /etc/systemd, /etc/init/rc-sysinit.conf

/etc/init.d

contains scripts executed to provide services on startup FOLDER

SYSTEM V systems. See also /etc/systemd

/etc/ld.so.conf

library configuration file - typically points to folder /etc/ld.so.conf.d/ which contains individual package conf files

/etc/login.defs

FILE to manage default settings used when new accounts are created. Does NOT propagate if amended

#setting the range of UID and GIDs available to new users and groups.

UID_MIN #user UIDs start at this value (typically 1000)
UID_MAX #upper limit for UIDs
GID_MIN #group GIDs start at this value (typically 100)
GID_MAX #upper limit for GIDs
#SYS_ #preceding about values indicates the ranges reserved for system users and groups (services)

#setting password aging settings
PASS_MAX_DAYS #max number of days password is valid 99999 never expires
PASS_MIN_DAYS #min number of days a password must be valid 
PASS_WARN_AGE #days before expiry that warning will be generated

/etc/logrotate.conf

Configuration FILE for log file management
Establishes the default log settings, the directory for package logs, and customised settings for individual logs.

SETTINGS
weekly/daily/monthly/yearly	
#Rotation interval

rotate 4	
#number of rotations to retain

compress	
#compress rotated logs

missingok	
#no error if logfile is absent

/etc/mail/aliases

FILE used to configure mail aliases

SYNTAX for each line in file:

noobots: mrnoobot, mrsnoobot, panoobot
#defines the mailgroup noobot and users in the mailgroup

mrnoobot: mrnoobot@mrnoobot.com;mrnoobot@uk.mrnoobot.com
#deliver to multiple addresses for same user

logissues: |/usr/local/bin/issues
#pipes mail to a logging application

chiefnoobot: /dev/null
#deletes all incoming mail for a user  

/etc/netplan

FOLDER containing files that determine how interfaces are configured

/etc/ntp.conf

Configuration FILE for NTP (Network Time Protocol)

Comprises servers to sync with and method (eg iburst); recommended at least 3. If server will include own IP address.

Restricts computers from using the machine as a time server (default ignore) and restricts (whitelists) which computers can access the ntpd service (127.0.0.1 for local host). If server, restrict default will be nomodify nopeer noquery.

Driftfile - a file that monitors the time drift between sync servers and system, ultimately providing for automatic correction

Logfile - location of the ntpd logfile

/etc/passwd

contains user data (not passwords) that may be useful for password cracking when combined with /etc/shadow

Each entry contains seven fields delimited with a colon.

loginID:x:UID:GID:comment:home:shell

loginID #username
x #denotes encrypted password stored in /etc/shadow
UID #user ID number (root is 0)
GID #primary group ID
comment #may contain user/admin customised details
home #absolute path to home directory
shell #absolute path to shell

/etc/rc#.d (# is number between 0 and 6)

A series or directories which define which services are stopped (and started) at specific runlevels (inidcated by the number #) FOLDER

The folder contains symbolic links which not only point to the relevant script in /etc/init.d but also indicate what action to perform with that script

/etc/rc5.d/S85httpd
#S STARTS the httpd service at runlevel 5; priority 85

/etc/rc6.d/K15httpd
#K KILLS the httpd service at runlevel 6; priority 15

The prefix number defines what order the script will run, 11 will run before 15 and so on. The correct values to apply are found in the relevant script under chkconfig

grep chkconfig /etc/init.d/httpd
#displays chkconfig (- OR 345) START KILL where START is the recommended S priority and KILL is the recommended K priority and - indicating that the service does not start automatically OR 345 indicating it starts on runlevels 3, 4 and 5.

/etc/rc.d/init.d

Contains scripts of system services FOLDER

The scripts within can be used to manually start/stop services

/etc/rc.d/init.d/httpd start
#this will start the webserver

see also Shell Command: service which accomplishes the same thing

/etc/resolv.conf

Configuration FILE for DNS resolution

nameserver
 #IP address name server (max 3)

domain
 #domain name used locally

search
 #search list for hostname lookup

sortlist
 #Allow address sort,list specified by IP addresses 

options
 #modify internal variables EG:

attempts: 3 #set retry count for queries to 3

/etc/rsyslogd.conf

Configuration FILE for system logging

Syntax:
FACILITY.PRIORITY                  ACTION
#DESCRIPTION

Facilities:
auth	
#Security and authorization-related commands

authpriv #Private authorization messages

cron	
#The cron daemon

daemon	
#System daemons

ftp	
#The ftp daemon

kern	
#The kernel

lpr	
#The BSD printer spooling system

mail	
#sendmail and other mail-related software

mark    #Timestamps generated at regular intervals

news	
#The Usenet news system

security	
#Same as auth

rsyslog	
#rsyslogd internal messages

user	
#User processes

uucp	
#Reserved for UUCP

local0 to local7	
#Eight flavors of local message

Priorities (low to high):
debug	
#For debugging only

info	
#Informational messages

notice	
#Things that might merit investigation

warning (or warn)	
#Warning messages

err	
#Other error conditions

crit	
#Critical conditions

alert	
#Urgent situations

emerg (or panic)	
#Panic situations
WARN and PANIC are deprecated

SELECTOR = FACILITY.PRIORITY
Example selectors:
*.*	
#All facilities and priorities

*.info	
#All facilities at info priority or higher

kern.*	
#Select all kernel messages

mail.warning	
#Messages from the mail facility at a warning priority or higher

cron,lpr.err	
#Messages from the cron or lpr facility at an err priority or higher

cron.err;cron.!alert	
#Messages from the cron facility at an err priority or higher, but not at alert priority

mail.=err	
#Only err messages from the mail facility

*.info;mail.none;lpr.none
 #Select messages from all facilities except mail and lpr

ACTION
/path/to/file	
#Specify the full absolute path for the log file

-/path/to/file	
#The - before the path means to not sync after writing each log message (better system performance for active logs eg mail)

|/path/to/named/pipe	
#Specify a pipe symbol and a path to a named pipe file created with mkfifo (make first-in, first-out)

/dev/tty10	
#Specify a terminal or console, such as /dev/console

@10.0.0.1	
#IP address,hostname or remote host

noobot,mrsnoobot,panoobot	
#Specify a list of users whose terminals will have the message displayed if the users are currently logged into the system

*	
#Send to the terminal of everyone who is logged in

TEST using the LOGGER command

/etc/services

Legacy FILE for mapping application service names to port numbers. This is now typically done with individual config files but this file may still be useful for identifying default ports.

/etc/shadow

contains users hashed passwords which can be combined with /etc/passwd for cracking. Only accessible by root.

each entry comprises eight fields, delimited with a colon

loginID:password:lastchg:min:max:warn:inactive:expire

loginID #corresponds with loginID in /etc/passwd
password #encrypted password (none if empty). If preceded by ! account is locked. ! or * on their own indicate inaccessible (likely system) account.
lastchg #no of days from 1st Jan 1970 until last password change
min #minimum age (days) before user can change password
max #maximum age (days) before password expiry (99999 no expiry)
warn #no of days before expiry to issue password change warning
inactive # no of days after password expiry account remains active
expiry #days post 1st Jan 1970 indicating a date when password will be deleted and account rendered inactive.

/etc/skel

FOLDER that holds default directory structure/contents that will be applied to new users home directory ON CREATION (ie if this folder is amended it does not propagate to existing users)

Different template folders can be created on the system, for example /etc/skel_sales, /etc/skel_hr and /etc/skel_marketing and referenced in the -k option when creating accounts with useradd.

/etc/systemd/journald.conf

configuration file for the journald logging daemon, which creates the main log on systemd systems as binaries FILE

Storage auto/volatile/persistent/none
#log if log file exists/log to RAM/log to disk/log to console
Compress
#compress files or not
SystemMaxUse
#define storage (default 10% capped at 4GB)
SystemMaxFileSize
#define max file size before rotation

/etc/systemd/system/default.target

a symbolic link that points to the required default target (runlevel) in /lib/systemd/system on a systemd machine LINK

/etc/udev/rules.d

contains configuration files that specify how devices are handled when connected. FOLDER

/home

location of user home directories FOLDER

/lib/systemd/system

contains systemd targets (runlevels) for boot. FOLDER

default target can be set by making a symbolic link:

/etc/systemd/system/default.target

that points to the required target in /lib/systemd/system

.mount

systemd mount FILE

UNIT
Description #mount unit to be mounted
Before #filename to be mounted

MOUNT
What #absolute path to file to be mounted
Where #location to mount to
Type #filesystem type
Options #options

INSTALL
WantedBy #systemd target that this filesystem will be used by

/opt

directory containing third party software installations

/proc/dma

contains a list of hardware items that can exercise Direct Memory Access (bypassing the CPU) FILE

/proc/iomem

/proc/iomem contains a list of locations used to pass and store data similar to RAM FILE

/proc/ioports

/proc/ioports contains memory addresses used for communication with hardware devices such as keyboards FILE

/proc/meminfo

/proc/meminfo contains information about the system memory FILE

/run/log/journal

file for non-persistent and RAM-based logging FILE must be opend with journalctl command

swap

virtual memory that is NOT mounted as a directory - can be up to twice the physical memory on a system VIRTUAL

/sys

/sys contains values relevant to the operation and configuration of the kernel FOLDER

/tmp

temporary WORLD WRITEABLE directory for system and users FOLDER

/usr

operating system files, commands and system software FOLDER

/usr/local

locally installed software that should not be upgraded alongside the operating system

/usr/share/zoneinfo

FOLDER containing available timezone files

/var

directory for heavy activity functions such as mail, ftp, http FOLDER

/var/tmp is WORLD WRITEABLE

/var/log/boot.log

System boot log FILES

/var/log/cron.log

cron service (scheduled task) log files

/var/log/dmesg

contains messages generated during the boot process FILE

/var/log/httpd/error_log

Apache web server error log file FILE

/var/log/kern.log

Kernel log FILES

/var/log/journal

file for persistent logging on a systemd system must be opend using the journalctl command. FILE

/var/log/maillog

Mail server log FILE

/var/log/messages

Kernel and system-related messages - the MAIN log file FILE
See also /var/log/syslog, /var/log/rsyslog

/var/log/rsyslog

Kernel and system-related messages - the MAIN log file FILE
See also /var/log/messages, /var/log/syslog

/var/log/secure

Authentication log FILE - see also /var/log/auth.log

/var/log/syslog

Kernel and system-related messages - the MAIN log file FILE
See also /var/log/messages, /var/log/rsyslog

/var/log/ufw.log

Log FILE for the Uncomplicated Firewall

/var/spool/cron

FOLDER containing user crontab files. Should not be edited directly, rather user should use crontab command.