|
Linux Spiekbriefje
Mijn Linux spiekbriefje met belangrijke maar niet vaak gebruikte
commando's...
Scripts
etc
Bash
Wat heb ik ook al weer in mijn .bashrc
staan? History control, kleuren, aliases, ... Zie natuurlijk ook het Bash
reference manual. .bashrc wordt uitgevoerd bij
opstarten van iedere terminal; .bash_logout bij uitloggen
(eenmalig?).
Wat was ook al weer de sh/bash syntax voor loops en zo? Voorbeeld:
for element in aap noot mies; do echo $element; done
if [ $? -eq 0 ]; then echo "OK $(date)"; fi
if /bin/ps -A | /bin/grep motion >/dev/null 2>&1
if [ -f $CONFIG ] && grep "^chkdsk=yes" $CONFIG > /dev/null
cnt=`expr $cnt + 1`
curtick=$(( (10#`date +%M`%$interval)*60+10#`date +%S` )); # bash only
En dan de prompt... Kan je zetten met PS1, de standaard
waarde voor Ubuntu is:
PS1='\[\e]0;\u@\h:
\w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Tussen \[ en ] is een ANSI escape sequence, \e
is de ESC. \[\e0;xxxxx] zet de titel van het scherm.
Achtergrondkleur zou je op groen kunnen zetten door \[\e[42m\]
toe te voegen, soms handig om terminals een andere kleur te geven
(bijvoorbeeld als je met screen
werkt). Meer info: bash, Wikipedia, ANSI sequences.
Perl
Hoe laad ik een missende module in Perl? Grote kans dat er in Ubuntu al
een module voor is, voor welk geval je in de apt cache moet
zoeken. Bijvoorbeeld voor de module MIME::lite kan dit met sudo
apt-cache search perl mime::lite, dit gaf als resultaat libmime-lite-perl
wat je vervolgens met sudo apt-get install libmime-lite-perl
kan laden. Een andere methode is om de module direct van CPAN
(Comprehensive Perl Archive Network) te halen, zie How
To Install Perl Modules, had ik nodig voor Digest::SHA1 (sudo
su --> perl -MCPAN -e shell --> install
Digest::SHA1)
User
interface prompting
Even nog zonder uitleg:
gdialog
--msgbox "hallo" 6 20
ping `zenity
--title "Select Host" --entry --text "Select host you like to ping"`
Workarounds
Skype en inkskape moeten wat afwijkend worden opgestart, om mijn webcam
resp. de drukgevoeligheid
van mijn Wacom tablet goed af te handelen; ik heb de desktop files
aangepast (bijvoorbeeld sudo gedit
/usr/share/applications/skype.desktop ) zodat ze vanuit de dash
goed starten, pas de regel met 'Exec' aan (eerste regel voor
skype.desktop, tweede voor inkscape.desktop):
Exec=bash -c
'LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so skype'
Exec=bash -c 'LIBOVERLAY_SCROLLBAR=0 inkscape %F'
commandLinefu.com
is een site met een ruime verzameling van Linux commando's voor alle
mogelijke doelen... Soort uitgebreide cheat page.
VMware player 4.0.3 installeert nog niet lekker op Ubuntu; zie deze
pagina: VMware
Player 4.0.3. on Ubuntu 12.04 64 Bit. Werkt voor mij!
Om in LibreOffice de default paper size (standaard papierformaat) van Letter
op A4 te zetten moet je de file /etc/papersize
editten en Letter vervangen door A4...
Geen goede
MP4 playback? Zie Fix
MP4 Playback In Ubuntu 12.04 [Gstreamer Bug Affecting Totem, Minitube,
Etc.
Om een applicatie een window op een vaste positie te openen kan
je CCSM gebruiken. Ga naar Window management --> Place Windows -->
Fixed Window Placement. Vul daar bijvoorbeeld de titel (title=<titel>)
en de x/y-coordinaten in.
Optimalisaties
In 'Startup Applications' ook hidden services zichtbaar maken, zoals
desktop sharing en personal file sharing? Weet wel wat je uitschakelt!
cd /etc/xdg/autostart; sudo sed --in-place
's/NoDisplay=true/NoDisplay=false/g' *.desktop
Heb je genoeg geheugen, maar een trage disk? Dan kan je het swappen beter
verlagen; bijvoorbeeld van de default value van 60 naar de waarde 10. Doe
dit met 'vm.swappiness=10' in /etc/sysctl.conf.
Ook kan het helpen een deel van je files (zoals de Firefox cache) op
ramdisk te zetten:
sudo mkdir /mnt/ramdisk; sudo mount -t tmpfs -o size=1024M tmpfs
/mnt/ramdisk
- of voeg toe in /etc/fstab de regel
tmpfs /mnt/ramdisk tmpfs
nodev,nosuid,nodiratime,size=1024M 0 0
- firefox via de about:config page -->
browser.cache.disk.parent.directory > /mnt/ramdisk,
browser.cache.disk.enable > true
- chromium starten met de optie
--disk-cache-dir="/mnt/ramdisk"
Heb je juist weinig geheugen, maar een redelijke processor: comprimeer je
werkgeheugen dan met zRAM; sudo apt-get install zram-config
screen -r : verder waar je bezig was.
^a d detach (connect met 'screen -r'); ^a c
new shell window, ^a k kill window; ^a S
split screen; ^a 0 .. ^a 9 switch
to window 0..9; ^a " list screens; ^a i
window info; ^a ? help; ^a A set
title. ^a [ brengt je in copy/scroll mode [hjkl^b^f].
Programma al gestart voor je je realiseerde dat je screen wilde
gebruiken? reptyr
kan je programma 'reparent'en; een andere ouder geven... Start in een
andere terminal screen, en doe daar reptyr <PID>
met PID het proces ID van het programma dat je in screen wilt
hebben.
Disk defragmenteren: is dat dan nodig in Linux? Meestal niet, maar als je
disk erg vol heeft gezeten dan kan e4defrag helpen: sudo
e4defrag -c /dev/sda1 checkt de noodzaak, daarna indien nodig
zonder de -c draaien.
Enable indexeren van de directories (snelheidsverhoging van disk access):
kan alleen als de partitie niet gemount is (b.v. bij gebruik live-CD); dan
sudo tune2fs -O dir_index /dev/sda1; sudo e2fsck -D /dev/sda1
Ik heb een dual-boot
systeem, dus zowel een oude Windows als een nieuwe Ubuntu. Tijdens
het booten kan ik met Grub2 kiezen, als ik niets kies start na 10
seconden automatisch Ubuntu. Maar, 10 seconden is wel lang wachten; heb
daar 2 van gemaakt. Pas de file /etc/default/grub aan, dan Grub
updaten met sudo update-grub.
Files
en swap
Zoeken
en hernoemen van files
De extensie van een groep files veranderen? Vermoedelijk heb je ook het rename
commando op je systeem; maar er zijn verschillende versies van in omloop.
Ik heb de 'perl' versie, waarbij je met een reguliere expressie de
naamwijziging op kunt geven (met '-n' doet hij een testrun; '-v'
geeft 'verbose output', en er is ook nog een '-f'):
# Perl versie:
rename -v 's/\.JPG$/\.jpg/' *.JPG
rename -v 's/\.JPG$/\.jpg/' */Raw/*.JPG
rename -v 's/\.(\d\d)([a-z]{3})(\d\d)\./.20$3$2$1./' *.txt; #
file.21jan13.txt --> file.2013jan21.txt
rename 's/IMG_(....)(....)_(......).*.jpg/${1}_${2}_${3}km.jpg/' *
# Non-perl
versie
rename .JPG .jpg *.JPG
Het 'dd' commando is handig om ISO
images van CD's te maken, b.v. dd if=/dev/cdrom
of=/tmp/cdimg1.iso (wel de cdrom eerst unmounten)
Met find
kan je op allerlei mogelijke manieren files vinden, en eventueel ook
bewerken. Een paar voorbeelden hieronder. Wil je weten welke processen
sommige files in gebruik hebben (bijvoorbeeld omdat je niet kan
unmounten), gebruik dan fuser (ook hieronder).
find . -xdev -user kees -exec chown kees:users {} +
find /home/kees -xdev -newer marker.txt -print
function ff () { find . $2 $3 $4 $5 $6 $7 $8 $9 -xdev -iname $1 -print }
sudo fuser -v -m /mnt/data
Encryptie
verwijderen van swap
Encryptie van je home directory (Ubuntu) is prima, maar encryptie van je
swap kan hibernate-problemen geven. Heb het daarom maar uitgezet (ook voor
de snelheid op mijn oude laptop). Is wel een security-lek, maar ik swap
toch niet zo veel...
sudo swapoff -a
sudo cryptsetup remove /dev/mapper/cryptswap1
sudo gedit /etc/crypttab
*remove the /dev/sda4 line*
sudo /sbin/mkswap -L swap /dev/sda4
sudo swapon /dev/sda4
sudo gedit /etc/fstab
*replace /dev/mapper/cryptswap1 with /dev/sda4*
Pas op, bij een distributie-update (dus bijvoorbeeld Ubuntu 16.04 naar
18.04) wordt de swap weer opnieuw als encrypted ingesteld. Opnieuw
uitzetten dus. Let op, bij mkswap veranderd de file UUID, zorg dat
ook /etc/fstab en /etc/initramfs-tools/conf.d/resume
deze nieuwe UUID gebruiken. Anders wordt booten hééééél traag. En even sudo
update-initramfs -u draaien...
DropBox
encryption
Soms wil je ook gevoelige data als inloggegevens op Dropbox kwijt,
maar... ook zij weten het wachtwoord. In dat geval zou je een encrypted
bestandssysteem (EncFS) over een folder in Dropbox kunnen mounten, en in
die folder je gevoelige gegevens kwijt kunnen. De uitleg staat op 'Encrypt
Your Private Dropbox Data with EncFS', download hier de Gnome
wrapper gnome-encfs
(met handige tips).
# Eenmalig per PC: sudo apt-get
install encfs
# Eenmalig per PC: sudo install gnome-encfs
/usr/local/bin
# Eenmalig per PC: mkdir ~/Dropbox_Private
# Eenmalig: encfs ~/Dropbox/.encrypted
~/Dropbox_Private
# Eenmalig per PC: gnome-encfs -a
~/Dropbox/.encrypted ~/Dropbox_Private
gnome-encfs --mount; # Om hem te mounten
# Unmount: fusermount -u
~/Dropbox_Private
Encrypted
home directory toch lezen
Gaat met ecryptfs-unwrap-passphrase.
Zie ook deze Ubuntu encrypted
page. Was iets als hieronder, het eerste commando levert je (na
invoer van het wachtwoord voor die gebruiker) een hex string op die je op
de plaats van de ???? in het laatste commando moet invullen:
sudo ecryptfs-unwrap-passphrase
/mnt/UbuntuOld/home/.ecryptfs/kees/.ecryptfs/wrapped-passphrase
sudo mkdir /mnt/tempmount
sudo mount -t ecryptfs /mnt/UbuntuOld/home/.ecryptfs/kees/.Private
/mnt/tempmount \
-o key=???????,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,\
ecryptfs_passthrough=n,,ecryptfs_enable_filename_crypto=yes
Boot
en filesystem issues
Herstellen van een boot-partitie: kijk eens naar de
'Boot Repair' tool. Heb ik op een Ubuntu-installatie op een
USB-stick toegevoegd, en in ieder geval al een keer heeft het me 'gered',
mijn 10.10 Ubuntu op een oud systeem wilde niet meer starten; opstarten
vanaf de USB en boot-repair de 'Recommended repair' laten doen en het
werkte weer.
Controleren van ext-filessytem gaat met e2fsck
-n -v <filesystem>, maar dit repareert niet (door -n,
laat alleen zien wat er moet gebeuren), een draaiend filesystem kan je
beter niet repareren terwijl het draait (of unmounten, of bij boot). Om
een disk check te forceren bij opstarten:
sudo touch /forcefsck ; # force disk check at
next reboot
Archives
en backups
Paar van de vele tar opties: -c: create,
-f <file>: archive name, -h: dereference, -j: bzip2, -z: gzip, -p:
preserve permissions, -v: verbose, -x: extract
tar is
'het zip-commando van linux'. Kan heel veel, en heeft veel opties... Zie
bijvoorbeeld deze tutorial
met voorbeelden. Paar handige varianten: (1) creëer archive als
bzip2 file, bewaar rechten, sla sommige dirs over (zie ook -X
excludelist_filename); (2) en (3) haal bepaalde files uit het
archief; (4) maak van te voren een schatting van grootte (in kB) van nog
te maken bzip2 archief
tar -pcjf homedir.tar.bz2 --exclude "/home/me/temp/*"
--exclude "/home/me/pictures/*" /home/me/
tar xvf archive_file.tar /path/to/dir1/ /path/to/dir2/
tar xvf archive_file.tar --wildcards '*.pl'
tar -cjf - /directory/to/archive/ | wc -c
Een ander handig commando voor backups is rsync.
Dit kopieert (bij de juiste opties) alleen maar die files die zijn
gewijzigd. Heeft erg veel opties...
rsync -aruv /van/directory/* /naar/directory/ ; #
archive ( -a = -rlptgoD ), recursive, update, verbose
rsync -rlptxz --modify-window=100 --max-delete=-1 --safe-links --progress
--exclude '*.bak' --exclude-from excludelist.txt <from>
<to> ; # mijn back-up argumenten (op
Windows target: -ruv ipv -rlpt)
Paar van de vele rsync
opties: -a: archive (=-rlptgoD), -l: keep symlinks, -p: preserve
permissions, -r: recursive, -u:update, -v: verbose, -z: compress,
--delete, --dryrun, --partial, --progress,
Files naar of van een remote systeem back-uppen? Dan is sftp
(secure FTP) ook wel een handige tool (al kan rsync ook
remote werken). Hiermee kan je via een veilige verbinding hele directories
heen en weer sturen (moet wel SSH op het remote
systeem draaien). Niet de meest snelste methode, maar wel flexibel. Werkt
interactief, maar je kan ook een batch-file met opdrachten meegeven met -b.
Gebruik ik wel om 's nachts een set files over te huizen, bijvoorbeeld bij
's avonds in een 'screen'-sessie starten met een 4 uur wachtperiode (heel
bot, maar werkt wel), de ingesprongen regels in blauw staan in sftp_batch.txt
(let op: de -r optie is er pas vanaf OpenSSH versie 4.7):
#
eerste regels in sftp_batch.txt:
mkdir mijn\
directory
put -r
mijn\ directory
quit
eval $(ssh-agent)
ssh-add <mijn_key_file.openssh>
sleep $(( 60*60*4 )); nice sftp -oPort=22 -b sftp_batch.txt
kees@123.456.789.100:/mnt/data/public
Let op: ik gebruik bij mijn SSH server op het
remote systeem geen wachtwoord, maar een public/private key paar. Door
deze van te voren te laden met ssh-add hoef je geen
wachtwoord in te typen op het moment dat sftp
start.
Voor rsync
is de remote syntax meer als hieronder. Ook scp zou kunnen
helpen, ook hieronder:
rsync -avz -e "ssh -oPort=22" /home/kees/My\ Documents
kees@123.456.789.100:/mnt/data/public
scp -r /home/kees/My\ Documents kees@123.456.789.100:/mnt/data/public
En daarnaast is er nog Unison,
om meerdere computers met elkaar synchroon te houden, evt met backup. Ik
gebruik mijn Raspberry als centrale server, waarmee ik mijn desktop en
laptop synchroniseer. Meer op mijn Raspberry
server pagina.
File
global replace met sed
sed
is een handige opdracht om in een file text te wijzigen. Met een commando
kan je in een (of meerdere files meerdere wijzigingen doorvoeren, met
gebruik van reguliere expressies. Enkele heel simpele voorbeelden
(-i geeft aan 'in-place' edit):
sed -i.bak 's/ugly/beautiful/g'
/home/bruno/old-friends/sue.txt
sed 's/\([a-z]*\).*/\1/' # vergeet niet de'\' voor de haakjes
sed -is 's|<h\(.\) align="center">|<h\1>|' *.html
find /home/bruno/old-friends -type f -exec sed -i 's_[ \t][
\t]*to[ \t]*_,\t_g' {} \;
perl -e "s/old_string/new_string/g;" -pi.bak $(find
<DirectoryName> -type f)
Maar, sed is geen perl, en heeft slechts beperkte
reguliere expressies (bijvoorbeeld: de '*' werkt wel, de '+' niet; al
krijg je met '-r' extended reguliere expressies), zie de
laatste regel met perl in plaats van sed. -s:
multiple files.
Netwerkschijf
mounten
Netwerkschijf weer mounten, heb ik een scriptje voor maar dat verwacht
dat er al een mount-point is... en cifs-utils moeten geinstalleerd
zijn. sudo apt-get install cifs-utils; sudo mkdir /media/netdrive;
mount -t cifs //<je_netwerkdrive_ip>/shared /media/netdrive
-o rw,credentials=<je_credentials_file>,uid=<je_username>,gid=users
En
verder
Files 'veilig' verwijderen (zodat de inhoud echt gewist wordt) kan met schred --remove
--zero --iterations=2 <files> (of kortweg shred
-u -z -n 2 <files>). Let op, werkt niet 100% op
alle type file systems, met name niet op systemen met journalling (bv ext3
in mode data=journal)en niet op alle flash-based devices als
USB sticks, omdat deze niet altijd 'in-place' wijzigen... Ander commando
is 'wipe -r -Q 2'.
Files met scp kopieren? scp -P <port>
raspberry:scripts/Home/20131221.log ~/Documents/20131221.log
Kijken of twee directories hetzelfde zijn? diff is
hier een manier. Meer manieren?
How to compare two directories.
diff -rq orig/ backup/ ; # -r:
recursive, -q: quiet (niet de details bij file-verschillen)
Users en
groups
Users, groepen, en de bijhorende nummers (uid en gid)
zijn altijd verwarrend voor beginners... Je gebruikt het tenslotte zelden.
Standaard zit iedere gebruiker (aangemaakt met adduser)
in zijn eigen group, wat ik niet zo handig vind, ik maak de
standaard-gebruikers liever lid van 'users'. Je kunt
natuurlijk met de hand in /etc/group en /etc/passwd
gaan klungelen, maar het gaat makkelijk met het usermod
commando met -g optie. Gebruik -a -G group om
andere groepen toe te voegen.
Wil je het user nummer (uid) veranderen (bijvoorbeeld om op
alle systemen de users dezelfde uid's te laten hebben), dan gaat dat ook
met usermod: het voordeel is dat dan bijvoorbeeld ook de ownership
van de files in de home directory van de user automatisch wordt aangepast,
je hoeft dus geen chown
te doen op de files in /home/user... En zo zijn er meer
opties om de users te beheren. Tip: group-id (gid) van files
goedzetten kan bijvoorbeeld handig met het find commando.
sudo adduser --uid 1010 --ingroup users
--encrypt-home pi; # Ubuntu: new user pi, in group
users
sudo usermod -a -G users pi; # add pi to
group users
sudo usermod -g users pi; # set primary
group for pi to users
sudo usermod -u 1010 pi; # change uid
sudo find / -xdev -uid 1000 -exec chown pi:pi {} +; #
update all files of 1000
Website
opzuigen
Soms handig om een groep webpages in een keer op te halen, bijvoorbeeld
om off-line te lezen op mijn tablet
wget --recursive --no-clobber --page-requisites
--html-extension --convert-links --domains <het_te_bezoeken_domain>
--no-parent --wait=10 --level=2 --referer=http://<waar_komen_we_vandaan>/
--user-agent="Mozilla/5.0 (X11; Linux x86_64) Gecko Firefox/5.0" http://<de_op_te_halen_subsite>
ClamAV
Om een of andere reden deed de Virus Scanner GUI niet helemaal wat ik wil
(sommige folders worden niet goed verwerkt, zoals .thunderbird);
iets wat overigens in Ubuntu 12.04 opgelost lijkt te zijn. Dus toen maar
met de hand (clamscan is de engine voor de clamtk user
interface; freshclam is het commando om de database bij te
werken):
/usr/bin/clamscan -r --cross-fs=no --phishing-cloak=yes
--max-filesize=100M --block-encrypted --detect-broken --infected --bell
.thunderbird
Geeft een output als hieronder (er zit blijkbaar een encrypted pdf in een
van mijn mails, kan natuurlijk; zou een virus kunnen bevatten):
.thunderbird/3yxtfx8l.default/Mail/Local
Folders/2009_kees_in: Heuristics.Encrypted.PDF FOUND
.thunderbird/3yxtfx8l.default/training.dat: Heuristics.Broken.Executable
FOUND
----------- SCAN SUMMARY -----------
Known viruses: 1143729
Engine version: 0.97.3
Scanned directories: 194
Scanned files: 2241
Infected files: 2
Data scanned: 1064.23 MB
Data read: 761.91 MB (ratio 1.40:1)
Time: 124.906 sec (2 m 4 s)
Nog
wat losse opdrachten
Install/Remove
programs
Programma installeren gaat normaal met sudo apt-get install <programmanaam>.
Heb je een losstaande download als .deb file, gebruik dan sudo
dpkg -i <package_naam>.
Om een programma te verwijderen kan je normaal het software center
gebruiken. Alternatieven zijn sudo apt-get remove <programmanaam>
resp. sudo dpkg -r <programmanaam> (gebruik purge
om ook de configuratiebestanden te verwijderen). Soms werkt dat niet
soepel, en moet je meer handmatig doen. Vind eerst de preciese program
name met dpkg --get-selections | grep <naamfragment>,
en dan verwijderen met sudo apt-get remove <volledige_naam>
(of met sudo dpkg -r <volledige_naam>).
Ps: desktop icons bevinden zich in ~/.local/share/applications
(per user) en /usr/share/applications (shared).
Programma's updaten: gaat meestal automatisch, maar nu en dan run ik:
sudo apt-get autoremove --purge; sudo apt-get clean; sudo
apt-get update; sudo apt-get upgrade; flatpak remove --unused; sudo
flatpak update
Diversen
Wat restjes die niet in de andere groepen thuis horen:
sudo shutdown -r now
mediatomb -e eth0 -p 49153 -a /<toe_te_voegen_dir>
tkdiff .mediatomb/config.xml Temp/config_nslu.xml
gksu gconf-editor
pngcrush -brute but_load.png but_load_new.png
sudo cp newwallpaper.jpg /usr/share/backgrounds; sudo gedit
/usr/share/gnome-background-properties/precise-wallpapers.xml
gdialog
--msgbox "hallo" 6 20
ping `zenity
--title "Select Host" --entry --text "Select host you like to ping"`
sudo netstat -anltp ; # list open tcp/ip
sockets
sudo mount -t iso9660 -o loop "<path>/image.iso" /mnt/image;
# mount an iso image
sudo -i; gedit /etc/sysctl.d/10-magic-sysrq.conf; #
en kernel.sysrq = 500 voor Alt-Sysreq-rev(BUSIER)
sudo fstrim -v / ; # SSD ruimte
reclaimen (speed improvement)
gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER
-dFirstPage=22 -dLastPage=36 -sOutputFile=output.pdf file1.pdf file2.pdf
file3.pdf [...] lastfile.pdf; # plak PDFs aan
elkaar
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4
-dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages
-dCompressFonts=true -r150 -sOutputFile=output.pdf input.pdf; #
comprimeer PDF
nice dd if=/dev/zero of=zero1.bin bs=16M count=64 #
1 Gbyte file with zero's
|