Linuxでファイルをシンボリックリンクするにはどうすればよいですか?[閉まっている]


1940

Linuxでシンボリックリンクを作りたい。このBashコマンドを記述しました。最初のパスはリンク先のフォルダーで、2番目のパスはコンパイル済みソースです。

ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal 

これは正しいです?


回答:


3679

新しいシンボリックリンクを作成するには(シンボリックリンクがすでに存在する場合は失敗します):

ln -s /path/to/file /path/to/symlink

シンボリックリンクを作成または更新するには:

ln -sf /path/to/file /path/to/symlink

382
@micapam ln構文は構文に似ていcpます(例:source destination)
Andrey 14

157
これがあなたのためのニーモニックです:l(i)n(k)-s(ymbolic)<target> <optional name>(最後のパラメータがオプションであるという事実は、それがターゲットではないことを理解するのに役立ちます)(ところで、 symlinkへのパスは、ターゲットと同じベース名で現在のディレクトリにリンクを作成します)
UncleZeiv

32
@micapamは同じようcpCoPylnありますLiNk。最初と3番目の文字。
コールジョンソン

68
これがなぜうまくいかないのかを理解するために、数分を費やしました。自己ループのリンクを作成しました。/ path / to / fileは絶対的であり、「現在のフォルダー」に対して相対的ではないようです。おそらくこれを答えで指摘しますか?
Abhishek Anand、2015年

52
@AbhishekAnandもう2年になりますが、相対パスで機能するというメモを残したいと思います。現在のディレクトリではなく、結果のシンボリックリンクのディレクトリに対して相対的である必要があります。最初のパス引数として書き込むのは、実際には、シンボリックリンク内にあるテキストです。それが相対的な場合、それはリンクに対して相対的でなければならない理由です。
JoL

302
ln -s TARGET LINK_NAME

どこが-s象徴的なのか。


2
TARGETとLINKNAMEは覚えやすい方法です。シンボリックリンクを削除するためのbtwの使用:unlink LINK_NAME
Silvan

31
私はこのように言いたいですln -s where-the-symlink-should-point where-to-place-the-symlink-itself
totymedli 2018年

@Silvanではシンボリックリンクを削除できますがrm、ほとんどの人は末尾を削除することを知りません/
FreeSoftwareServers

288
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME

2
受け入れられた回答よりも優れており、明確な簡潔さでカバーされています。
Josh Habdas、2018

3
ただし、新しいシンボリックリンク名ではありません。これは、名前、または名前を含む新しいシンボリックリンクの(cur dirまたは絶対パスに対する)フルパスです。
デビッドスペクター

ln -s EXISTING_FILE_OR_DIRECTORY {オプションのパス/} SYMLINK_NAME。シンボリックリンクはディレクトリではないため、末尾にスラッシュを付けないでください
comfytoday


88

(ASCII画像は1000文字に相当するためです。)

矢印は、特にEmacsのdiredでの矢印の見た目とほぼ同じなので、役立つニーモニックになる場合があります。

Windows版と混同しないように全体像を把握してください

Linux:

ln -s target <- linkName

ウィンドウズ:

mklink linkName -> target

これらを次のように見ることもできます

ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"

from-here一方で、それが作成される、まだ存在しないはずto-here既に(IIRC)が存在しなければなりません。

(私は、さまざまなコマンドと引数が既存の場所を含むべきか、それとも作成される場所を含むべきかについて常に混乱しています。)

編集:それは私にとってまだゆっくりと沈んでいます。ノートに書いた別の方法があります。

ln -s (target exists) (link is made)
mklink (link is made) (target exists)

Emacsのdired場合、ターゲットの上にカーソルを置き、を押してS、リンクを作成するディレクトリを入力するので、非常に簡単です。望ましい結果を想像することと入力することのギャップを縮めます。gnu.org/software/emacs/manual/html_node/emacs/…を参照してください。
ブレイディトレーナー2014

2
私のニーモニックはオンです:ln -s Original Newfile(symlink)
robstarbuck

これは私のために働いた
ハイダー・アリ


22

元の質問へ:


'ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal'

これにより、ファイル/ディレクトリからシンボリックリンク-s)が作成されます。

<basebuild>/IpDome-kernel/kernel

新しいリンクへ

/home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal

覚えやすくする方法は次のとおりです。

まず、のmanページがありlnます。これにアクセスするには、Googleで「man ln」を検索するか、ターミナルウィンドウを開いて入力するman lnと、同じ情報が表示されます。マニュアルページは明確に述べています:

ln [OPTION] ... [-T] TARGET LINK_NAME(1番目のフォーム)


毎回manページを検索したり読んだりする必要がない場合は、すべてのnixコマンドが同じように機能することを覚えておくと便利です。

