Linuxでシンボリックリンクを作りたい。このBashコマンドを記述しました。最初のパスはリンク先のフォルダーで、2番目のパスはコンパイル済みソースです。
ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
これは正しいです?
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
構文は構文に似ていcp
ます(例:source destination)。
cp
でCoPy
、ln
ありますLiNk
。最初と3番目の文字。
ln -s TARGET LINK_NAME
どこが-s
象徴的なのか。
unlink LINK_NAME
ln -s where-the-symlink-should-point where-to-place-the-symlink-itself
。
rm
、ほとんどの人は末尾を削除することを知りません/
。
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
(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)
dired
場合、ターゲットの上にカーソルを置き、を押してS
、リンクを作成するディレクトリを入力するので、非常に簡単です。望ましい結果を想像することと入力することのギャップを縮めます。gnu.org/software/emacs/manual/html_node/emacs/…を参照してください。
ln -s source_file target_file
man ln
これはそれを呼び出すln -s TARGET LINK_NAME
元の質問へ:
'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シェルを使用した例
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
ln -s sourcepath linkpathname
注意:
-sはハードリンクの代わりにシンボリックリンクを作成します
これはスタックオーバーフローなので、コードが必要だと思います。
すべての次のコードは、名前のシンボリックリンクを作成することを想定してい/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"
}
このコードは、perl 5インタープリターがにいることを前提としています/usr/bin/perl
。symlink
リンクを作成できる場合にのみ1を返します。他の場合では、失敗の理由を標準エラー出力に出力します。
私はすでに提示された説明の平易な英語バージョンを提示したいと思います。
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
リンクには2つのタイプがあります。
シンボリックリンク:別のファイルの抽象的な場所を示すシンボリックパスを参照
ハードリンク:物理データの特定の場所を参照します。
あなたの場合、シンボリックリンク:
ln -s source target
http://man7.org/linux/man-pages/man7/symlink.7.htmlを参照できます
あなたはあまりにもハードリンクを作成することができます
ファイルへのハードリンクは、元のディレクトリエントリと区別できません。ファイルへの変更は、ファイルを参照するために使用される名前から実質的に独立しています。ハードリンクは通常、ディレクトリを参照しない場合があり、ファイルシステムにまたがらない場合があります。
ln source link
リンクには、基本的に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
- 物理データのコピーは作成しないと思います。同じ物理データの単なる別名。
男性情報の「ターゲット」と「ディレクトリ」という用語を少し混乱させています。
ターゲットは、シンボリックリンク先のフォルダーと実際のシンボリックリンクのディレクトリです(シンボリックリンク先のディレクトリではありません)。同じ混乱が発生している場合は、一人でいるのではなく、気をつけてください。
これは、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
私はこれが(まだ)少し混乱している人々に役立つことを願っています。
浮浪者でシンボリックリンクを作成する方法。手順: