it-swarm.com.de

Tipps zum Speichern der Reihenfolge der Parameter für ln?

Ich habe jahrelang ln verwendet, um symbolische Links zu schreiben, aber ich bekomme immer noch die falsche Reihenfolge der Parameter.

Normalerweise schreibe ich:

ln -s a b

und dann auf die Ausgabe schauen, um mich daran zu erinnern.

Ich stelle mir immer vor, a -> b Zu sein, wenn ich es lese, wenn es tatsächlich das Gegenteil ist b -> a. Das fühlt sich kontraintuitiv an, so dass ich mich immer selbst überlege.

Hat jemand Tipps, die mir helfen, mich an die richtige Reihenfolge zu erinnern?

66
Zhro

Ich benutze Folgendes: ln hat eine Ein-Argument-Form (2. Form in der manpage ), in der nur das Ziel benötigt wird (denn wie könnte ln funktionieren überhaupt ohne das Ziel zu kennen) und ln erstellt den Link im aktuellen Verzeichnis. Das Formular mit zwei Argumenten ist eine Ergänzung zum Formular mit einem Argument, daher ist das Ziel immer das erste Argument.

41
gary

Ich gehe von "ln ist wie cp. Die 'Quelle' muss zuerst kommen."

85
Hermann

Die meisten Unices dokumentieren den Befehl ln als

ln source target

(Ich lasse hier Optionen usw. weg)

Beispiele:

  • Der POSIX-Standard

    ln [-fs] [-L|-P] source_file target_file
    
  • OpenBSD :

    ln [-fhLnPs] source [target]
    
  • NetBSD und FreeBSD

    ln [-L | -P | -s [-F]] [-f | -iw] [-hnv] source_file [target_file]
    
  • mac OS

    ln [-Ffhinsv] source_file [target_file]
    
  • Solaris

    /usr/bin/ln [-fns] source_file [target]
    
  • AIX

    ln [ -f | -n ] [ -s ] SourceFile [ TargetFile ]
    

Das Handbuch GNU ln ruft das source Ziel und das target Linkname auf.

Wenn Sie die Wortauswahl GNU] ignorieren, folgt das Dienstprogramm ln der gleichen Semantik wie z. B. mv und cp in diesem das Ziel ist das, was aus der Quelle erstellt wird.

Deshalb,

ln -s a b

würde den symbolischen Link b erstellen, der auf a zeigt.

Beachten Sie auch, dass beim Erstellen von symbolischen Links die Quelle einfach eine Zeichenfolge ist, die darstellt, auf was der symbolische Link zeigen soll. Es wird normalerweise keine Überprüfung durchgeführt, um zu bestätigen, dass es auf etwas Nützliches hinweist:

$ ln -s "hello world" README.txt
$ ls -l
total 0
lrwxr-xr-x  1 kk  wheel  11 Sep 15 11:39 README.txt -> hello world
10
Kusalananda

Für den Fall, dass dies jemandem hilft: Ich habe mich daran gewöhnt, es als "ln waswo" zu betrachten, was mir hilft, mich daran zu erinnern, dass das erste Argument ("was") ist die vorhandene Datei, die zweite ("wo") ist der Ort, an dem sie abgelegt werden soll (ein Link dazu). Im Gegensatz zu den Überlegungen in den meisten anderen Antworten ist dies nichts weiter als eine markige Phrase, die ich mir mental beim Lesen eines Befehls vortragen kann, der als Erinnerungshilfe dient. Dies wird wahrscheinlich nicht für alle nützlich sein, aber ich vermute, dass es einigen Menschen helfen wird.

Es hilft, dass die anderen Standard-Dateibearbeitungsbefehle dieselbe Konvention verwenden, sodass ich dasselbe für cp und mv tun kann.

7
David Z

Ich habe kürzlich eine großartige Möglichkeit gehört, mich an diese besondere Sache zu erinnern: ein Reim

Etwas Altes, etwas Neues,

etwas Geliehenes, etwas Blaues,

und ein Sixpence in ihrem Schuh.

Der erste Vers ist, was die Argumente von ln sind: etwas Altes, gefolgt von einem Namen des neuen Verzeichniseintrags.

6
loa_in_
NAME    ln -- make a link
SYNOPSIS    ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1. 
            If name2 is given, the link has that name; 

