私は/etc
ディレクトリにいて、コマンドを入力しました
me@mylaptop:/etc$ Sudo mv MyFile.conf /openvpn
ファイルを/etc
ディレクトリのサブディレクトリであるopenvpn
ディレクトリに移動すると思いました。しかし、それは起こったことではないようです。確認できるのは、コマンドが実行されたことだけです。
この名前のディレクトリが存在しない場合、ファイルの名前をルートディレクトリ/
にあるopenvpn
に変更しました。これを元に戻すには、次のコマンドを実行します。
Sudo mv /openvpn /etc/MyFile.conf
ディレクトリが存在した場合、その中にファイルを移動すると、復帰は次のようになります。
Sudo mv /openvpn/MyFile.conf /etc/
現在のディレクトリの既存のサブディレクトリに移動するには、次のいずれかを実行できます。これらはrelativeパスを使用します。
mv MyFile.conf openvpn
mv MyFile.conf openvpn/
mv MyFile.conf ./openvpn
mv MyFile.conf ./openvpn/
.
は現在のディレクトリへのリンクなので、パスの先頭の./
は「このディレクトリ内」を意味します。末尾のスラッシュは、openvpn
がディレクトリであり、その中にファイルを移動することを意味します。指定しない場合、この名前のディレクトリが存在する場合、ファイルはmovedになります。それ以外の場合、ファイルはnamedをopenvpn
に変更します。最後に/
を付けると、mv
はディレクトリが見つからない場合に警告し、not名前を変更するので、名前を変更したくない場合の安全な方法。
一方、パスが/
で始まる場合は、現在の作業ディレクトリに関係なく、absoluteパスであり、常にルートディレクトリからの相対パスです。 /
。ファイルと宛先の両方に絶対パスを使用すると、コマンドは次のようになります。
mv /etc/MyFile.conf /etc/openvpn
mv /etc/MyFile.conf /etc/openvpn/
使用する必要があります
me@mylaptop:/etc$ Sudo mv MyFile.conf openvpn/
MyFile.conf
ファイルを/etc/
のopenvpn
サブディレクトリに移動します。
一方
me@mylaptop:/etc$ Sudo mv MyFile.conf /openvpn
代わりに、ファイルを/
ディレクトリにopenvpn
として移動します(つまり、openvpn
に名前を変更します)(/openvpn
ディレクトリが存在しない場合)。
ファイルを移動するときは、ファイルを入れたいディレクトリ、またはファイルに与えたい新しいパスをOSに指示します。
OSに「/ openvpn」と伝えました。だからそれは正確にそれをするつもりです-/ openvpnが存在するかどうかを確認します(ルートディレクトリにある「openvpn」と呼ばれるオブジェクトを意味します)そしてディレクトリです、ファイルを移動する場合、または/ openvpnがファイルであるか存在しない場合は、ファイルの名前を変更して移動し、/ openvpnとしてアクセスできるようにします。
あなたがそれをしたかったのは、それを現在のディレクトリにある「openvpn」ディレクトリ内に移動することでした。ファイルシステムのルートディレクトリにあるものではありません(先頭の「/"は意味します)。したがって、絶対パス "/ openvpn"ではなく、移動コマンドでthat dirを指す必要がありました。これらのいずれでも機能します。
mv MyFile.conf openvpn
-現在のディレクトリでこの「openvpn」を探しますmv MyFile.conf /etc/openvpn
-絶対パス/ etc/openvpnを探しますmv MyFile.conf openvpn/
-現在のディレクトリでopenvpnというディレクトリを探しますmv MyFile.conf ./openvpn
-「現在のディレクトリ」をさらに明確にする短いバージョン-「/」は「私の現在のディレクトリ」を意味するために使用したので、「/ openvpn」は「現在のディレクトリにあるopenvpn」を意味します。ただし、先頭の「/」は常に「ルートディレクトリ」を意味するだけなので、「/ openvpn」は「ルートディレクトリのopenvpn」を意味します。必要なのは、単に「openvpn」または「openvpn /」を使用することでした。つまり、「openvpn in my current directory "。
_/
_で始まるパスは絶対パスであり、相対パスではありません。
すべてのパスが常に現在のディレクトリからの相対パスである場合、最初にどのように_cd /etc
_を使用しますか? _cd ../../../../../etc
_で_..
_のレベルが十分であることを期待するか、ルートディレクトリに到達するまで_cd ..
_を実行し続ける必要があります。
または、絶対パスを表現する他の構文が必要です。しかし、Unixは_/
_が絶対を意味することを決定しました。したがって、_mv MyFile.txt openvpn
_は機能します。
そして、いいえ、存在するかどうかに関係なく、絶対か相対かを推測するのはうまくいきません。 mkdir
システムコールがchdir
またはrename
システムコールとは異なる方法でパスを処理することは望ましくありません。また、mv
プログラムにそれを実行させると、mv
と、出力ファイル名を取得する他のプログラムとの間の不整合の余地が残ります。
mv
はすでに特別です。これは、rename()
宛先がディレクトリの場合、ソースファイル名をその宛先ディレクトリに追加して再試行するためです。ただし、1つの単純な実装戦略は、最初のrename()
システムコールがEEXIST
またはEISDIR
で失敗することに依存していることに注意してください。したがって、ファイルシステムをチェックする前に、パスが相対パスか絶対パスかを知る必要があります。
(初期のUnixは低速のコンピューターで実行され、ディレクトリが存在するかどうかの追加のチェックは、それがキャッシュされていない場合は追加のI/Oを意味する可能性がありました。または、ディレクトリキャッシュへの圧力が高まっています。しかし、最初の推測の理由を説明するには、正気度/正しさの引数で十分だと思います歴史的な効率の議論に頼らずにシステムが機能するもっともらしい方法ではありませんでした。)
他の回答を完了するには:
mv file.txt /location
windowsの場合と同じ
mv file.txt c:\location
Linuxのfilesystemは、filesystem階層標準に従って考えられています。または [〜#〜] fhs [〜#〜] 略して。これは、ファイルの性質と内容に応じて、ファイルを配置する場所を知るのに役立ちます。
最初のフォルダー(Windowsのc:
に相当)は/
です。