web-dev-qa-db-ja.com

Linuxでファイルをシンボリックリンクする方法

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

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

これは正しいです?

1766
chrissygormley

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

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

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

ln -sf /path/to/file /path/to/symlink
3444
hsz
ln -s TARGET LINK_NAME

-sがそれを象徴的にしているところ。

278
cyborg
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
268
codaddict
ln -s target linkName

こちらのmanページを見てください。

http://linux.die.net/man/1/ln

88
rui

(ASCII画像は1000文字の価値があるため)

矢印は、Emacsのdiredの中ではほぼ正確に表示されるので、特に便利なニーモニックになるかもしれません。

全体像なので、Windowsのバージョンと混同しないでください。

Linux:

ln -s target <- linkName

Windows:

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)
78
Brady Trainor
ln -s source_file target_file

http://unixhelp.ed.ac.uk/CGI/man-cgi?ln

24
Rob M

元の質問へ:


'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

覚えておくためのいくつかの方法を次に示します。

まず、 lnのマニュアルページ があります。 Googleで「man ln」を検索するか、ターミナルウィンドウを開いてman lnと入力すると、同じ情報が得られます。マニュアルページには次のように明記されています。

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


毎回マニュアルページを検索したり読んだりする必要がない場合は、すべての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番目の引数)にリンクします*


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

.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
Mike
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
miku

Linuxでシンボリックリンクまたはソフトリンクを作成する

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

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)

例:

ls -lrt

lrwxrwxrwx 1 user user 24 Aug 6 23:40 new-file -> /home/user/file

Note: Where, A -> B Means, A is symbolically linked to B

12
Ankit Raj

ln -s sourcepath linkpathname

注意:

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

11
simranjeet

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

cd myfolder
ln -s target

targetの中にmyfolderのシンボリックリンクを作成します。

一般的な構文

ln -s TARGET LINK_NAME
10
Fizer Khan

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

以下のすべてのコードは、/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"
}

このコードは/usr/bin/PerlにPerl 5インタプリタがあると仮定しています。 symlinkは、リンクを作成できる場合にのみ1を返します。それ以外の場合は、失敗の理由を標準エラー出力に出力します。

9
Garo

私はすでに提示された説明の平易な英語版を提示したいのですが。

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

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

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

標準のファイル情報は左側にあります(ただし、最初の文字は "link"を表す "l"です)。ファイル名は "a:"で、 " - >"もファイルがリンクであることを示します。それは基本的にはWindowsに "Drive A:"がLinuxのフロッピードライブにどのように関連付けられるべきかを伝えます。それにシンボリックリンクSIMILARを実際に作成するには(現在のディレクトリに、そして実際にこれを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
6
Prem S

2種類のリンクがあります。

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

ハードリンク:物理データの特定の場所を参照してください。

あなたのケースではシンボリックリンク:

ln -s source target

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

あなたは硬すぎるリンクを作成することができます

ファイルへのハードリンクは、元のディレクトリエントリと区別がつきません。ファイルに対する変更は、ファイルを参照するために使用される名前とは事実上無関係です。ハードリンクは通常ディレクトリを参照しないかもしれず、ファイルシステムにまたがらないかもしれません。

ln source link
3
wpp

Man情報の中で用語 "target"と "directory"を少し混乱させています。

誰かが同じ混乱を経験しているのであれば、ターゲットは、私たちがシンボリックリンクしているフォルダと実際のシンボリックリンクのディレクトリです(シンボリックリンクされるディレクトリではありません)。

これはシンボリックリンクを作成する私の解釈です(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

OR

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

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

2
mmmdearte

リンクは基本的に2種類あります。

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

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

例1:ln/root/file1/root/file2

上記は、あなたがあなたの物理的なデータのコピーを持つことができるハードリンクの例です。

例2:ln -s /path/to/file1.txt /path/to/file2.txt

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

あなたがソースファイルを削除した場合、あなたはSoftの目的地に何も持っていないでしょう

あなたがするとき:

ls-lai

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

詳細については、Linux OSでlnのmanを読むことができます。

ありがとう

2
Prabhat Singh