Linuxでシンボリックリンクを作りたいです。このbashコマンドは、最初のパスがリンク先のフォルダーで、2番目のパスがコンパイル済みソースです。
ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
これは正しいです?
新しいシンボリックリンクを作成するには(シンボリックリンクがすでに存在する場合は失敗します):
ln -s /path/to/file /path/to/symlink
シンボリックリンクを作成または更新するには
ln -sf /path/to/file /path/to/symlink
ln -s TARGET LINK_NAME
-s
がそれを象徴的にしているところ。
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
(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)
ln -s source_file target_file
元の質問へ:
'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シェルを使用した例
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.
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
ln -s sourcepath linkpathname
注意:
-s ハードリンクの代わりにシンボリックリンクを作成します。
シンボリックリンクを作成したいディレクトリにいる場合は、2番目のパスを無視してください。
cd myfolder
ln -s target
target
の中にmyfolder
のシンボリックリンクを作成します。
一般的な構文
ln -s TARGET LINK_NAME
これはスタックオーバーフローなので、コードが必要だと思います。
以下のすべてのコードは、/tmp/link
にリンクする/tmp/realfile
という名前のシンボリックリンクを作成すると想定しています。
_注意_ :このコードはエラーをチェックしますが、実際に/tmp/realfile
が存在するかどうかはチェックしません。これは、無効なリンクがまだ有効であり、コードによっては実際のファイルの前にリンクを作成したくない場合があるためです。
#!/bin/sh
ln -s /tmp/realfile /tmp/link
シェルであるコマンドラインで実行するのと同じように、とても簡単です。すべてのエラー処理はシェルインタプリタによって行われます。このコードは、あなたが/bin/sh
に動作するシェルインタプリタを持っていると仮定します。
必要に応じて、リンクが正常に作成された場合にのみ0に設定される$?
変数を使用して、独自のエラー処理を実装することもできます。
#include <unistd.h>
#include <stdio.h>
int main () {
if( symlink("/tmp/realfile", "/tmp/link") != 0 )
perror("Can't create the symlink");
}
リンクを作成できる場合、symlink
は0のみを返します。他の場合では、私はperror
を使って問題についてもっと詳しく伝えています。
#!/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を返します。それ以外の場合は、失敗の理由を標準エラー出力に出力します。
私はすでに提示された説明の平易な英語版を提示したいのですが。
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
シンボリックリンク/ソフトリンクを作成するには、次のようにします。
ln -s {source-filename} {symbolic-filename}
例えば。:
ln -s file1 link1
2種類のリンクがあります。
シンボリックリンク:他のファイルの抽象的な場所を示すシンボリックパスを参照
ハードリンク:物理データの特定の場所を参照してください。
あなたのケースではシンボリックリンク:
ln -s source target
http://man7.org/linux/man-pages/man7/symlink.7.html を参照することができます。
あなたは硬すぎるリンクを作成することができます
ファイルへのハードリンクは、元のディレクトリエントリと区別がつきません。ファイルに対する変更は、ファイルを参照するために使用される名前とは事実上無関係です。ハードリンクは通常ディレクトリを参照しないかもしれず、ファイルシステムにまたがらないかもしれません。
ln source link
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種類あります。
シンボリックリンク(ソフト):他のファイルの抽象的な場所を示すシンボリックパスへのリンク
ハードリンク:物理データの特定の場所へのリンク。
例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を読むことができます。
ありがとう