Ab 1971 nix First Edition Manuals .

Es gibt eine Sekunde, einfache Syntaxform.


edit: Ich habe FILE oder FILENAME anstelle von TARGET eingefügt --- siehe Kommentare usw. siehe auch sehr langen Zusatz unten, der den Eisberg anspricht, hart und weich von ln, nicht nur die Spitze davon.


Also GNU ln hat dies:

ln [opt] FILENAME

In the 2nd form, create a link to FILENAME in the current directory.

wo Sie den Linknamen nicht benötigen. Nach ln -s /usr/lib/modules Erhalten Sie eine

modules -> /usr/lib/modules

mit dem gleichen Namen wie FILENAME ("Ziel" oder "Quelle"), genau dort, wo Sie sich befinden. Keine Wahl, keine Verwirrung.

Wenn Sie anspruchsvoller sind und den Link unter einem anderen Namen und/oder an einer anderen Stelle erstellen möchten, fügen Sie hinzu dieser Wunsch als Name oder Pfad. Das eigentliche Ziel steht an erster Stelle, der neue Fantasy-Linkname an zweiter Stelle.


Oder Sie sagen: "Ich kenne diese Pfeilnotation in ls -l Für Links. Ich habe keinen Pfeil in der Shell, der die Richtung meines Links anzeigt. Also muss ich ihn umdrehen."

Sie erstellen es in eine Richtung, damit Sie es in der anderen verwenden können.

(ENDE DES ANTWORT-DER-FRAGE-TEILS)


Auf einer anderen Ebene hat das Wort "Link" selbst eine tief verborgene Doppelbedeutung. Symbolische Links kamen später, also war ein Link in den frühen Tagen nur ein Link. Es gab keine weiche und harte, keine -s Option. Und jetzt verwende ich sogar die Quell-Ziel-Symbolik:

mv    A B   --- move the whole file to B (dir or new name)
cp    A B   --- copy whole file (mv and cp are "the same" here)    
ln    A B   --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping

Zu diesem Zeitpunkt gibt es Links, aber keine harten und weichen, und ls -l Zeigt keine Pfeile an, da in einem (harten) Link keine Richtung vorhanden ist. Ein "Link" in dieser Phase der Unix-Evolution bedeutete, dass der Dateiname "B" (Verzeichniseintrag "B") im Dateisystem auf denselben Inode verweist, auf den der Dateiname "A" verweist.

Die Dateien A und B sind miteinander "verknüpft", da sie dieselben Blöcke verwenden. Jetzt muss der Kernel bei jedem RM überprüfen: Lösche/befreie ich die Blöcke dieser Datei auf der Festplatte oder gibt es eine andere Datei, die mit denselben Blöcken verknüpft ist? Hierzu wird ein Linkzähler verwendet.

Angenommen, Sie möchten, dass eine große Datei auf/tmp grom gelöscht wird, und führen Sie ln /tmp/bigfile Aus. Jetzt haben Sie eine große Bigfile in Ihrem Arbeitsverzeichnis. Nachdem Sie/tmp bereinigt und das "Original" entfernt haben, verwenden Sie gerne dieselben Datenblöcke. Sie erhalten keinen toten oder baumelnden Link, Sie haben eine normale Datei. Zeigen auf keine Datei, sondern nur auf Dateisystemblöcke, wie dies bei jedem Verzeichniseintrag der Fall ist. Erst jetzt ist "Reinigung"/tmp nicht mehr so ​​effektiv wie früher. Es sieht leer aus und ist es auch, aber die Blöcke auf der Partition werden nicht freigegeben.

Auch wenn eine harte Verbindung nicht wie cp selbst Speicherplatz kostet, kann sie dies indirekt.

Hinzufügen von ln -s Zu der obigen Sequenz:

ln -s A B   --- copy only the file's name to "B"   

Jetzt hat "B", der Softlink, nur eine Zeichenfolge mit einem Pfadnamen. Dies ist "weiche" Informationen. Technisch gesehen sind "A" und "B" nicht miteinander verbunden. Dennoch ist B ein "Link" in dem neuen Sinne, dass Sie diesen gespeicherten Pfadnamen als Verknüpfung zu "A" verwenden können. Jetzt ist es "eine Verknüpfung zu A" (Punkt) und nicht "verknüpft mit der Inode von Datei A"

