디렉토리를 symbolic 링크 시켰을 때 이상한 점..

kldphjeon의 이미지


예를 들어, /usr 이라는 디렉토리를 홈디렉토리에 symbolic 링크로 연결시킴니다.
그럼 $HOME/usr 이라는 심볼릭 링크가 생기고,
cd $HOME/usr 같이 들어같을 때, /usr 에 있는 것과 같이 작동하게 되죠.

여기에서 이상한 현상이 발생하는 데,
pwd 의 결과는 $HOME/usr 로 나옴니다.
cd .. ; pwd 의 결과는 $HOME 이구요. 당연한 결과이겠죠.

근데 문제는 $HOME/usr 에서
"ls .." 명령을 치면 $HOME 의 내용이 나와야 하는 데, / 에 있는 내용이 나옵니다.
또 "cp something ../something" 이라고 하면, $HOME/something 이 생겨야하는데, /something 이 생기고요.
mv 명령어도 cp 와 같이 작동을 하고요.

parent 폴더를 나타내는 ".."이 이상하게 작동하는 것이 버그일까요?
아니면 어딘가에서 이를 컨트롤하는 설정이 있는 것인가요?

현재 페도라8을 쓰고 있습니다.

jick의 이미지

(아마도 bash를 쓰실 것이라고 생각하고 이를 기준으로 얘기하겠습니다.)

symbolic link는 그냥 "여기로 들어오려고 하면 저기로 보내"라고 가리키기만 하는 것이기 때문에, 일단 symbolic link를 통해 cd $HOME/usr 했으면 원래 정상적(?)으로는 cd /usr라고 친 것과 동일한 결과를 가져옵니다. 만약 C 프로그램에서 chdir system call을 불렀다면 당연히 이런 식으로 동작할 것이구요, 그렇게 생각하면 ls나 cp가 지금처럼 동작하는 게 설명이 되죠.

단지 cd와 pwd는 bash internal command이기 때문에, bash가 사용자의 편의를 위해서 "symbolic link를 통해 cd를 했을 경우"를 따로 기억하고 있다가 pwd 명령을 내리면 "진짜 현재 디렉토리 경로" 대신 아까 쳤던 symbolic link 경로를 보여주고, cd .. 했을 경우에도 마찬가지로 아까의 symbolic link가 마치 진짜 디렉토리 경로명인 것처럼 동작을 하는 것입니다.

pwd -P 해보시면 symbolic link가 아닌 물리적 경로를 보실 수 있습니다. 마찬가지로 cd -P .. 하시면 물리적인 상위 디렉토리로 갑니다. 현재 bash가 기억하는 경로 자체를 물리적 경로로 만들고 싶으시면 cd `pwd -P` 해보세요.

kldphjeon의 이미지

예전에는 cp 나 mv 명령어도 cd 와 같이 ".."를 해석했던 걸로 기억하는데,

예로, $HOME/usr 폴더로 들어가서 (물리적으로 /usr 폴더인거죠)
mv something ../Download
라고 명령을 하면, something 이라는 파일이 $HOME/Download 라는 폴더에 옮겨졌었는데, 지금은 그런 장소가 파일이나 디렉토리가 없다고 합니다.

제가 잘 못 기억하고 있는 것인지요.
혹시 cp 나 mv 등의 명령어도 cd 와 같은 방식으로 ".."를 해석하게 할 수 있는 방법이 없나요?

a287848의 이미지

와우 그렇군요 전. chdir 에 현재 디렉토리가 symbolic 링크를 통해 들어온 경우 다른 방식으로 처리해 줄줄 알았는데 ^^
좋은거 배워갑니다.

Dig it.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.