cp /file/that/exists /location/for/new/file
mv /file/that/exists /location/its/moving/to
ln /file/that/exists /the/new/link

cp 現在存在するファイル(最初の引数)を新しいファイル(2番目の引数)にコピーします。
mv 現在存在するファイル(最初の引数)を新しい場所(2番目の引数)に移動します

同様にln、現在存在するファイル(最初の引数)を新しいリンク(2番目の引数)にリンクします*


私が提案したい最後のオプションは、あなたが読みやすく、(あなたにとって)見つけやすく、覚えやすい、あなた自身のマニュアルページを作成できることです。必要なヒントを提供する単純なシェルスクリプトを作成するだけです。例えば

.bash_aliasesファイルには、次のようなものを配置できます。

commandsfx() {
    echo "Symlink:  ln -s /path/to/file /path/to/symlink"
    echo "Copy:     cp /file/to/copy /destination/to/send/copy"
}

alias 'cmds'=commandsfx

その後、必要に応じて、コマンドラインから入力するだけでcmds、適切な構文をすばやく読み取って理解できるようになります。これらの機能は、必要な情報を取得したいだけ高度なものにすることができます。インタラクティブにすることもできるので、プロンプトに従う必要があります。

makesymlink() {
    echo "Symlink name:"
    read sym
    echo "File to link to:"
    read fil
    ln -s $fil $sym
}

alias 'symlink'=makesymlink

*-もちろん、それらはすべて異なるパラメーターを取り、異なることを行うことができ、ファイルだけでなくディレクトリでも機能します...しかし、前提は同じです
♦-bashシェルを使用した例


18
ln [-Ffhinsv] source_file [target_file]

    link, ln -- make links

        -s    Create a symbolic link.

    A symbolic link contains the name of the file to which it is linked. 

    An ln command appeared in Version 1 AT&T UNIX.

16

Linuxでのシンボリックリンクまたはソフトリンクの作成:

Bashプロンプトを開き、下記のコマンドを入力してファイルへのシンボリックリンクを作成します。

A)ソフトリンクを作成するフォルダーに移動し、次のようにコマンドを入力します

$ ln -s (path-to-file) (symbolic-link-to-file)
$ ln -s /home/user/file new-file

B)新しいファイル名のパスに移動し、次のように入力します。

$ ls -lrt (To see if the new-file is linked to the file or not)

例:

user@user-DT:[~/Desktop/soft]# ln -s /home/user/Desktop/soft/File_B /home/user/Desktop/soft/File_C
user@user-DT:[~/Desktop/soft]# ls -lrt
total 0
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_B
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_A
lrwxrwxrwx 1 user user 31 Dec 27 16:53 File_C -> /home/user/Desktop/soft/File_B


Note: Where, File_C -> /home/user/Desktop/soft/File_B  Means, File_C is symbolically linked to File_B

12

ln -s sourcepath linkpathname

注意:

-sはハードリンクの代わりにシンボリックリンクを作成します


11

symlinkを作成するディレクトリにいる場合は、2番目のパスは無視してください。

cd myfolder
ln -s target

target内部のシンボリックリンクを作成しますmyfolder

一般的な構文

ln -s TARGET LINK_NAME

11

これはスタックオーバーフローなので、コードが必要だと思います。

すべての次のコードは、名前のシンボリックリンクを作成することを想定してい/tmp/linkたリンクにあることを/tmp/realfile

注意:このコードはエラーをチェックしますが、/tmp/realfile実際に存在するかどうかはチェックしません!これはデッドリンクがまだ有効であり、コードによっては実際のファイルの前にリンクを作成したい場合があるためです。


シェル(bash、zsh、...)

#!/bin/sh
ln -s /tmp/realfile /tmp/link

コマンドライン(シェル)で実行するのと同じように、非常に単純です。すべてのエラー処理は、シェルインタープリターによって行われます。このコードは、で動作するシェルインタープリターがあることを前提としています/bin/sh

必要に応じて$?、リンクが正常に作成された場合にのみ0に設定される変数を使用して、独自のエラー処理を実装することもできます。

CおよびC ++

#include <unistd.h>
#include <stdio.h>

int main () {
  if( symlink("/tmp/realfile", "/tmp/link") != 0 )
    perror("Can't create the symlink");
}

symlinkリンクを作成できる場合にのみ0を返します。他の場合ではperror、問題の詳細を伝えるために使用しています。

Perl

#!/usr/bin/perl
if( symlink("/tmp/realfile", "/tmp/link") != 1) {
  print STDERR "Can't create the symlink: $!\n"
}

このコードは、perl 5インタープリターがにいることを前提としています/usr/bin/perlsymlinkリンクを作成できる場合にのみ1を返します。他の場合では、失敗の理由を標準エラー出力に出力します。


