23 KiB
Executable File
Table of Contents
- Commands
- Linux Distibution
- bash
- Installation/Packages
- History
- Permissions
- Files and Paths
- WSL Mount Network Drive
- Symlinks
- Print working directory
- list files and directories
- find directory
- find directories older than n minutes AND delete them
- find directories older than x days AND delete them
- find files older than DATE AND delete them
- find folders older than DATE AND delete them
- find file
- find all files with windows (CRLF) newline
- find large files
- copy files
- move/rename files
- remove
- create file
- create directory
- Redirection/Input/Output/Search-Replace
- echo text
- output contents of a file
- add text to file
- echo command output to file
- word count
- pipes
- sort/duplicates
- search text in files
- stream editor (search and replace
- Disable stout stderr
- User and Environment
- Befehl als anderen Benutzer ausführen
- Benutzer wechseln
- liste aller User
- show all users with groups
- User passwörter
- info zum aktuellen user
- add to group
- don't let wheel members let change root password
- get all sudoer users
- Benutzer löschen
- Benutzer/Gruppe setzen
- Passwort ändern
- bash profile
- environment variables
- environment variables: set
- Hardware Informationen
- Datenträger, Verzeichnisstruktur
- Angeschlossene Festplatten und Wechseldatenträger inkl. der Partitionen anzeigen
- Nur Festplatten, ohne Partitionen
- Nur Partitionen, ohne Festplatten
- Verzeichnis und Partitionen Baum
- LVM (Logical Volume Manager
- Daemon
- Prozesse
- Definition
- Zeige Prozesse
- Zeige Prozesse (übersichtlicher)
- Zeige Java Prozesse
- Befehl im Hintergrund laufen lassen
- Output (stdout) von Prozess anzeigen
- PID von Prozess anzeigen
- Netzwerk/SSH/Ports
- Zeiteinstellungen
- Manpages
- Tools
Commands
Linux Distibution
show os version.
lsb_release -a
# or
hostnamectl
# or
cat /etc/*-release
bash
su, sudo etc. see https://newbedev.com/su-vs-sudo-s-vs-sudo-i-vs-sudo-bash
Installation/Packages
Liste installierte Pakete
dpkg --list
History
history gibt letzte Befehle an. Sie haben eine Nummer.
# Location des history files
echo $HISTFILE
# history nicht aufzeichnen (nicht dauerhaft)
unset $HISTFILE
# einige Befehle ignorieren für history
vi .bashrc
export HISTIGNORE="ls:cd" --> für die Befehle, die nicht gespeichert werden sollen.
# länge der history
echo $HISTSIZE
echo $HISTFILESIZE
# anpassen
vi .bashrc
HISTSIZE=2000
HISTFILESIZE=2000
# timestamp der history hinzufügen
vi .bashrc
export HISTTIMEFORMAT="%c "
# duplikate in history raus nehmen
echo $HISTCONTROL
vi .bashrc
export HISTCONTROL=ignoredups
# history file an einem anderen ort
vi .bashrc
export HISTFIILE="/home/rene/meinehistory"
# reverse search in history
CTRL-R, und dann anfangen zu schreiben. Next match: CTRL-R
# letzte 4 Befehle
history 4
# letzter Befehl nochmal ausführen
!!
# Befehl 1234 ausführen
!1234
# Auto-Vervollständigen
!his --> führt letzten history befehl aus,
!his:p --> zeigt letzten Befehl nur an, der so anfängt, also history
# in history suchen
history | grep ping
# history löschen
history -c
# history in datei
history -w
# history einzelne zeilen löschen
history -d 56
# Befehl, der nicht in History vorkommt. Also ausführen und gleich aus history löschen.
echo *dies ist mein geheimer befehl"; history -d $(history 1)
Permissions
Generell
Owner-Group-World kann read-write-execute
Beispiel 1
-rw-r--r-- 1 bob users 1892 Jul 10 18:30 linux_course_notes.txt
Datei gehört zur Gruppe users, genauer zum user bob, und es handelt sich um 1 Datei.
Zu den Permission Symbolen am Anfang:
-: ein normales file. Ein Directory hätte ein d.
r: user bob kann lesen
w: user bob kann schreiben
-: user bob kann nicht ausführen oder es ist gar kein ausführbares Programm
r: gruppe users kann lesen
-: gruppe users kann nicht schreiben
-: gruppe users kann nicht ausführen oder es ist gar kein ausführbares Programm
r: alle im Netzwerk können lesen
-: alle im Netzwerk können nicht schreiben
-: alle im Netzwerk können nicht ausführen oder es ist gar kein ausführbares Programm
Berechtigungen ändern mit chmod
Schema: chmod owner group world FileName
-> chmod read+write read read FileName
-> chmod 644 FileName
4 = read (r)
2 = write (w)
1 = execute (x)
das ergibt, wenn man zusammenzählt:
7 = 4+2+1 (read/write/execute)
6 = 4+2 (read/write)
5 = 4+1 (read/execute)
4 = 4 (read)
3 = 2+1 (write/execute)
2 = 2 (write)
1 = 1 (execute)
# read/write by anybody! (the devil loves this one!)
chmod 666 mydoc.txt
# rwx for owner, rx for group and rx for the world
chmod 755 mydoc.txt
# read, write, execute for all! (may not be the best plan in the world...)
chmod 777 mydoc.txt
Files and Paths
WSL Mount Network Drive
Mount a Drive Until Logoff
- Note the letter of the network drive that you would like to map in WSL. We will use
M:in this example. - Create a new folder for that drive letter under
/mntif it does not already exist. (ex:mkdir /mnt/m) - Mount the drive with
sudo mount -t drvfs M: /mnt/m
Mount Drives in a Persistent Manner
- Ensure the folder exists for the mount target (e.g.
/mnt/m) - Open
/etc/fstaband add a line such as the following:M: /mnt/m drvfs defaults 0 0 - Reload the fstab file with
sudo mount -a
Symlinks
ln -s <path to the file/folder to be linked> <the path of the link to be created>
Print working directory
pwd
list files and directories
ls -<parameters>
All Parameters here: https://manpages.ubuntu.com/manpages/bionic/de/man1/ls.1.html\
Most used Parameters:
| Param | Description |
|---|---|
| -a | also show hidden files, beginning with . |
| -h | human readable |
| -l | long list format |
| -r | descending sort order |
| -R | also list sub folders recursively |
| -t | sort by date modified mtime |
| -lu | sort by access date atime |
find directory
find / -type d -name httpdocs
find directories older than n minutes AND delete them
sudo find ${TARGET_DIR}/* -type d -mmin +100 | xargs rm -rf
find directories older than x days AND delete them
sudo find ${TARGET_DIR}/* -type d -ctime +8 | xargs rm -rf
find files older than DATE AND delete them
find /path -type f -not -newermt "YYYY-MM-DD HH:MI:SS" -delete
find folders older than DATE AND delete them
find /home/administrator/backup_docubase -type d -not -newermt "2021-07-01 00:00:00" -exec rm -rf {} +
find file
find / -type f -name "process.txt"
find / -type f -name "process.txt" -not -path "./directory/*"
with full path:
find ~/Dropbox/Bilder/2013/2013-04---\ La\ Reunion/2013-04-06/ -maxdepth 1 -type f
find all files with windows (CRLF) newline
find . -not -type d -exec file "{}" ";" | grep CRLF
find large files
find / -size +10M -ls
copy files
cp biopic/ray.txt historical/
cp biopic/ray.txt biopic/notorious.txt historical/
cp * satire/
cp wonderwoman.txt wonderwoman-new.txt (duplicate)
move/rename files
mv wonderwoman.txt batman.txt superhero/
mv wonderwoman.txt batman.txt (rename)
batch rename files:
n=1; for file in *.jpg; do mv "$file" "stuttgart_1975-11-02_$((n++)).jpg"; done
remove
rm textfile.txt
rm -- -textfile.txt (files starting with a "-")
rm -r DIRECTORYNAME (directory and its contents)
create file
touch textfile.txt
echo "Hello" > hello.txt
create directory
mkdir media
or multiple directories at once:
mkdir -p folder_{a..z}/{AAA_{1..3},BBB_{1..9}}
Redirection/Input/Output/Search-Replace
echo text
echo "hello"
output contents of a file
cat hello.txt
less hello.txt (only first few lines, arrow-down for more, q to quit.
tail -n 50 hello.txt (last 50 lines)
tail -f hello.txt (last lines, live view)
add text to file
echo "Hello" > hello.txt (overwrite)
echo "Hello" >> hello.txt (append on new line)
cat goodbye.txt >> hello.txt
echo command output to file
$ find . -type f -user root | tee -a ~/objects-user-root.txt (-a adds it to existing content)
word count
wc hello.txt (Print newline, word, and byte counts)
pipes
Möglichkeiten die Ausgabe einzelnen Befehle umzuleiten, z.B. an Logdateien, an Terminals, Drucker, aber auch andere Befehle weiterzuleiten.
stdin, hat die Nummer 0 (Meistens Tastatureingaben)
stdout, hat die Nummer 1 (Ausgaben am Bildschirm
stderr, hat die Nummer 2 (Ausgabe am Bildschirm für Errors)\
Einlesen mit <
# Entferne alle Doppelpunkte
tr -d ":" < dateiliste.txt
# Mail mit Eingabe verschicken
mail chef@blabla.com < datei.txt
Umleiten mit >. So wird auf dem Bildschirm nichts angezeigt. Mit tee Lässt sich die Ausgabe kopieren.
ls -la | tee ausgabe.txt
Wenn nicht nur stdout sondern auch stderr umgeleitet werden soll, zuerst 2> für stderr und dann 1> für stdout angeben:
find <irgendwas> 2> error.txt 1> find.txt
Wenn stderr und stdout zusammen in die gleiche Datei geschrieben werden sollen:
find / -name ".bash*" 1> find.txt 2>&1
Mit >> wird an die Datei angehängt, nicht neu erstellt.
Weiterleiten an neuen Befehl mit |.
# Sortiere die Prozess-Liste nach Prozess-ID rückwärts
ps aux | sort -nr
# Textdatei sortieren und duplikate entfernen
cat kontaktliste.txt | sort | uniq
cat hallo.txt | wc | cat >> hallo.txt (sending the output of hallo.txt to wc. output of wc is then appended to hallo.txt)
sort/duplicates
sort hello.txt
cat hello.txt | sort > sorted-hello.txt
uniq hello.txt (read file without duplicate lines)
sort deserts.txt | uniq (sort without duplicates)
search text in files
grep -irno "h1"
grep -irn "h1" /home/user/verzeichnis-abc
grep -irn "h1" --include \*.ps1 --include \*.txt
grep -irn "h1" --include \*.ps1 --include \*.txt /home/user/verzeichnis-abc
stream editor (search and replace
sed 's/snow/rain/g' forests.txt (replaces all "snow" with "rain")
Disable stout stderr
Example: umount /mnt/data > /dev/null 2>&1
stdout und stderr verschwinden in dev/null. zuerst stdout, und stderr wird weitergeleitet an stdout.
User and Environment
Befehl als anderen Benutzer ausführen
sudo -u www-data whoami
Benutzer wechseln
sudo -u benutzername bash
Oder allenfalls besser:
sudo su - benutzername
liste aller User
Enthält Informationen zu den Benutzerkonten. Das PW wäre dort wo am anfang das x steht (noch aus früheren Zeiten, ist jetzt in /etc/shadow verschlüsselt drin.
cat /etc/passwd
oder alle "normale" user:
getent passwd {1000..60000}
show all users with groups
grep ubuntu /etc/group
User passwörter
verschlüsselte Informationen zu den Benutzerkonten
sudo cat /etc/shadow|sort
info zum aktuellen user
w
who
add to group
# add to sudo group (with sudo-rights)
usermod -aG sudo/wheel <username>
# group sudo for DEBIAN, group wheel in BSD/RHEL
# add to another group, like docker
sudo usermod -aG docker <username>
# activate changes
newgrp docker
don't let wheel members let change root password
visudo -f /etc/sudoers
#Change from:
%wheel ALL=(ALL) TO ALL, !/usr/bin/passwd root
systemctl restart sshd
get all sudoer users
getent group sudo | cut -d: -f4
# or
grep -Po '^sudo.+:\K.*$' /etc/group
Benutzer löschen
deluser username
Benutzer/Gruppe setzen
chown -R www-data:www-data /var/www
Passwort ändern
sudo passwd root
sudo passwd <username>
bash profile
~/.bash_profile (OSX) or ~/.bashrc (Linux) is the name of file used to store environment settings. It is commonly called the “bash profile”. When a session starts, it will load the contents of the bash profile before executing commands.
* open file:
$ nano ~/.bash_profile
* edit:
$ echo "Welcome, Roger"
$ alias pd="pwd"
$ alias ll="ls -la"
$ export USER="Roger Rutishauser" (environment variable USER, can be echoed by "echo $USER"
$ export PS1=">> " (changes $ in console to >> )
* activate
$ source ~/.bashrc (activates the changes in ~/.bashrc for the current session)
environment variables
env (lists all environment variables)
echo $PATH *ODER* env | grep PATH (lists which directories contain scripts)
echo $HOME (echoes path of home directory)
environment variables: set
$ sudo vi /etc/bash.bashrc
JAVA_HOME=/opt/jdk/jdk8u282-b08-jre
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
$ source /etc/profile
Hardware Informationen
lscpu # CPU Informationen
free -h # Memory
Datenträger, Verzeichnisstruktur
Angeschlossene Festplatten und Wechseldatenträger inkl. der Partitionen anzeigen
cat /proc/partitions
Nur Festplatten, ohne Partitionen
sed -ne 's/.*\([sh]d[a-zA-Z]\+$\)/\/dev\/\1/p' /proc/partitions
Nur Partitionen, ohne Festplatten
sed -ne 's/.*\([sh]d[a-zA-Z]\+[0-9]\+$\)/\/dev\/\1/p' /proc/partitions
als Liste:
sudo blkid -o list -w /dev/null
Verzeichnis und Partitionen Baum
lsblk
LVM (Logical Volume Manager
Mehr Infos unter [https://www.digitalocean.com/community/tutorials/an-introduction-to-lvm-concepts-terminology-and-operations]
Harddisk vergrössert, dann auf Ubuntu vergrössern: https://fabianlee.org/2016/07/26/ubuntu-extending-a-virtualized-disk-when-using-lvm/
Daemon
Definition
- A process which runs in the background and is not interactive.
- They have no controlling terminal on their own from the user’s perspective from the desktop.
- They continue to exist and operate regardless of any user being logged into the server if the computer is on.
- In Windows, daemons are called services
Start Service
systemctl start mysql
# or on older ubuntu versions or on WSL:
service mysql start
Prozesse
Definition
An instance of a particular executable that is being executed.
For example this could be an .exe program file or a Linux binary. A given application may have several processes running simultaneously.
Typically, an executing program can exist in one of three states:
- Running: Active
- Sleeping: Inactive
- Zombie: A process that has completed execution, but still has an entry in the process table
Zeige Prozesse
ps aux zeigt alle laufenden Prozesse aller Benutzer an. Da sieht man u.a. den ausführend User und die CPU/Memory Auslastung. Zur Unterscheidung der Prozesse dient TTY und COMMAND.
TTY mit ? sind Daemon-Prozesse. Wenn das Command mit [k startet, ist es ein Kernel-Thread-Prozess.
tty1 ist Terminal
pts/0 ist ein User..
Beispiel:
[rogrut@rr ~]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 193808 6892 ? Ss 17:01 0:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 17:01 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 17:01 0:00 [kworker/0:0H]
root 87 0.0 0.0 0 0 ? S 17:01 0:00 [kworker/1:1]
root 125 0.0 0.0 0 0 ? S 17:01 0:00 [kauditd]
root 319 0.0 0.0 0 0 ? S< 17:01 0:00 [ext4-rsv-conver]
root 405 0.0 0.0 39060 4660 ? Ss 17:01 0:00 /usr/lib/systemd/systemd-journald
root 414 0.0 0.0 0 0 ? S 17:01 0:00 [kworker/3:2]
root 436 0.0 0.0 48364 4804 ? Ss 17:01 0:00 /usr/lib/systemd/systemd-udevd
root 524 0.0 0.0 0 0 ? S 17:01 0:00 [kworker/5:2]
root 527 0.0 0.0 0 0 ? S< 17:01 0:00 [kworker/0:1H]
root 535 0.0 0.0 0 0 ? S 17:01 0:00 [jbd2/sda2-8]
root 536 0.0 0.0 0 0 ? S< 17:01 0:00 [ext4-rsv-conver]
root 557 0.0 0.0 55532 860 ? S<sl 17:01 0:00 /sbin/auditd
root 581 0.0 0.0 26384 1736 ? Ss 17:01 0:00 /usr/lib/systemd/systemd-logind
root 582 0.0 0.0 44168 2052 ? Ss 17:01 0:00 /usr/bin/qemu-ga --method=virtio-serial --path=/dev/virtio-ports/org.qem
polkitd 586 0.0 0.1 613016 12960 ? Ssl 17:01 0:00 /usr/lib/polkit-1/polkitd --no-debug
root 587 0.0 0.0 21676 1280 ? Ss 17:01 0:00 /usr/sbin/irqbalance --foreground
dbus 588 0.0 0.0 66452 2584 ? Ssl 17:01 0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --
chrony 593 0.0 0.0 117808 1708 ? S 17:01 0:00 /usr/sbin/chronyd
root 607 0.0 0.0 126392 1668 ? Ss 17:01 0:00 /usr/sbin/crond -n
root 613 0.0 0.0 110208 860 tty1 Ss+ 17:01 0:00 /sbin/agetty --noclear tty1 linux
root 615 0.0 0.3 358740 29532 ? Ssl 17:01 0:00 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
root 617 0.1 0.1 476516 8772 ? Ssl 17:02 0:04 /usr/sbin/NetworkManager --no-daemon
root 926 0.0 0.2 574292 17476 ? Ssl 17:02 0:00 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root 927 0.0 0.0 113000 4368 ? Ss 17:02 0:00 /usr/sbin/sshd -D
root 928 0.0 0.1 226720 8316 ? Ssl 17:02 0:00 /usr/sbin/rsyslogd -n
root 1480 0.0 0.0 89804 2136 ? Ss 17:02 0:00 /usr/libexec/postfix/master -w
postfix 1482 0.0 0.0 89908 4096 ? S 17:02 0:00 pickup -l -t unix -u
postfix 1483 0.0 0.0 89976 4112 ? S 17:02 0:00 qmgr -l -t unix -u
root 2253 0.0 0.0 0 0 ? S< 17:02 0:00 [kworker/5:1H]
root 7650 0.0 0.0 156860 5668 ? Ss 17:09 0:00 sshd: rogrut [priv]
root 7654 0.0 0.0 156860 5528 ? Ss 17:09 0:00 sshd: rogrut [priv]
rogrut 7656 0.0 0.0 157184 2816 ? D 17:09 0:01 sshd: rogrut@pts/0
rogrut 7657 0.0 0.0 115548 2084 pts/0 Ss 17:09 0:00 -bash
rogrut 7676 0.1 0.0 113420 1676 ? Ss 17:09 0:02 bash -c while true; do sleep 1;head -v -n 8 /proc/meminfo; head -v -n 2
rogrut 7688 0.0 0.0 156860 2420 ? S 17:09 0:00 sshd: rogrut@notty
rogrut 7689 0.0 0.0 72348 2700 ? Ss 17:09 0:00 /usr/libexec/openssh/sftp-server
root 12168 0.0 0.0 0 0 ? S 17:22 0:00 [kworker/0:1]
root 20626 0.0 0.0 113000 4304 ? Ss 17:44 0:00 sshd: [accepted]
sshd 21379 0.0 0.0 113000 2220 ? S 17:46 0:00 sshd: [net]
root 21399 0.0 0.0 158884 5280 ? Ss 17:46 0:00 sshd: root [priv]
sshd 21400 0.0 0.0 113000 2480 ? S 17:46 0:00 sshd: root [net]
root 21401 0.0 0.0 113000 4480 ? Ss 17:46 0:00 sshd: [accepted]
sshd 21402 0.0 0.0 113000 2220 ? S 17:46 0:00 sshd: [net]
rogrut 21409 0.0 0.0 108056 356 ? S 17:46 0:00 sleep 1
rogrut 21410 0.0 0.0 155452 1872 pts/0 R+ 17:46 0:00 ps aux
Die PIDs sind dann in Ordnern unter /proc. Ausserdem ist in unter /proc Infos zu Prozessor, etc. drin.
Zeige Prozesse (übersichtlicher)
ps ax -o user,pid,group,supgrp,command | sort
Zeige Java Prozesse
ps aux | grep -i java
Befehl im Hintergrund laufen lassen
Damit Verbindung zum Server unterbrochen werden kann.
- Irgend ein Befehl ausführen, z.B.
sudo find /mnt/data/fedora-data -not -user tomcat8 > ~/checkOwnObj.log 2>&1 - CTRL-Z
bgjobsdisown %1jobsps aux | grep find- falls CTRL-Z schiefläuft, vor den Befehl
nohupund ans Ende&schreiben. Dann enter drücken und ps aux...nohup bash -c 'php symfony csv:import --rows-until-update=10 /home/mikeymouse/export-archival-descriptions-20210906_rsi.csv && php symfony csv:import --rows-until-update=10 /home/mikeymouse/export-archival-descriptions-20210906_rtr.csv && php symfony csv:import --rows-until-update=10 /home/mikeymouse/export-archival-descriptions-20210906_rts.csv && php symfony csv:import --rows-until-update=10 /home/mikeymouse/export-archival-descriptions-20210906_swissinfo.csv && php symfony csv:import --rows-until-update=10 --skip-nested-set-build /home/mikeymouse/export-archival-descriptions-20210906_srf.csv && php symfony propel:build-nested-set && php symfony cc && sudo -u www-data php symfony search:populate && systemctl restart memcached.service' &
Output (stdout) von Prozess anzeigen
tail -f /proc/{PID}/fd/1
Die PID findet man über ps aux heraus, zweite Spalte.
PID von Prozess anzeigen
# zeigt die laufenden Prozesse an:
ls /run/
Netzwerk/SSH/Ports
siehe https://gitlab.com/delta-centauri/tbz-cloudnative/-/tree/main/SSH
Zeiteinstellungen
Anzeige
timedatectl
Local time: Wed 2023-12-20 18:25:59 CET
Universal time: Wed 2023-12-20 17:25:59 UTC
RTC time: Wed 2023-12-20 17:25:59
Time zone: Europe/Zurich (CET, +0100)
System clock synchronized: yes
NTP service: inactive
RTC in local TZ: no
Zeitangabe kurz
date
Zeitangabe kurz UTC
date -c
Zeit neu stellen
date -s 18:00
Hardware clock (von UEFI)
hwclock
2023-12-20 18:29:16.963145+01:00
Uhrzeit von Linux übernehmen von hardware clock:
hwclock -s
Zeitzone setzen
timedatectl set-timezone "Europe/Zurich"
Zeit von Internet benutzen
sudo apt install chrony
systemctl start chronyd.service
systemctl enable chronyd.service
vi /etc/chrony.conf
Manpages
Ab und zu wenn Programme gelöscht oder hinzugefügt werden müssen, muss man die ManDB wieder aktualisieren:
mandb
Befehl in manpages nachschlagen
man ls
Suche in manpages
man -k <suchbegriff>
#oder
man apropos <suchbegriff>
Tools
TAR
Packen
tar -cvzf ants.tar.gz <source_file_directory>
Entpacken
#.tar.gz
tar -xvzf NAMEDERDATEI.tar.gz
#.tar
tar -xvf file_name.tar
# Or to extract to another directory:
tar -C /myfolder -xvf file_name.tar
# only 1 or more files from archive:
tar -xvf <tar_archive> <filename_1> <filename_2> <direcotry_1>
UNZIP
unzip filename.zip
Falls Probleme auf Ubuntu mit einem ZIP, welches in Windows erstellt wurde:
Auf Windows in CMD ausführen, um Code Page zu erhalten: chcp
Bsp. 65001
Die Nummer dann verwenden für den Befehl:
unzip -O CP65001 'C-II-B2-5-02-2-4_Kita Rägeboge Weisslingen.zip'
Cron
- cron reads
/etc/crontab, which is predefined to run programs under/etc/cron.hourly,/etc/cron.daily,/etc/cron.weeklyand/etc/cron.monthly. - the files in
/etc/cron.dare also read by cron. they are mainly crontab files that start tasks somewhere, but must also specify the username. - these files must conform to the same naming convention as used by run-parts(8): they must consist solely of upper- and lower-case letters, digits, underscores, and hyphens.
- In general, the system administrator should not use
/etc/cron.d/, but use the standard system crontab/etc/crontab. /etc/crontaband the files in/etc/cron.dmust be owned by root, and must not be group- or other-writable.- the files under
/etc/cron.dor the files under/etc/cron.hourly,/etc/cron.daily,/etc/cron.weeklyand/etc/cron.monthlymay also be symlinks, provided that both the symlink and the file it points to are owned by root. - The files under
/etc/cron.ddo not need to be executable, while the files under/etc/cron.hourly,/etc/cron.daily,/etc/cron.weeklyand/etc/cron.monthlydo. - cron then wakes up every minute, examining all stored crontabs, checking each command to see if it should be run in the current minute. When executing commands, any output is mailed to the owner of the crontab (or to the user named in the
MAILTOenvironment variable in the crontab, if such exists).- cron need not be restarted whenever a crontab file is modified.
- scripts in
/usr/local/sbin