Phillip Richdales immensely practical collection of CLI snippets (and learn a little German along the way 😉 )
Phillip Richdales unglaublich praktische Sammlung an Kommandozeilenschnippseln
Tar Gz a directory
tar czf my-backup.tar.gz my-backup
rsync ‘update’ operation (Quelle zu Ziel kopieren ohne zu überschreiben) /
rsync ‘update’ operation (copy from source to target without overwriting files in the target)
rsync -tr /my/source/directory/* /mein/ziel/verzeichnis
Dateien im aktuellen Verzeichnisbaum nach String durchsuchen /
search for a keyword in a directory-tree
grep -rn 'SEARCHWORD' *
Vorhandenes Git Repo in ein einfaches repo ohne Checkout/Arbeitskopie verwandeln /
Turn repos into pure storage repos, without checkout: Execute the following command in your remote repository folder:
git config --bool core.bare true
Dann alle Dateien außer dem .git Verzeichnis löschen – dann kann man ohne Fehler von fernen Git Repos aus auf dieses Pushen /
Then delete all the files except .git in that folder. And then you will be able to perform git push to the remote repository without any errors.
cvs Verzeichnisse rekursiv in einem Verzeichnisbaum löschen /
Remove CVS Dirs recursively (exec in toplevel project dir):
find . -name CVS -prune -exec rm -rf {} \;
Git Origin zu einem Git Repo / Arbeitsverzeichnis hinzufügen / Add Git Origin:
git remote add origin developer@mybox.local:/home/developer/projekte/[PROJEKTNAME]/git-repos
Frisches leeres Git Repo erzeugen / Create Git bare repository:
git --bare init
Leeres Projektverzeichnis auf Host initialisieren um es dann zu klonen (Beispiel, Git, spezielles Skript) / Initialize empty project-dir to then be able to clone it (example, Git, special script):
developer@devbox:>sh ../scripts/createProjectRepos.sh myWebProject.com
Hinweis: Wenn man ein neues Projekt so herum aufzieht, ist nach dem Klonen nach Lokal ein Setzen von ‘origin’ nicht mehr nötig.
Note: If you set up a project with Git versioning this way, you won’t have to (re)set origin after cloning to your local working copy.
CVS Metadata aus einem Projektverzeichnis entfernen (d.h. einen CVS Checkout aus der CVS Versionierung entfernen, um z.B danach ein Git versioniertes Projekt daraus zu machen) – im Rootverzeichnis des Projekts ausführen:
rm -rf `find . -name CVS`
Alternative (für große Projekte mit sehr vielen CVS Metadataverzeichnissen, benutzt nicht den CLI Puffer um eine Liste der CVS Dirs zu speichern):
find . -name CVS -exec rm -rf {} ;
untar & ungzip in einem Arbeitsgang:
tar -zxvf myfile.tar.gz
apt-get update ohne Expired Fehler / avoid Expired problems when using apt-get update:
apt-get -o Acquire::Check-Valid-Until=false update
updatedb auf neueren macos installationen ermöglichen (z.B. macos Sierra):
printf "\nalias updatedb='sudo /usr/libexec/locate.updatedb'" >> ~/.bash_profile
updatedb auf OS X ermöglichen:
sudo ln -s /usr/libexec/locate.updatedb /usr/bin/updatedb
updatedb auf OS X El Capitan ermöglichen:
ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb
MAMP MySQL client symlinken (OS X):
sudo ln -s /Applications/MAMP/Library/bin/mysql /usr/bin/mysql
auf MySQL client einloggen (OS X):
mysql --host=localhost --user=myname --password=mypass mydb
Ausgabe zurechtschneiden (hier alle Zeichen bis 120 stehen lassen, alles danach wegschneiden, Beispiel mit grep-Suche):
grep -rn "SUCHWORT" * | cut -c -120
Auf OS X Maveriks und ggf. frühere Versionen unsichtbare Dateien und Verzeichnisse sichtbar machen:
defaults write com.apple.finder AppleShowAllFiles YES
Danach “Alt” gedrückt halten und im Dock mit Rechtsklick auf den Finder gehen und neu Starten.
Ein Script mit setuid so mit Rechten versehen, dass es immer als root läuft:
chmod u+s meinSkript.sh
Git: Zeige eine Liste der Dateien, die zwischen release-001 und release-002 geändert wurden:
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT release-001 release-002
Git: Zeige eine Liste der Dateien, die zwischen release-002 und HEAD geändert wurden:
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT release-002 HEAD
Tags aus einen Output Dump entfernen, mit sed (Beispiel mit PHP):
php somePhpFile.php | sed 's,<[^>][^>]*>,,g' > strippedOfTags.txt
sed – Tags aus einen Output Dump entfernen (variante (testen)):
php someOtherPhpFile.php | sed 's,<[^>][^>]*>,,g' > otherStrippedOfTagsDump.txt
grep + sed – “Debugging für Arme”: Output nach “myout: “ durchsuchen und “myout: “ entfernen und die Zeile ausgeben /
grep + sed – “Poor Mans Debugging” Search output for “myout: “, delete “myout: ” and output the remaining line
scriptThatGeneratesStandardOutput.php | grep "myOut: " | sed 's,myOut: ,,g'
Wörter Zählen / Count the word ‘<record>’
Beispiel mit grep / example with grep
grep -o -w '<record>' mydata.xml | wc -w
Untar.gz a file (add v to options for verbose) / Eine tar.gz Datei entpacken:
tar -xzf MyTarArchive.tar.gz
Find all files starting with ._ in the Filename and delete them. Recursive Directory traversal.
find . -type f | grep ._ | xargs rm
Same thing. (alternative):
find . -iname '._*' -exec rm -rf {} \;
scp recursive copy of dir to remote location / mit scp rekursiv von einem Verzeichnis zu einem fernen Verzeichnis kopieren:
scp -r foo your_username@remotehost.com:/some/remote/directory/bar
rename group name on FOSS *nix:
groupmod --new-name NEW_GROUP_NAME OLD_GROUP_NAME
Linux (Ubuntu 14.04 LTS and newer) – Disable suspend mode with closed lid: Edit the /etc/systemd/logind.conf
file and uncomment/modify/add the line:
HandleLidSwitch=ignore
… then …
restart systemd-logind
Linux (Debian, Ubuntu) – Reconfigure timezone setting
dpkg-reconfigure tzdata
Offene Dateien im aktuellen Verzeichnis auflisten; praktisch um herauszufinden welche Dateien eine Aktion auf das Verzeichnis (z.B. löschen) verhindern / List open files in current directory; practical to find out which files are preventing actions on that directory (f.e. deleting)
lsof +D .
User unter Linux auf einen anderen Namen und ein anderes Homeverzeichnis verschieben (als Root) / Move a user to a different name and a different home directory under Linux (as root)
usermod -l newusername -m -d /home/newusername oldusername
In VirtualBox die uuid einer virtuellen Festplatte neu generieren und Kollisionen bei kopierten virtuellen Maschinen zu vermeiden / Regenerate a uuid in a virtual hdd in order to avoid collisions after copying a VM
VBoxManage internalcommands sethduuid /absolute/path/to/vm/VmDrive.vdi
find . -name \*.txt -print
Fix local root (or other users) mysql/mariadb privileges on Ubuntu Linux:
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root'; FLUSH PRIVILEGES; GRANT ALL ON *.* TO 'root'@'localhost';
Skaliere alle jpg Bilder im Verzeichnis auf 1800 Pixel Breite:
for file in *.jpg; do convert $file -resize 1800x $file; done