The above error message appeared after I unzipped the downloaded Eclipse using Cygwin (because Windows 8 was unable to handle that long paths).

The reason is that the contained libraries (DLLs) are not executable, which can be easily resolved:

This solution has been proposed on stackoverflow.

Working with UTF-8-encoded PHP files in web applications, a common, hard-to-track-down error is the following: “Headers already sent” or “Cannot modify header information“. This usually happens during a call to the function header(), which manipulates the HTTP header.

One reason for this is that the UTF-8 file starts with an invisible(!) byte order mark (BOM) consisting of the three bytes 0xEF,0xBB,0xBF. The BOM can be removed by opening the file in a suitbale text editor and unticking the Add Byte Order Mark (BOM) .option (or similar).

A more convenient way using sed is the following:

(-i enables in-place operation of sed; 1 denotes that one replacement should happen; ^ denotes the start of a line)

Example

Let’s consider a file consisting of two lines (‘A’, ‘B’) stored with the BOM:

Investigating this file with the hex tool od, :

we obtain the following output:

The three BOM bytes are clearly visible.

After running

The output looks as follows, proving that the BOM is gone:

References

Allgemein

  • Ausgabe des Befehls date alle 2 Sekunden anzeigen:
  • Die letzten 20 Zeilen der Datei /var/log/syslog fortwährend überwachten:
  • Kalender für den September 2015:
  • Suche in der Befehlshistorie mittels (reverse-i-search): Ctrl+R
  • liefert den am nächsten in der Vergangenheit liegenden Befehl, der den Suchtext enthält
  • für weitere Treffer erneute Ctrl+R drücken

Dateinamen zerlegen

Das folgende Listing zeigt, wie man einzelne Teile eines Dateinamens erhält (nur Endung, nur Stammname, nur Verzeichnis, gesamter Dateiname):

Farbe des Prompt-Titels verändern

