может относительный путь доступа более чем на один уровень?

Я новичок в Linux, и мне было интересно, может ли относительный путь получить доступ более чем к одному уровню.

Например:

/home/john/Desktop/Myfiles/text.txt

Если я в настоящее время на ~/, могу ли я перейти к text.txt без необходимости писать Desktop/Myfiles/ на моем пути?

0
задан 15 April 2019 в 00:20

2 ответа

Да, все пути могут иметь несколько компонентов. «Относительные» пути не начинаются с «/», а начинают поиск в текущем каталоге. «Абсолютные» пути начинаются с «/» и начинаются с поиска корня дерева файловой системы, также называемого «/».

Таким образом, вы можете использовать следующие пути:

cd $HOME
ls Desktop/MyFiles/text.txt

или:

cd $HOME/Desktop/MyFiles
ls text.txt

В любом случае ls /etc/passwd будет ссылаться на один и тот же файл.

0
ответ дан 15 April 2019 в 00:20

Пропуск частей пути не может быть сделан, который является Вами, не может сделать чего-то как cd ~/.../Myfiles . Предположим, что Вы имеете /home/john/Desktop/Myfiles/ и /home/john/Documents/Myfiles. Когда Вы хотите перейти к Myfiles, какой Вы имеете в виду? Один в ~/Desktop или ~/Documents. Существенная причина состоит в том, потому что структура каталогов организована в дерево, где каждый предыдущий элемент должен иметь родительский элемент. Таким образом вопрос становится, кто родительский каталог Myfiles когда существует два из них?

Однако существует несколько вещей, которые помогают навигации по долгим путям:

  • сохраните полный путь к переменной. Сказать myfiles=/home/john/Desktop/Myfiles. При запуске оболочки Вы уже имеете $HOME специальная переменная или Вы можете использовать расширение тильды cd ~/Desktop/Myfiles
  • использовать pushd и popd. Shell знали что-то как "стопку каталога", которая может использоваться для записи последовательности каталогов. Например, если я делаю

    $ pushd /etc
    /etc ~
    
    $ pushd /sys/class/backlight/intel_backlight/
    /sys/class/backlight/intel_backlight /etc ~
    
    $ pushd .
    /sys/class/backlight/intel_backlight /sys/class/backlight/intel_backlight /etc ~
    

    Заметьте, что в dirstack самый первый объект указывает на текущий рабочий каталог, в то время как второй объект остается неизменным даже если Вы cd в другом месте. Это то, почему pushd . был добавлен. Теперь, если мы перешли в другом месте, /sys/class/backlight/intel_backlight будет сохранен на стеке, и мы можем всегда возвращаться к нему.

    # navigate elsewhere after pushd .
    $ cd /var/log
    $ cd /usr/share
    # check what's in the stack
    $ echo ${DIRSTACK[@]}
    /usr/share /sys/class/backlight/intel_backlight /etc /home/ubuntuadmin
    # go to one of the directories on the stack
    $ cd ${DIRSTACK[1]}
    $ pwd
    /sys/class/backlight/intel_backlight
    # remember that very first item changes, it's the current working directory
    $ echo ${DIRSTACK[@]}
    /sys/class/backlight/intel_backlight /sys/class/backlight/intel_backlight /etc /home/ubuntuadmin
    
  • Используйте символьные ссылки. Пример:

    $ ln -s /var/log ~/logs
    $ cd ~/logs
    

    Теперь вместо выполнения cd /var/log можно сделать cd ~/logs. Тривиальный пример, но воображают если /var/log было что-то как /media/external_harddrive/someproject/subproject/data/bignumbers/calculations/ . Мы можем просто сделать cd ~/calculations затем, если у нас есть символьная ссылка. Конечно, недостаток символьных ссылок - то, что, когда каталог переименован или удален, символьная ссылка остается и становится поврежденной, но это, простая фиксация - или воссоздает полный путь к символьной ссылке или удаляет символьную ссылку, и создайте новый. Мы можем также создать символьную ссылку, которая указывает на символьную ссылку, которая указывает на фактический каталог, но остерегайтесь того ядра Linux ограничения слишком много уровней символьных ссылок (и Вы получили бы ошибку, которая говорит точно, что), если существует больше чем 40 символьных ссылок.

    Если цель состоит в том, чтобы создать быстрый способ открыть файл text.txt подход символьной ссылки может помочь нам с этим

    $ echo 'Hello, this is a test' > ~/Documents/another_directory/file.txt
    $ ln -s ~/Documents/another_directory/file.txt ~/file.symlink
    $ cat ~/file.symlink 
    Hello, this is a test
    $ 
    
  • Можно использовать inode числа. Это часто используется для контакта с трудными именами файлов, где заключение в кавычки и специальные символы становится проблемой. Например, если мы знаем inode каталога

    # return $HOME
    $ cd
    # find the inode
    $ ls -id  ~/Documents/things
    1205421 /home/ubuntuadmin/Documents/things
    # go to the directory by inode
    $ cd "$(find -inum 1205421)"
    $ pwd
    /home/ubuntuadmin/Documents/things
    

    Проблема с этим подходом - это медленно и неэффективно, начиная с рекурсивного обхода через find и проверка всего inodes по пути требует времени и большого количества syscalls.

1
ответ дан 15 April 2019 в 00:20

Другие вопросы по тегам:

Похожие вопросы: