Linux Sortierung bei `ls -ll` ?? [Gelöst]

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Linux Sortierung bei `ls -ll` ?? [Gelöst]

Beitrag von jmar83 » 26.01.2021 12:52:38

Wo ist da die Logik? Mittendrin in den Einträgen welce ein `__` enthalten befinden sich die Dateien ohne `__`

Ich meine die Dateien `compile.sh` sowie `pull.sh`.

Gerade Rücksprache gehalten mit einem unserer Senior Engineers, hat einen Uni-Anschluss und findet es auch nicht logisch:

https://i.ibb.co/3v8C7jc/linux-sort-problem.jpg

Ich meine der Rest ist sonst alphabetisch-lexiaklisch in aufsteigender Reihenfolge sortiert. Aber die beiden SAchen nicht ,die gehören meines Erachtens entweder

a.) VOR all die Einträge mit `__`

ODER

b.) NACH all die Einträge mit `__`

Vielen Dank für die Feedbacks. :-)
Zuletzt geändert von jmar83 am 11.02.2021 16:09:38, insgesamt 2-mal geändert.
Freundliche Grüsse, Jan

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von Meillo » 26.01.2021 13:07:39

In manchen Locales werden Sonderzeichen beim Sortieren ignoriert. Vielleicht liegt es daran. (Den Screenshot konnte ich nicht anschauen.)
Use ed once in a while!

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Linux sortierung bei `ls -ll` ??

Beitrag von JTH » 26.01.2021 13:27:52

jmar83 hat geschrieben: ↑ zum Beitrag ↑
26.01.2021 12:52:38
hat einen Uni-Anschluss
:lol:


Als ergänzendes Beispiel zu Meillos Erklärung:

Code: Alles auswählen

/tmp/tmp.1L6ThSXoun$ LC_ALL=C ls -1
clone_C_MQTT.sh
clone_PAHO_MQTT.sh
clone__A_MQTT.sh
clone__B_MQTT.sh

Code: Alles auswählen

/tmp/tmp.1L6ThSXoun$ LC_ALL=de_DE.UTF-8 ls -1
clone__A_MQTT.sh
clone__B_MQTT.sh
clone_C_MQTT.sh
clone_PAHO_MQTT.sh

Es ist übrigens nicht unbedingt hilfreich, wenn du in deinem Screenshot ausgerechnet die relevanten Buchstaben in den Dateinamen versteckst …
Zuletzt geändert von JTH am 26.01.2021 13:31:58, insgesamt 1-mal geändert.
Manchmal bekannt als Just (another) Terminal Hacker.

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von jmar83 » 26.01.2021 13:31:20

Danke fürs Feedback.

Hier noch der Screenshot:

3034

Die verdeckten Einträge beginnen mit "clone_" sowie "pull__" enden mit "GLICHER_WERT_[variabel]" und haben überall gleich viele Underlines drin... bei "clone_" eines, bei "pull__" zwei...
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von jmar83 » 26.01.2021 13:38:56

Nachtrag:

Muss mich korrigieren: Die Sachen mit "clone_XXX" habe ich nur wegen dem Firmennamen zensiert. Bei diesen gibt's aber keine schräge Sortierung, weil ALLES so anfängt.

Das Problem bezieht sich auf die "compile__" sowie "pull__"-Sachen:

3035
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von jmar83 » 26.01.2021 13:41:19

Und noch mal, damit's für alle klar ist?
(ODer habe ich (wieder mal ;-)) das "Brett vor dem Kopf"??)

3036
Freundliche Grüsse, Jan

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von Meillo » 26.01.2021 14:05:43

Screenshots finde ich hier wenig hilfreich. Nicht nur, dass ich sie nicht anschauen kann, um das Verhalten zu reproduzieren muss ich sie zudem abtippen. (Und jeder mitlesende Person, die es ausprobieren will, muss sie erneut abtippen. Im anderen Fall wuerdest du das nur genau einmal tun fuer alle. Das ist deutlich effektiver. ;-) )

Ich schlage vor, dass du auf deinem System in einem temporaeren Verzeichnis ein paar Dateien anlegst, die das Verhalten in minimalster Weise reproduzieren (so wie JTH das getan hat). Dann kopiere den Terminaltext deiner Versuche. Zum einen macht das unsere Arbeit erheblich leichter, zu anderen erlaubt es dir auch selber nachzuvollziehen und zu verstehen was passiert und wie es sich auswirkt.

Die Frage, woran es liegt, ist schon beantwortet (und von JTH auch exemplarisch demonstriert): An deinem Locale.
Use ed once in a while!

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von jmar83 » 26.01.2021 14:19:42

Gesagt (vielen Dank!!), getan:

Code: Alles auswählen

-rwxr-xr-x 1 root     root       114 Jan 26 14:09 all.sh
-rwxr-xr-x 1 root     root       333 Jan 26 14:09 clean.sh
-rwxr-xr-x 1 root     root       331 Jan 26 14:09 clone_PAHO_MQTT_CPP.sh
-rwxr-xr-x 1 root     root       359 Jan 26 14:09 clone_PAHO_MQTT_C.sh
-rwxr-xr-x 1 root     root       254 Jan 26 14:09 clone_XXX_CPP.sh
-rwxr-xr-x 1 root     root       256 Jan 26 14:09 clone_XXX_DB_LOCAL.sh
-rwxr-xr-x 1 root     root       259 Jan 26 14:09 clone_XXX_INSTALL.sh
-rwxr-xr-x 1 root     root         0 Jan 26 14:09 clone_XXX_WEB_LOCAL.sh
-rwxr-xr-x 1 root     root       686 Jan 26 14:09 compile__indiv.sh
-rwxr-xr-x 1 root     root         0 Jan 26 14:09 compile__PAHO_MQTT_CCP.sh
-rwxr-xr-x 1 root     root       261 Jan 26 14:09 compile__PAHO_MQTT_C.sh
-rwxr-xr-x 1 root     root      1864 Jan 26 14:09 compile.sh
-rwxr-xr-x 1 root     root       705 Jan 26 14:09 compile__spear.sh
-rwxr-xr-x 1 root     root      1316 Jan 26 14:09 compile__xaxadev.sh
-rwxr-xr-x 1 root     root       846 Jan 26 14:09 compile__xaxshedler.sh
-rwxr-xr-x 1 root     root       803 Jan 26 14:09 compile__XXX_master.sh
-rwxr-xr-x 1 root     root       794 Jan 26 14:09 compile__XXX_state.sh
-rwxr-xr-x 1 root     root       785 Jan 26 14:09 compile__XXX_sync.sh
-rwxr-xr-x 1 root     root       834 Jan 26 14:09 compile__yoctobob.sh
-rwxr-xr-x 1 root     root      3101 Jan 26 14:09 createdeb.sh
-rwxr-xr-x 1 root     root     15588 Jan 26 14:09 inst.sh
-rwxr-xr-x 1 root     root         0 Jan 26 14:09 pull__PAHO_MQTT_CPP.sh
-rwxr-xr-x 1 root     root      1076 Jan 26 14:09 pull__PAHO_MQTT_C.sh
-rwxr-xr-x 1 root     root       402 Jan 26 14:09 pull.sh
-rwxr-xr-x 1 root     root      1060 Jan 26 14:09 pull__XXX_CPP.sh
-rwxr-xr-x 1 root     root       651 Jan 26 14:09 pull__XXX_DB_LOCAL.sh
-rwxr-xr-x 1 root     root       639 Jan 26 14:09 pull__XXX_INSTALL.sh
-rwxr-xr-x 1 root     root       663 Jan 26 14:09 pull__XXX_LOCAL.sh

...die Kernfrage ist nun also, warum `.` MITTENDRIN ist zwischen `__` bei den beiden Dateien `compile.sh` sowie `pull.sh` :roll:


Nun, trotz allem, noch mal ein Screenshot:

