====== How-tos (Some useful Linux tips) ====== ===== Multimedias - Conversions ===== ==== Convert Wav to Flac ==== Convert all wav files to flac files in a folder for i in *.wav; do ffmpeg -i "$i" "$i".flac ; done ==== Convert Flac to Mp3 files ==== for f in *.flac; do flac -cd "$f" | lame -b 320 - "${f%.*}".mp3; done ==== Compress all mp4 videos in a folder ==== for i in *.mp4; do ffmpeg -i "$i" -vcodec libx265 -crf 28 "${i%.*}_compressed.mp4"; done ==== Compress all mov videos in a folder ==== for i in *.mov; do ffmpeg -i "$i" -vcodec libx265 -crf 28 "${i%.*}_compressed.mp4"; done ==== Convert HEIC images to jpg ==== sudo apt install libheif-examples for file in *.heic; do heif-convert "$file" "${file/%.heic/.jpg}"; done ==== Pick a random file with Totem ==== totem "$(ls -R | shuf -n1)" ==== Compress PDF files ==== gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default \ -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages \ -dCompressFonts=true -r150 -sOutputFile=output.pdf input.pdf ==== If Totem can't read some mkv or mp4 vidéo ==== After upgrading to Ubuntu 22.04 I had some issue to read some video files (Totem crash at startup, display the error "The specified movie could not be found" or open the video with a strange format. I did install the Intel non-free drivers to solve this issue: sudo apt install intel-media-va-driver-non-free ubuntu-restricted-extras ===== Files ===== ==== Remove files recursively ==== # remove lrc files find -type f -name "*.lrc" -delete # remove .DS_Store files find -type f -name ".DS_Store" -delete ==== Remove duplicate files ==== fdupes -rdN . ==== Uncompress .tar.gz file ==== tar -zxvf file.tar.gz ==== Uncompress .tar.bz2 file ==== tar -xvjf file.tar.bz2 ==== Remove empty folders ==== find . -type d -delete ==== Search .Mp3 files ==== find . -iname "*.mp3" -print ===== Network ===== ==== Download test ==== curl -4 -o /dev/null http://bouygues.testdebit.info/100M.iso ==== Upload test ==== curl -o /tmp/temp.iso https://bouygues.testdebit.info/100M.iso curl -4 -o /dev/null -F "filecontent=@/tmp/temp.iso" http://bouygues.testdebit.info ==== Display public IP address ==== host myip.opendns.com resolver1.opendns.com ==== Open ports connexions ==== sudo netstat -antp ==== Connected users list ==== who ==== Disconnect a user ==== sudo slay user_name ==== Firewall - Status ==== sudo ufw status verbose ==== Trafic - bandwidth utilisation ==== sudo iftop -i enp9s0 ==== SSH - Launch X application over SSH ==== ssh user@host -XC application ==== FTP - Add user ==== ftpasswd --passwd --name=bob --uid=1001 --home=/home/bob --shell=/bin/false ==== NcFTP - connection ==== ncftp -u username -p apssword ftp://ftpperso.free.fr/dir/ ==== NcFTP - folder copy ==== sudo ncftpput -R -u username ftpperso.free.fr / /dir_to_copy/* ===== Hardware ===== ==== Component list ==== sudo lshw | more ==== Getting SMBIOS data from sysfs==== sudo dmidecode ==== CPU information ==== sudo lscpu ==== Battery information ==== upower -i /org/freedesktop/UPower/devices/battery_BAT0 ==== Check Wifi signal ==== wavemon ===== System ===== ==== Monitor ==== sudo glances --enable-plugin sensors ==== CPU frequency ==== cpufreq-info ==== CPU Over temperatures Log occurrences ==== sudo journalctl --since "2023-01-01" | grep temperature ==== Power Usage ==== sudo powertop ==== Security: detect signs of rootkits==== sudo chkrootkit ===== Hard-drive ===== ==== Folders/files usage ==== sudo gt5 ==== Disk - Free space on /boot partition ==== //check current kernel uname -r //check if list of old kernels is correct dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' //purge old kernels dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge ==== SMART information ==== sudo smartctl -A /dev/sda ==== Set HD to low power consumption standby mode ==== sudo hdparm -y /dev/sdb ==== Hard drive current state ==== sudo hdparm -C /dev/sdb ==== Hard drive current Advanced Power Management (APM) value ==== sudo hdparm -B /dev/sdb ==== Change APM value ==== 60 = 5x60 = (5 minutes) sudo hdparm -B60 /dev/sdb ===== Fstab ===== Install cifs/nfs sudo apt install nfs-common sudo apt install cifs-utils ===== Install DCP-7055W scan driver ===== brsaneconfig4 -a name=(name your device) model=(model name) ip=xx.xx.xx.xx https://support.brother.com/g/b/downloadhowto.aspx?c=us_ot&lang=en&prod=dcp7055w_us_eu_as&os=128&dlid=dlf006645_000&flang=4&type3=566 ===== Fail2ban ===== Get SSH banned IP fail2ban-client status sshd ===== Nginx ===== ==== GoAccess - Log statistics (terminal) ==== * Live statistics tail -f access.log | goaccess - * Using single log file goaccess access.log * Using all log files (including .gz files) zcat -f access.log* | goaccess - * Date ranges sed -n '/'$(date '+%d\/%b\/%Y' -d 'last week')'/,$ p' access.log | goaccess -a - sed -n '/'$(date '+%d\/%b\/%Y' -d 'last month')'/,$ p' access.log | goaccess -a - sed -n '/'$(date '+%d\/%b\/%Y' -d '1 month ago')'/,$ p' access.log | goaccess -a - sed -n '/'$(date '+%d\/%b\/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a - sed -n '/'$(date '+%d\/%b\/%Y' -d 'yesterday')'/,$ p' access.log | goaccess -a - sed -n '/'$(date '+%d\/%b\/%Y' -d 'today')'/,$ p' access.log | goaccess -a - ==== GoAccess - Log statistics (dynamic HTML page) ==== goaccess access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html ==== Count pages sorted by response code ==== awk '{print $9}' access.log | sort | uniq -c | sort -rn ==== Count 404 respond code ==== cd /var/log/nginx/ awk '($9 ~ /404/)' access.log | awk '{print $7}' | sort | uniq -c | sort -rn ==== Hotlink ==== awk -F\" '($2 ~ /\.(jpg|gif)/ && $4 !~ /^https:\/\/eolienne\.f4jr\.org/){print $4}' access.log | sort | uniq -c | sort ==== List of 20 most connected IP address (since a date) ==== awk '/Jan\/2024/ {print $1};' access.log | sort | uniq -c | sort -rn | head -20 ==== Top 10 IP address sort by bandwidth utilization ==== awk 'BEGIN{ PROCINFO["sorted_in"]="@val_num_desc" } { a[$1]++; b[$1]+=$10 } END{ for(i in a) { if(++c>10) break; printf "IP: %s: ",i ; system(sprintf("numfmt --to=iec-i %s",b[i])) ; } }' access.log ===== MySQL ===== ==== Secure ==== sudo /usr/bin/mysql_secure_installation ==== Create backup user ==== sudo mysql -uroot -p GRANT LOCK TABLES, SELECT, RELOAD ON *.* TO 'backup'@'localhost' IDENTIFIED BY 'PASSWORD'; ==== Password for backup ==== /etc/mysql/conf.d/mysqldump.cnf ==== Create database ==== mysql -p -u root CREATE DATABASE db_name; GRANT ALL PRIVILEGES ON db_name.* TO 'db_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; ==== Connect to database ==== mysql -p -u root -D db_name ==== Show tables ==== SHOW TABLES ; ===== AirPlay ===== ==== Pulse Audio ==== Installation of Airplay in Ubuntu 22.04 with Pulse Audio * https://bugs.launchpad.net/ubuntu/+source/paprefs/+bug/1871899?comments=all # Airplay ability sudo apt install pulseaudio build-essential paprefs git pulseaudio-module-raop intltool libjack0 pavucontrol pulseaudio-module-zeroconf #bug pulseaudio sudo ln -s /usr/lib/pulse-16.1+dfsg1/ /usr/lib/pulse-16.1 pactl load-module module-raop-discover ==== PipeWire ==== Discover Airplay in Ubuntu 22.10 with PipeWire sudo vi /etc/pipewire/pipewire.conf Add the following line to load module inside the //context.modules = [// section { name = libpipewire-module-raop-discover } ==== HandBrake ==== sudo apt install libdvdnav4 libdvdread4 gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly libdvd-pkg sudo dpkg-reconfigure libdvd-pkg sudo apt install ubuntu-restricted-extras ===== Pi-hole ===== ==== Upgrade ==== pihole -up ===== Gnome ===== Move the Dock 'Show Applications' button at top gsettings set org.gnome.shell.extensions.dash-to-dock show-apps-at-top true Move the windows control button to the left gsettings set org.gnome.desktop.wm.preferences button-layout 'close,minimize,maximize:' ===== Synology ===== ==== Edit Synology IP Block list ==== Remove an IP address in case your IP address has been blocked by DSM firewall (Error message "IP Address blocked due to too many failed login attempts") Login to your NAS using SSH with an admin group account ssh user@192.168.x.x -p port_number Once connected, get the root rights entering your password sudo -i Now remove the blocker IP address from the database cd /etc sqlite3 synoautoblock.db sqlite> delete from AutoBlockIP where IP ="x.x.x.x"; ===== Nice projects ===== * Raspberry Pi : https://www.raspberrypi.org/ - Tiny computer * Pi-Hole : https://pi-hole.net - Ad blocking using DNS - With [[https://github.com/pi-hole/pi-hole/wiki/DNSCrypt-2.0|DNSCrypt-Proxy]] * Firefox : https://www.mozilla.org/en-US/firefox/new/ - The Web Browser * Bitwarden : https://bitwarden.com/open-source/ - Password manager * MoodeAudio : http://www.moodeaudio.org/ - Audiophile-quality music playback * HifiBerry : https://www.hifiberry.com/ - Audio additional boards for Rpi * OpenHAB : https://www.openhab.org/ - Smart Home * DD-WRT : https://dd-wrt.com/ - Free your router * Ubuntu : https://ubuntu.com/ - Linux distribution * Shelly : https://www.shelly.com/en-fr - Smart Home Automation * Nicotine+ : https://nicotine-plus.org/ - Soulseek is not dead * Kodi : https://kodi.tv/ - Media Centre * NGINX : https://www.nginx.com/ - Web Server * Amplify : https://amplify.nginx.com - Web Server Monitoring * VideoLAN : https://www.videolan.org/ - Powerful media player * Waze : https://www.waze.com/ - GPS