Beide Arten von Links können nicht nur Menschen, sondern auch den Kernel/fs verwirren. In der Manpage von 1971 heißt es: "BUGS: Links werden zweimal gesichert und als separate Dateien mit separaten Inodes wiederhergestellt."

Harte Links zu Verzeichnissen (selten/nicht erlaubt) können leicht zu Verstopfungen führen.

Weiche Links zu Verzeichnissen (sehr häufig) können zu ewigen Schleifen führen - müssen von Dienstprogrammen/Kernel erkannt werden.

Praktisches Beispiel in Bash

Beginnend mit einer regulären Datei "F" ...

ln F Fhard

... macht Fhard genauso groß wie F, aber beide erscheinen jetzt in einem dunkelroten OHNE Pfeile in ls -l --color. Wegen stat, das "Links: 2" in Verbindung mit "Inode: xyz" anzeigt. Durch die harte Verknüpfung von F wird F selbst zu einer harten Verknüpfung. Beide sind/bleiben Dateityp "reguläre Datei". Beide haben jedoch einen Inode mit einer Verbindungsanzahl über 1.

   ln -s F Fsoft

... macht eine winzige "unregelmäßige" Datei "Fsoft" mit dem Dateityp "symbolischer Link" - noch platzsparender als ein leeres Verzeichnis. Ein ls -l Zeigt nichts Besonderes für "F". Für Fsoft beträgt die angezeigte Größe 1 Byte, da die Zeichenfolge 'F' ist und Fsoft -> F Als Name angezeigt wird. Sie müssen keinen Softlink einfärben, um einen zu erkennen. Denn in der Kurzform ls -F Wird eine Spiralkette @ Angehängt: [email protected]

Mit ls -l Sieht es so aus:

-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root       1 Sep 16 16:31 Fsoft -> F

Fhard hat die Größe und den Typ von F.

Fsoft hat den Namen von F und die Länge von F als Größe und einen anderen Dateityp.

Kurz ls -sF:

5932 F    5932 Fhard     0 [email protected]

das Hinzufügen von --block-size=1 ergibt ebenfalls nicht die gleichen Größen. Fsoft hat die Größe "ein Byte, null Blöcke". F und Fhard weichen parallel ab:

6074368 F  6074368 Fhard    0 [email protected]

Um zu sehen, ob Fsoft baumelt oder nicht, können Sie mit ls Farben verwenden.

Orphan 40;31;01 # symlink to nonexistent file, or non-stat'able file
3
user370539

Es ist sehr hilfreich, sich daran zu erinnern, dass der Name des Links optional ist. Wenn es nicht angegeben wird, wird der Basisname des Verbindungsziels verwendet.

ln -s /path/to/file1 file1

ist identisch mit dem vollständigen Löschen des Linknamens:

ln -s /path/to/file1

Dies wäre nicht sinnvoll, wenn das Linkziel zuletzt erwähnt würde.

2
rexkogitans

Denken Sie nur an Unix -> AT & T -> Ziel rechts:

mov %eax, %ebx  ;; AT&T style assembler syntax: %ebx register gets value of %ecx

mv foo bar    ;; foo renamed to bar

cp foo bar    ;; contents of foo go to bar

foo | bar     ;; data moves left to right in pipeline

ln abc def    ;; link to abc installed as def
1
Kaz

Persönlich vermeide ich lieber erinnere mich X, um zu wissen wo ich suchen muss für X, wenn ich es brauche. Ich bin auch ein Fan der Einstellung "Besser sicher als leid", daher überprüfe ich immer gerne genau, was ich schreibe, insbesondere als Root.

In diesem Fall steht die Antwort buchstäblich in den ersten Zeilen der Manpage:

   ln [OPTION]... [-T] TARGET LINK_NAME
   (...)
   In the 1st form, create a link to TARGET with the name LINK_NAME.

Ich hätte es nicht vorgeschlagen, wenn es erforderlich wäre, in die Manpage einzutauchen, aber da es gleich am Anfang ist, ist es meiner Meinung nach die 3 Sekunden wert, die erforderlich sind, um man ln Einzugeben und zu beenden.

0
dr_