3037
Freundliche Grüsse, Jan

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von Meillo » 26.01.2021 14:29:22

jmar83 hat geschrieben: ↑ zum Beitrag ↑
26.01.2021 14:19:42
...die Kernfrage ist nun also, warum `.` MITTENDRIN ist zwischen `__` bei den beiden Dateien `compile.sh` sowie `pull.sh` :roll:
Die Antwort darauf ist, dass dein Locale (vermutlich `de_DE.UTF-8') bei der Sortierung alle Sonderzeichen einfach ignoriert. Es wird sortiert wie wenn es sie gar nicht gaebe.

Code: Alles auswählen

compile__PAHO_MQTT_C.sh
compile.sh
compile__spear.sh
`PA' kommt vor `sh', was wiederum vor `sp' kommt.


D.h. sortiert wird, wie wenn du die Dateinamen durch `tr -cd A-Za-z0-9' pipen wuerdest.


Wie du vielleicht gemerkt hast, werden Gross- und Kleinbuchstaben einsortiert, also aAbBcC..., ebenso die Umlaute ...oOöÖ... Das ist alles in deinem Locale definiert.

Wie du hier siehst:

Code: Alles auswählen

:-Q printf 'ge\nGe\nga\no\nO\nö\np\n' |LC_COLLATE=de_DE.UTF-8 sort
ga
ge
Ge
o
O
ö
p

:-Q printf 'ge\nGe\nga\no\nO\nö\np\n' |LC_COLLATE=C sort          
Ge
O
ga
ge
o
p
ö
Sortiert das C-Locale ganz anders, naemlich nach ASCII/Unicode-Reihenfolge.

Wenn du eine andere Sortierung haben willst, dann musst du die Umgebungsvariable `LC_COLLATE' nach deinen Wuenschen setzen.
Use ed once in a while!

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von jmar83 » 26.01.2021 14:33:25

Nun habe ich auch den zwiten Akademiker (Maschinenbau-Ing. mit Hochschulabschluss) zum Thema gefragt. Nun sind wir uns alle einig, dass die Sache mit dem Punkt entweder

a.) VOR all dem Zeugs mit "__"

oder

b.) NACH all dem Zeugs mit "__"

reingehört.

Ascending mit A-Z / 0-9 oder descending mit Z-A / 9-0 ist klar, also mit Buchstaben oder Zahlen. Wie es um die Regeln bei asc. vs. desc. steht, ist mir zum aktuellen Zeitpunkt nicht bekannt. (Aber mir ist bekannt, dass des z.B. bei Datebanken eine Art "internationale" Kollation gibt, welche bestimmt ob nun è vor é kommt - ist aber ein wenig ein anderes Thema...)
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von jmar83 » 26.01.2021 14:35:40

@ Meillo: Oh, gar nicht gesehen dass zur mit mit Deinen Beitrag dazwischengekommen bist.
" Die Antwort darauf ist, dass dein Locale (vermutlich `de_DE.UTF-8') bei der Sortierung alle Sonderzeichen einfach ignoriert. Es wird sortiert wie wenn es sie gar nicht gaebe."
Vielen Dank für Deine kompetente Aussage. Als Entwickler ist mir sowas komplett suspekt. Wenn ich das Zeugs durch nen Quicksort rattern lassen, dann kommt das heraus was zumindest ich persönlich erwarte! ;-)

Wie könnte man das Problem lösen, dass es "anständig" sortiert? Was müsste ich mit den "Locales" an dieser Stelle tun?
Freundliche Grüsse, Jan

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Linux sortierung bei `ls -ll` ??

Beitrag von JTH » 26.01.2021 14:36:44

Um Meillo nochmal zu ergänzen ;)

Schau doch einfach mal, Jan, was dir das Werkzeug locale auf dem System sagt.

Aus Interesse habe ich grad mal alle Locales durchprobiert:

Code: Alles auswählen

#!/bin/sh

touch compile.sh compile__spear.sh compile__xaxadev.sh compile__xaxshedler.sh compile__voctobob.sh

