Отредактируйте и перекомпилируйте отдельную программу

Это не имеет отношения к smbfs, cp всегда требует -r (рекурсивный) флаг для копирования каталога. Необходимо получить то же, при попытке cp .vim /tmp/:

$ cp .vim /tmp/
cp: omitting directory `.vim'
zsh: exit 1     cp .vim /tmp/
$ cp -r .vim /tmp/
$
4
29.04.2012, 14:22
3 ответа

разве это не было бы безопасно, чтобы сделать некоторое экспериментирование на внешнем pwd?

Это - проигранное пари, что ничто не использует /bin/pwd. Это - хорошая практика в сценариях оболочки — особенно обычно выполняемых корнем — для предоставления полных путей внешним программам из соображений безопасности.

Однако, Вы могли безопасно создать пользовательское pwd и помещенный это под в Вашем корневом каталоге где-нибудь. Если пакет использует Autoconf, этого обычно достаточно для конфигурирования пакета, который будет установлен в соответствии с корневым каталогом:

$ ./configure --prefix=$HOME

Вы могли бы сказать что-то как --prefix=$HOME/pwd-test вместо этого, для предотвращения любой возможности конфликта.

Пока система сборки пакета настраивается правильно при конфигурировании ее как этот, можно безопасно сказать make install не будучи корнем, потому что все файлы это пишет, должен пойти под префиксом, который Вы дали.

Где источник для pwd?

pwd часть coreutils. Вы узнаете такие вещи с поисковой системой пакета Debian.

Вы обычно получаете его с распределением (я нахожусь на Debian),

Вы, вероятно, еще не загрузили источники распределения, но да, это рассмотрело часть распределения Debian. Они выделены в источник с шестью дисками(!) набор DVD, включив приблизительно 25 ГБ, который является, почему большинство людей никогда не загружает их.

Если Вы не пытаетесь сделать что-то, любят, восстанавливают целое распределение Debian или создают производное распределение, тем не менее, Вы, вероятно, не должны загружать их даже сейчас. На заказ загрузки являются, вероятно, лучшей идеей на данном этапе.

Вы так или иначе устанавливаете или загружаете его?

Да, можно также использовать apt-get устанавливать исходный код для пакетов. Существует целая глава в ПРАКТИЧЕСКОМ РУКОВОДСТВЕ APT на этом.

(Что документ отмечен Устаревший, но я не вижу заменяющий документ.)

Это находится в C?

По всей вероятности, да.

Я компилирую его как какой-либо другой файл с gcc и помещаю результат (с установкой chmod) в папке, охваченной путем?

Вы, вероятно, не выполняете gcc непосредственно, Вы, вероятно, делаете стандарт configure ; make ; make install танец. При загрузке источника tarball со страницы результатов поиска пакета Debian Вы, вероятно, найдете INSTALL или README файл в tarball, который будет содержать инструкции по сборке.

Что относительно обновлений?

Что относительно них? Поисковая система пакета поможет Вам найти любую версию программного обеспечения, которое Вы, вероятно, захотите, и apt-get поможет Вам отследить изменения в источниках так же, как это будет для двоичных файлов.

Я пропускаю большое изображение здесь.

Вы могли бы хотеть смотреть на Документацию Debian, затем.

заголовочный файл, кажется, не связан: pwd как в пароле, не печатают/представляют рабочий каталог.)

Да. Это - служебный заголовок для программистов C для получения доступа к пользовательской базе данных. Сказать man 3 getpwent получить некоторое представление о том, что доступно через тот интерфейс.

7
27.01.2020, 20:46

На Linux, pwd обычно обеспечивается coreutils пакет. Можно загрузить источник с того веб-сайта, или с исходного репозитория распределения (здесь для Debian).

Можно скомпилировать pwd и другие инструменты в том пакете обычный путь: распакуйте источник и:

./configure
make

Можно изменить исходный код для pwd и перекомпилируйте, как Вы желаете (это - код C, в src/pwd.c). Но я не рекомендовал бы установить что-либо, от чего Вы изменили себя coreutils по копии Вашего распределения.

Если Вы хотите "играть" с ним, установите его на местоположении где-нибудь в Вашем корневом каталоге и предварительно ожидайте это к Вашему пути (или к пути проверочного пользователя). Только перезапишите исполняемые файлы, управляемые Вашим распределением/диспетчером пакетов, если Вы знаете точно, что Вы делаете (и знайте, как отменить это).

Это не характерно для coreutils, можно сделать это со всеми пакетами с открытым исходным кодом, которые обеспечивает распределение (и даже, которые оно не делает). Но предупреждение о не порче файлов, управляемых Вашим распределением, более важно для "системных" пакетов низкого уровня, где Вы, более вероятно, завинтите свою систему полностью.

5
27.01.2020, 20:46

Почему /bin/pwd и встроенное

/bin/pwd независимый исполняемый файл, который печатает текущий каталог. Большинство оболочек имеет a pwd встроенный по двум причинам:

  • Это - общая, простая операция; встроенное быстрее.
  • Несколько оболочек отслеживают символьные ссылки в текущем каталоге. Рассмотрите:

    $ pwd
    /home/gilles
    $ ln -s /tmp sym       # Create a symlink /home/gilles/sym -> /tmp
    $ cd sym
    $ pwd
    /home/gilles/sym       # the directory tracked by the shell
    $ /bin/pwd
    /tmp                   # the "real" location of the current directory
    $ pwd -P               # pwd -P also shows the "real" location
    /tmp
    $ cd ..
    $ pwd
    /home/gilles           # The shell stripped one level off its current directory
    $ set -P               # Turn off symlink following (in bash)
    $ cd sym
    $ pwd
    /tmp
    $ cd ..
    $ pwd
    /
    

Некоторые сценарии явно звонят /bin/pwd для предотвращения любой символьной ссылки, после которой оболочка могла бы сделать. Переопределение /bin/pwd сделать что-то еще, вероятно, повредит материал.

Где найти источник

На Debian и производных (включая Ubuntu и производные), и любая другая система, которая использует dpkg и APT для управления пакетами, можно найти, в котором упаковывают файл, путем выполнения

dpkg -S /bin/pwd

Вы будете видеть, что этот файл обеспечивается coreutils пакет.

В целом, для обнаружения исходного пакета, что этот двоичный пакет создается из, выполнение dpkg -s coreutils или apt-cache show coreutils или aptitude show coreutils; здесь, они не показывают a Source: строка, что означает, что исходный пакет имеет то же имя как двоичный пакет (это не всегда имеет место, главным образом когда исходный пакет разделяется на несколько двоичных пакетов).

Если Вы хотите получить источник, Вы не должны даже узнавать название исходного пакета. Просто выполненный

apt-get source coreutils

Это загрузит и распакует источники coreutils пакет.

См. также

Warren Young и ответы Mat, которые делают некоторые дополнительные точки.

3
27.01.2020, 20:46
  • 1
    Спасибо за Ваш ответ, и можно быть 100%, ослабленных это, я прочитал те другие ответы очень тщательно :) –  Emanuel Berg 30.04.2012, 17:36

Теги

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