#title Linux Utils Cheatsheet #author Stefan Hornburg (Racke) #topics find; linux; rsync; lftp; gpg; sort; date; lsof; GnuPG #lang en ** Finding files with =find= *** Remove files by modification date This example shows how to remove all files with a modification date before 2016: find -type f -not -newermt 20160101 | xargs rm *** Move old files to another directory This example shows how to move a large number of files to another directory: find /var/www/userpics -name '*.jpg' -mtime +31 -print0 | xargs --null mv --target-directory=/backup/oldpics/ *** Find files by permission Exact permission (read,write,execute for owner only): {{{ find -perm 700 }}} *** Find large files {{{ $ du -sh -t 20M $(find /tmp/ -type f) 30M /tmp/OF0dXjBgX3/0207.zip 56M /tmp/lYZNO1PD09/0703.zip 29M /tmp/aF_jPhgvwD/0307.zip }}} ** Use =cat= *** Show file contents {{{ $ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" NAME="Debian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" }}} This file should be present on any modern Linux distribution. *** Show whitespace {{{ $ cat -vet }}} ** Use =sed= *** Remove lines from output Remove single line: {{{ $ sed '1d' file }}} Remove range of lines: {{{ $ sed '1,5d' file }}} *** Extract lines Extract a single line for a file: {{{ $ sed '123q;d' file }}} The =q= stops processing the file when the line is reached. If you want to see a couple of lines from a CSV alongside with the header: {{{ $ sed -n -e '1p' -e '809,820p' my.csv }}} ** Sort lines with =sort= Sort by a column: {{{ ~# sort -k 1 myfile }}} Sort numeric: {{{ ~# sort -n myfile }}} Sort reverse: {{{ ~# sort -r myfile }}} ** Using =date= Display date a month ago: {{{ ~# date -d "-1 month" +%Y-%m-%d }}} It automatically adjusts the day if the resulting date would be invalid. Set time: {{{ ~# date +%T -s "12:12:00" }}} *** Epoch Convert epoch to a date: {{{ $ date +"%s" 1626247585 }}} Convert date to epoch: {{{ $ date -d @1626247585 Wed 14 Jul 09:26:25 CEST 2021 }}} ** Using =rsync= *** Copy files instead of symlinks {{{ rsync -L /etc/letsencrypt/live/wildcard.linuxia.de/*.pem root@extern.linuxia.de:/etc/letsencrypt/live/wildcard.linuxia.de/. }}} *** Sync only files with a certain extension from one directory tree to another rsync -av --include="*/" --include='*.status' --exclude='*' /samba/. . ** Using =ip= *** Show network interfaces {{{ $ ip -a }}} *** Add IP address {{{ $ sudo ip a add 192.168.36.11/24 dev eth0 }}} ** Using =lsof= *** Open files #lsofopenfiles Show open files in a directory: {{{ $ lsof /mnt/backup ... }}} *** Network connections #lsofnetconns {{{ $ lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 431729 root 6u IPv4 7170923 0t0 TCP *:http (LISTEN) nginx 431729 root 7u IPv6 7170924 0t0 TCP *:http (LISTEN) nginx 431730 www-data 6u IPv4 7170923 0t0 TCP *:http (LISTEN) nginx 431730 www-data 7u IPv6 7170924 0t0 TCP *:http (LISTEN) }}} It works with service as well, e.g. =lsof -i:ntp=. *** See also [[https://danielmiessler.com/study/lsof/][An lsof Primer]] ** Using =lftp= *** Mirroring Mirror from remote FTP server to local server {{{ mirror -c source target }}} Please note that doesn't mirror dot files like =.htaccess=. To include these, adjust the default listing options: {{{ set ftp:list-options -a }}} *** SSL In case you really need to disable SSL (**not recommended**), use the following command: {{{ set ftp:ssl-allow false }}} ** Using =curl= Display the headers: {{{ $ curl --head https://example.org }}} Skip certificate check: {{{ # Shortcut: -k $ curl --insecure https://example.org }}} Connect without DNS: {{{ $ curl https://example.org --connect-to example.org:93.184.216.34 }}} ** Using =wget= Display the headers: {{{ $ wget --server-response https://example.org }}} ** Using =convert= *** Combine images into a PDF file {{{ $ convert 20220518_1450*.jpg photos.pdf }}} *** Convert SVG file to PNG with transparency {{{ $ convert -background none image.svg image.png }}} ** Using =zip= *** Create password protected archive {{{ $ zip -e sccl2.zip sccl2_2.9-4_all.deb sccl2-2.9-4.noarch.rpm Enter password: Verify password: adding: sccl2_2.9-4_all.deb (deflated 0%) adding: sccl2-2.9-4.noarch.rpm (deflated 26%) }}} ** Encryption with GnuPG *** Environment variables **** GNUPGHOME Select alternative home directory for GPG configuration and keys: {{{ export GNUPGHOME=~/.gnupg-old/ }}}