while read loc; do
	loc="${loc%% *}"
	l="$(LC_ALL="$loc" ls -1)"
	h="$(echo "$l" | head -n1)"
	g="$(echo "$l" | grep -v sort_by_locale)"
	if [ "$h" != compile.sh ]; then
		printf "### Locale $loc has unexpected sorting:\n$g\n\n"
	fi
done < /usr/share/i18n/SUPPORTED
Das Ganze braucht Debianlocales-all.

Da sieht man z.B. für az_AZ eine unerwartete Sortierung:

Code: Alles auswählen

### Locale az_AZ has unexpected sorting:
compile__xaxadev.sh
compile__xaxshedler.sh
compile.sh
compile__spear.sh
compile__voctobob.sh
Alle Ergebnisse hier: NoPaste-Eintrag41249.

Edit: Wobei ich jetzt grad überlege, ob da noch das (unveränderte) Encoding mit reinspielt/beachtet werden müsste? Hmm.
Manchmal bekannt als Just (another) Terminal Hacker.

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von jmar83 » 26.01.2021 14:38:55

Als ich die Kollation bei Raspbian 9 (das PRoblem hier ist aber Debian) nach `LC_COLLATE=C` umgestellt habe (über `raspi-config`), hatte die SSH-Konsole plötzllich ein Problem mit Umlauten. Dann haben unsere Leute plötzlich angefanen, alles mit "ae", "ue" sowie "oe" zu schreiben - na ja.. :facepalm:
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von jmar83 » 26.01.2021 14:39:36

@JTH: Danke, werde mal reinschauen!! :THX:
Freundliche Grüsse, Jan

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Linux sortierung bei `ls -ll` ??

Beitrag von JTH » 26.01.2021 14:43:05

Hmm, schau lieber nicht zu genau rein, ich glaube, meine Schlussfolgerung ist nicht ganz richtig dabei. Als Demo, was die Locale beeinflusst, hilfts vielleicht. Meillos Erklärung triffts allerdings besser.
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von Meillo » 26.01.2021 14:43:53

EDIT: Oh, nach den neuen Posts im Thread hat sich mein Post wohl erledigt. Danke, JTH! :THX:

Hier dennoch was ich posten wollte:

jmar83 hat geschrieben: ↑ zum Beitrag ↑
26.01.2021 14:35:40
Als Entwickler ist mir sowas komplett suspekt. Wenn ich das Zeugs durch nen Quicksort rattern lassen, dann kommt das heraus was zumindest ich persönlich erwarte! ;-)
Leider erwarten unterschiedliche Personen unterschiedliche Dinge. ;-)
jmar83 hat geschrieben: ↑ zum Beitrag ↑
26.01.2021 14:35:40
Wie könnte man das Problem lösen, dass es "anständig" sortiert? Was müsste ich mit den "Locales" an dieser Stelle tun?
Du musst die Umgebungsvariable `LC_COLLATE' setzen.

Welcher Wert fuer dich passt, haengt davon ab, *wie* genau du es sortiert haben willst. Ich weiss leider nicht, wie man herausfinden kann, welches Locale wie sortiert oder ob man ggf. die Sortierung des Locales irgendwie anpassen kann. Weiss da jemand mehr?

Dann musst du dir noch eine Anleitung suchen, wie du Umgebungsvariablen (environment variables) in deiner Desktopumgebung (oder was du verwendest) setzen kannst.

Ich denke, dass andere User hier dir dabei sicher behilflich sein koennen.
Use ed once in a while!

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Linux sortierung bei `ls -ll` ??

Beitrag von jmar83 » 26.01.2021 14:44:19

"Dann musst du dir noch eine Anleitung suchen, wie du Umgebungsvariablen (environment variables) in deiner Desktopumgebung (oder was du verwendest) setzen kannst."
Brauche ich monentan nicht. Mag Linux als Server (LAMP etc.) als Desktop bevorzuge ich eher das "Andere" ;-)

An euch beide: THX: !!
Freundliche Grüsse, Jan

Antworten