Der Anfang jeder Zeile in einer Standard-Bash-Sitzung kann mithilfe der Umgebungsvariablen PS1 verändert werden (zu weiteren PS-Umgebungsvariablen siehe http://www.thegeekstuff.com/2008/09/bash-shell-take-control-of-ps1-ps2-ps3-ps4-and-prompt_command/).

Beispiel für root

Ein Beispiel ist der folgende Code aus der Datei /root/.bashrc:

Der Benutzername und Host werden in Rot geschrieben, der aktuelle Dateipfad in hellem Blau.

Beispiel für normalen Benutzer

Ein zweites Beispiel ist der folgende Code aus der Datei ~/.bashrc:

Der Benutzername und Host werden in Weiß geschrieben, der aktuelle Dateipfad in hellem Blau.

Erklärung im Einzelnen

Globbing

Die Bash bietet eine Vielzahl an komfortablen Fähigkeiten, dazu gehört es, alle Dateien im aktuellen Verzeichnis auszugeben (Globbing – siehe http://en.wikipedia.org/wiki/Glob_%28programming%29), die einem bestimmten Muster entsprechen:

Dadurch kann man leicht bspw. über alle Textdateien im Verzeichnis iterieren:

Ein Problem tritt auf, wenn es keine solchen Dateien gibt. Statt einer zu erwartenden leeren Ausgabe erhält man eine Fehlermeldung, da man im Falle, dass keine passenden Dateien gefunden werden, einfach den Originalausdruck zurückbekommt:

  • .nicht_vorhandene_endung: ERROR: cannot open `*.nicht_vorhandene_endung’ (No such file or directory)

Dieses Problem kann man umgehen, indem man sogenannte Nullglobs aktiviert:

Wie man sieht, sieht man nichts und das ist genau das, was man oft haben möchte.
Das ursprüngliche Verhalten lässt sich über

wiederherstellen.

Normalerweise werden versteckte Dateien (beginnen mit einem Punkt) nicht beim Globbing erkannt.
Dies kann man mittels

konfigurieren.

Dateisystem

Dateiinformationen

  • Dateiinformationen über file.txt anzeigen
    (-i: MIME-Typ)
  • Dateiinformationen über das Blockdevice /dev/sda anzeigen:
  • Dateiinformationen über file.txt anzeigen (Letzter Zugriff/Änderung/Rechte/Inode/… – Formattierung möglich):

Ordnerstruktur

  • Ordner und Unterordner als Baumstruktur anzeigen:
  • Ordner und Unterordner als Baumstruktur anzeigen (mit versteckten Dateien):
  • Ordner auflisten (bspw. zum Nutzen in einer for-Schleife)
  • ISO-Image cd_image.iso
    nach /media/mounted_iso mounten (Linux-Äquivalent zum “Virtuellen Laufwerk” unter Windows)
  • ISO-Image aushängen:

Speicherplatzinformationen

  • Gesamtgröße des aktuellen Verzeichnisses (-h für besser lesbare Größenangaben):
  • Gesamtgröße des aktuellen Verzeichnisses und der Unterordner bis Tiefe 2 sortiert nach Größe:

Wer greift auf eine Datei zu?

Oft weigert sich umount, ein Laufwerk auszuhängen, da das Gerät noch genutzt würde:
device is busy.
Man kann herausfinden, wer ein bestimmtes Laufwerk (hier gemountet als /mnt/sdb1) nutzt:

Einen ähnlichen Befehl gibt es für Dateien:

Datei sicher löschen

Überschreibe tmp.txt insgesamt 10 Mal, dann mit Nullen
(-z: zeros) und lösche die Datei danach
(-u: unlink):

Möchte man ein ganzes Laufwerk überschreiben, dann kann man das mittels dd tun. Man sollte sich sicher sein, dass man das will, denn wenn der Vorgang einmal begonnen hat, dann lässt er sich zwar noch anhalten, aber es werden wohl schon einige Teile der Dateien zunichte gemacht worden sein.

Etwas nerdig: Man kann sich die I/O-Statistik von dd (per STDERR) anzeigen lassen, indem man das Signal USR1 an den Prozess schickt:

Zeichensatz und Zeilenenden

Inhalt einer UTF-8-Datei in Latin-9 konvertieren (Mit TAB kann man sich die verfügbaren über 1000(!) Zeichensätze anzeigen lassen):

Zeilenenden von Unix auf Windows ändern (und zurück – der Schalter -b ist nötig, falls Umlaute in der Datei auftreten, UTF-8 in diesem Fall):

Geräteinformationen anzeigen

  • Arbeitspeicher
  • Prozessoren
  • USB-Geräte
  • Übersicht
  • als Baum
  • PCI-Geräte
  • Festplatte:
    • Alle Partitionen von erkannten Festplatten
    • Durchsatzmessung /dev/sda:
  • UUID(u.a.) auslesen:
  • Übersicht:
    • CPU und Arbeitsspeicher:
    • CPU, Netzwerk und vieles mehr:

Musik, Bilder und Videos

Zusammenfassung über die Eigenschaften einer mp3-Datei:

Installation via

PDF

Mehrere PDF-Seiten pro Blatt

Es geht darum, die Datei infile.pdf so auszudrucken, dass 2 Seiten jeweils auf einem Blatt erscheinen.
Das Ergebnis steht in infile_2on1.pdf.

Die Option -s0.9 überschreibt die intern von
psnup berechnete Skalierung, die manchmal zu klein ausfallen kann.
Die Option -2 gibt an, dass wir 2 Seiten pro Blatt Papier wünschen.

Paketmanagement

dpkg

Das Tool dpkg macht sich unter anderem in den folgenden Situationen nützlich:

  • Manuelle Installation von deb-Paketen (hier morewordsplease_10.08.4-public3_all.deb)
  • Auflistung aller Dateien, die zu einem Paket gehören (hier morewordsplease)
  • Auflistung aller bekannten Pakete mit deren Installationsstatus (kann wie üblich über grep gefiltert werden)

apt

Archive hinzufügen und entfernen

(am Beispiel des Person Package Archivs ppa:stesind/ppa)

Hinzufügen:

Danach ist ein Update nötig:

Entfernen:

Man kann auch Repositories im apt-Format angeben (wie in der Datei /etc/apt/sources.list):

Services und Hintergrundprozesse

Die folgenden Ausführungen gelten vornehmlich für Ubuntu und verwandte Systeme.

Runlevel

Die einzelnen Runlevel haben folgende Bedeutung (nach http://wiki.ubuntuusers.de/Dienste#Start-Stop-Skript-und-Runlevel)

Runlevel 0
: System wird heruntergefahren
Runlevel 1
: System im Einzelbenutzerbetrieb
Runlevel 2
: System im Mehrbenutzerbetrieb
Runlevel 3 bis 5
: nicht genutzt
Runlevel 6
: Systemneustart

Automatische Startprozesse konfigurieren

Als Beispiel wird hier der Tomcat-Webserver (tomcat6) verwendet.
Bei den meisten der verwendeten Befehlen funktioniert die Vervollständigung mittels TAB.

Default-Werte ermitteln

Bevor man einen Prozess aus der Startreihenfolge entfernt, sollte man sich ansehen, wo er während der Installation eingetragen wurde, damit man dies wiederherstellen kann, wenn man den Prozess erneut automatisch starten lassen möchte.
Dazu kann man beim Austragen des Services den Schalter -n (nur simulieren) nutzen. Falls der Dienst noch läuft (sudo service tomcat6 status), muss man das Austragen mittels -f erzwingen:

rc0.d/K08tomcat6
: heißt dabei, dass tomcat6 im Runlevel 0 (rc0) an 08. Stelle unter den zu stoppenden Prozessen (K: kill) steht
rc2.d/S92tomcat6
: heißt analog, dass tomcat6 im Runlevel 2 (rc2) an 92. Stelle unter den zu startenden Prozessen (S: start) steht

Für einen sicheren Startablauf ist dabei die Konvention üblich, dass die Prozesse in ihrer umgekehrten
Startreihenfolge gestoppt werden, dabei werden die Skripte mit kleinerer Nummer zuerst und die mit größerer
Nummer später ausgeführt, wobei Nummern im Bereich von 00 bis 99 vorgesehen sind.

Für tomcat6 erhält man somit für eine Startnummer von 92 eine Stoppnummer von 100 – 92 = 8.

Prozess austragen

Ist man sich nun sicher, dass man den Prozess austragen möchte, dann kann man diesen mittels

entfernen.

Prozess eintragen

Um nun den Prozess mit den exakten vorherigen Einstellungen einzutragen, muss man jeweils genau spezifizieren, wo der Prozess in welchem
Runlevel platziert werden soll:

start 92 2 3 4 5 .
: Starte tomcat6 in den Runlevels 2 3 4 5 an Stelle 92
stop 08 0 1 6 .
: Stoppe tomcat6 in den Runlevels 0 1 6 an Stelle 08

Anmerkung: Der Punkt am Ende ist für eine korrekte Konfiguration wichtig!

Links

Benutzerverwaltung

Eigene Shell ändern

Der folgende Befehl ändert die voreingestellte Shell des Benutzers franz auf /bin/bash:

sudo mit Rootpasswort

Normalerweise frage sudo nach dem Passwort desjenigen Benutzers, der den Befehl gestartet hat. Möchte man allerdings das Root-Passwort zur Authentifizierung nutzen, dann kann man dies wie folgt erreichen.

Starten des Editors für die sudo-Konfiguration:

Zu dem (ersten) Bereich, der bereits mehrere Defaults-Einträge besitzt, fügt man folgendes hinzu:

Beim nächsten Ausführen von sudo wird man nach dem Rootpasswort gefragt:

Zufallsstring

Einen zufälligen String kann man manuell wie folgt erzeugen:

Die Ausgabe sieht dann etwa so aus:

Es werden dabei 3 Strings mit jeweils 16 Zeichen erzeugt, die ausschließlich aus Klein- und Großbuchstaben, Ziffern, Binde-/Unterstrichen sowie “$” und “?” bestehen.

For some unknown reason, the default color for directories printed by ls is blue, which reads badly on a black background.

The default colors for ls can be changed via the environment variable LS_COLORS. To try it out, open a terminal and type in the following commands:

You should see a difference between the two executions of ls (if you have directories in the current folder). To make these changes permanent, add them to your bash initialization script (e.g., ~/.bashrc, ~/.bash_profile, ~/.bash_login).

The strange string 0;35 is a so-called color code and it conforms to ISO 6429 as described in the man page of dir_colors. The second number is the color (35 = magenta) and the first number modifies the ‘value/darkness’ of the color.

The man page lists some more colors: 44 = blue, 46 = cyan, etc.

If you want to know about which color is assigned to a specific file type, you may print out the whole dircolors database by typing:

An output in the appropriate format for LS_COLORS (e.g., for the Bash) can be retrieved by typing:

 References

  • My first hit when searching for more information was this blog post
  • Here is an online version of the dir_colors man page.

The following shell script can be used for suspending Linux using dbus (if available):

Similarly, the following shell script causes the system to hibernate (suspend to disk):

Activating Hibernate

If you get the following error, your user is probably not allowed to hibernate:

You can follow the instructions as described here to solve this problem (using the policykit-desktop-privileges package): Edit or create /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla, so that it contains the following section:

Alternative without dbus

A standard alternative, which requires root privileges, is to use the following commands:

Another, low-level method is to write the desired state to files in /sys:

References

  • [1] Discussion on stackoverflow.com

While KDE and other desktop environments usually keep removed files in a trash directory, the command line program rm irreversibly deletes files. The tiny Python utility trash-cli may help here. It implements the Freedesktop trash specification and is therefore apt for Gnome and KDE. On Ubuntu, it can be installed from the package management:

The manpage in my version (0.12.7) is a little outdated, so I list the available programs here:

  • trash, trash-put f – moves file or directory f to trash
  • trash-empty [d] – empties the trash (optionally restricted to files that are older than d days)
  • restore-trash – restores files that were originally located below the current directory
  • trash-list – lists all files in the trash (trash-list | sort sorts the files according to date)

References

  • [1] trash-cli project site
  • [2] Freedesktop trash specification

In this post, I demonstrate how we can analyze an ARFF file to find out how frequent a given feature occurs in a certain class. For simplicity, I assume only binary features, i.e., of type NUMERIC, and either 0 or 1.

The numbers in the comments are examples from my dataset.

Find out the column number of an attribute

Determine first line containing an @ATTRIBUTE:

Determine line containing the desired feature (HasAtLeastOne_auch):

This means, that the desired feature is in column 191 – 8 +1 = 184, which means there are 183 columns before it:

Of course, this whole calculation can be done automatically in script.

Counting the per-class occurrences of that attribute

Here is, where the simplifying assumption kicks in: The following expressions expect that all columns either contain a 0 or 1. They match a sequence of 183 0’s or 1′, separated by a comma and followed by a 1 (presence) or 0 (absence). We expect the class label (A or B) to be the last entry each line. (-E makes grep accept POSIX extended regular expressions (EREs))

 

 

This post is a lose collection of useful applications of sed.

Grepping

The following commands are equivalent:

The -n flag makes sed print only the matching lines.

Replacing Pathnames

The following command replaces the placeholder CURRENT_WORKING_DIR with the current working directory inside file.txt:

 Replacing in a whole Directory Tree

We can use find to filter all files in a directory (tree) and then hand these files to sed. The following command prints out all true files (not directories) and lets sed replace the term et cetera with etc.

While we could also use the -exec flag of find this separation of concerns makes it easy to dry-run the modifications by exchanging the sed command. The flag -n reduces the output to the matches only and the command p triggers the printing of matching lines.

 Tutorials

  • [1] Colorful tutorial by grymoire

A list of useful commands involving the find tool.

Empty directories

Identify empty directories below the current directory

Identify empty directories that have do not start with “.git”:

See also: here

Ping

When we want to check whether a host is reachable (at all), we can use the ping command:

It sends ICMP Echo Requests to the given host and reports how many packages are received and responded to. The option -c can be used to set how many requests are sent.

Checking specific endpoints

A disadvantage of ping is that we cannot configure a specific endpoint (= host + port) to ping. More advanced tools offer alternatives. The following command pings the FTP port of www.roland-kluge.de:

nping belongs to the nmap package. On Ubuntu, nmap can be installed as follows: sudo apt-get install nmap .

Another tool is  Netcat. The advantage of nc is that the error code indicates whether the endpoint was pinged successfully, making it useful for checking endpoint availability in scripts.

On Ubuntu, Netcat can be installed as follows: sudo apt-get install netcat .

References

  • [1] Nmap project site
  • [2] Netcat project site