1
説明が追加され、デッドリンクに関する注意事項も追加されました。私はこれをチェックしていません。なぜなら、これが望まれていないと想定することはできず、またファイルテストがもはやトピック上にないためです
Garo

8

私はすでに提示された説明の平易な英語バージョンを提示したいと思います。

 ln -s  /path-text/of-symbolic-link  /path/to/file-to-hold-that-text

「ln」コマンドはリンクFILEを作成し、「-s」はリンクのタイプがシンボリックであることを指定します。シンボリックリンクファイルの例は、WINEインストールにあります(「ls -la」を使用して、ディレクトリの内容の1行を表示します)。

 lrwxrwxrwx 1 me power 11 Jan  1 00:01 a: -> /mnt/floppy

標準のファイル情報は左側にあります(ただし、最初の文字は「リンク」の「l」です)。ファイル名は「a:」で、「->」はファイルがリンクであることも示します。これは基本的に、Windowsの「ドライブA:」をLinuxのフロッピードライブに関連付ける方法をWINEに伝えます。実際にシンボリックリンクを作成するには(現在のディレクトリにあり、実際にWINEでこれを行うにはより複雑です。 "winecfg"ユーティリティを使用します):

 ln -s  /mnt/floppy  a:   //will not work if file a: already exists

7

シンボリックリンク/ソフトリンクを作成するには、次のコマンドを使用します。

ln -s {source-filename} {symbolic-filename}

例えば:

ln -s file1 link1

4

リンクには2つのタイプがあります。

シンボリックリンク:別のファイルの抽象的な場所を示すシンボリックパスを参照

ハードリンク:物理データの特定の場所を参照します。

あなたの場合、シンボリックリンク:

ln -s source target

http://man7.org/linux/man-pages/man7/symlink.7.htmlを参照できます

あなたはあまりにもハードリンクを作成することができます

ファイルへのハードリンクは、元のディレクトリエントリと区別できません。ファイルへの変更は、ファイルを参照するために使用される名前から実質的に独立しています。ハードリンクは通常、ディレクトリを参照しない場合があり、ファイルシステムにまたがらない場合があります。

ln source link

4

リンクには、基本的に2つのタイプがあります。

シンボリックリンク(ソフト):別のファイルの抽象的な場所を示すシンボリックパスへのリンク

ハードリンク:物理データの特定の場所へのリンク。

例1:

ln /root/file1 /root/file2

上記は、物理データのコピーを保持できるハードリンクの例です。

例2:

ln -s /path/to/file1.txt /path/to/file2.txt

上記のコマンドは、file1.txtへのシンボリックリンクを作成します。

ソースファイルを削除すると、ソフトの宛先には何もありません。

あなたがするとき:

ls -lai

シンボリックリンクには異なるiノード番号があることがわかります。

詳細については、Linux OSのlnのmanページを参照してください。


hard link where you can have a copy of your physical data- 物理データのコピーは作成しないと思います。同じ物理データの単なる別名。
Alexander Radchenko

3

男性情報の「ターゲット」と「ディレクトリ」という用語を少し混乱させています。

ターゲットは、シンボリックリンク先のフォルダーと実際のシンボリックリンクのディレクトリです(シンボリックリンク先のディレクトリではありません)。同じ混乱が発生している場合は、一人でいるのではなく、気をつけてください。

これは、Symlinkの作成に関する私の解釈です(Linuxの場合):

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

シンボリックリンクを作成するフォルダーに移動してコマンドを実行するか、NAME-OF-YOUR-SYMLINKの代わりにシンボリックリンクのフルパスを指定できます。

cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

または

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER/NAME-OF-YOUR-SYMLINK

私はこれが(まだ)少し混乱している人々に役立つことを願っています。


-2

浮浪者でシンボリックリンクを作成する方法。手順:

  1. vagrant fileで同期フォルダーを作成します。例:config.vm.synced_folder "F:/ Sunburst / source / sunburst / lms"、 "/ source" F:/ Sunburst / source / sunburst / lms:-where source code、/ source:-vagrant内のディレクトリパス
  2. Vagrant upと入力してvagrant sshと入力し、ソースディレクトリに移動します(例:cd source)。
  3. ソースコードのフォルダー構造がソースディレクトリで使用できることを確認します。例/ source / local
  4. 次に、ブラウザに関連付けられているファイルがあるゲストマシンディレクトリに移動します。ファイルのバックアップを取得した後。例:sudo mv local local_bk
  5. 次に、symリンクを作成します(例:sudo ln -s / source / local local)。ローカルシンボリックリンクを削除する必要がある場合は、リンク名(リンクするゲストマシンのフォルダー名)を意味します。sudo rm localと入力します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.