Tips and Tricks

Contents

Useful commands

Recursively set directory permissions to 755

# find /var/www/path -type d -print0 | xargs -0 chmod -c 755

Recursively rename directory and files from ISO-8859-15 to UTF-8

$ convmv -f iso-8859-15 -t utf8 -r /var/www/path --preserve-mtimes --notest

Recursively search for files of a specitic type, e.g. documents and list them

$ find . -regex '.*\(pdf\|doc\)'

User: Change a users home directory

# usermod -d /home/newhome user

Strip comments from config file

$ grep -v "#" file.conf

rsync file transfer

Synchronise a directory or whole partition:

# rsync -av --delete-before /run/media/user/4TB-WD/ /run/media/user/4TB-WD-BCK/ --exclude="/lost+found/" --dry-run

Upload a file to a remote server via rsync over ssh:

# rsync --partial --progress movie.mkv root@example.com:/var/www/subdomain.example.com/htdocs/movies/movie.mkv

SCP file transfer

File transfer via commandline.

Upload file:

# scp /root/htdocsbackup.tar.bz2 root@remote-host.de:/root/

Download file:

# scp root@remote-host.de:/root/htdocsbackup.tar.bz2 /root/htdocsbackup.tar.bz2

Upload directory:

# scp -p -r /root/directory root@remote-host.de:/root

Download directory:

# scp -p -r root@remote-host.de:/root/directory /root

SSH tunnel

Very useful if the server you want to connect to has only the SSH port open and/or a firewall infront and you want to access for example a tomcat server running on port 8080.

# ssh -N -i /home/<user>/.ssh/id_dsa -L 7777:remote-host.de:8080 root@remote-host.de

After establishing the tunnel you can access the tomcat server of the remote machine port 8080 at your localhost port 7777.

Generate SSH Host Keys

# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N
# ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N

SSL: Remove passphrase from a SSL key

$ openssl rsa -in ssl_with_passphrase.key -out ssl_without_passphrase.key

SSL: Add/change passphrase to/from a SSL key

$ openssl rsa -in ssl_without_passphrase.key -out ssl_with_passphrase.key -des3

Perl: List included perl core modules with their versions

$ corelist -v 5.22.1

Postfix: Show mailqueue

# mailq

Postfix: Attempt to deliver all queued mail

# postqueue -f

Postfix: Delete a single mail from queue

# postsuper -d id_of_mail

Postfix: Delete all mails with a specific sender from queue

# mailq | tail -n +2 | awk 'BEGIN { RS = "" } / apache@example\.com$/ { print $1 } ' | tr -d '*!' | postsuper -d -

ImageMagick: Combine images side by side

$ convert image{1,2,3}.png +append output.png

Safely spin down external USB drive AFTER unmounting using sg3_utils

# sg_start --readonly --stop /dev/sdX

Delete content in the underlying directory of a mounted filesystem without having to unmount first

Bind mount root to a temporary mount point, e.g. /mnt/temp. Useful to fix. e.g. following systemd informational notice:

tmp.mount: Directory /tmp to mount over is not empty, mounting anyway.

# mount --bind / /mnt/temp

Browse to /mnt/temp/yourmountpoint and be able to delete the files, afterwards unmount /mnt/temp again.

eyeD3: Remove a specific ID3 tag frame

$ eyeD3 file.mp3 --remove-frame=TPE2

Ghostscript: Split a PDF file in single files per page using a python script

#!/usr/bin/python3

import os

number_of_pages = 10
input_pdf = "file.pdf"

for i in range(1, number_of_pages +1):
    os.system("gs -q -dBATCH -dNOPAUSE -sOutputFile=page{page:04d}.pdf -dFirstPage={page} -dLastPage={page} -sDEVICE=pdfwrite {input_pdf}".format(page=i, input_pdf=input_pdf) )

Ghostscript: Merge multiple PDF files

$ gs -dBATCH -dNOPAUSE -dQUIET -sDEVICE=pdfwrite -sOutputFile=merged.pdf file1.pdf file2.pdf file3.pdf

Alternativly use poppler (which removes metadata)

$ pdfunite file1.pdf file2.pdf file3.pdf merged.pdf

Change the Dolphin standard view to detailed view for ALL folders =

Open Dolphin -> Settings > Configure Dolphin -> Views -> Common Tab -> and mark -> Use the same view for all folders

Disable IPv6 until the next reboot

# echo 1 > /proc/sys/net/ipv6/conf/<iface>/disable_ipv6

Stream a video via VLC to Chromecast

$ vlc --sout="#chromecast{ip=xxx.xxx.xxx.xxx}" ~/video.mkv

Summary of the top 15 directories occupying the most hard disc space

$ du -cksh * | sort -hr | head -n 15

Package management (Portage)

To which package belongs file X

# equery belongs -f <dateiname>

Which installed packages have USE-Flag X

# equery hasuse <useflag>

Backup an installed package

# quickpkg net-www/apache

After this you can install the package on another machine or do a fast downgrade if something went bad after an update. You can find the file under /usr/portage/packages/All and in this example a symlink to the apache file in /usr/portage/packages/net-www. To install the now precompiled binary use:

# emerge --usepkgonly "<net-www/apache-2.2.4"

Detect and get rid of leftover packages

# emerge depclean --pretend

Change your current profile

# emerge eselect
# eselect profile list
# eselect profile set <nummer>