Принятие Вас использует ext3, могло бы быть возможно восстановить его, если бы заменяющий файл был создан как другой inode (вместо того, чтобы перезаписать существующий файл), при помощи debugfs
в размонтированной файловой системе, и найти inode исходного файла. К сожалению, если Ваши colleage перезаписывают файл, вместо того, чтобы переместить его в сторону и затем удалить его, это пошло. Я предложил бы использовать debugfs
с экстремальной осторожностью, потому что можно серьезно испортить файловую систему. Это - использование, только действительно для последней попытки.
cd
команда изменяет "текущий рабочий каталог", право?
"текущий рабочий каталог" является свойством, которое уникально для каждого процесса.
Так, если cd
была программа, она будет работать как это:
cd foo
cd
процесс запускаетсяcd
обработайте изменяет каталог для процесса CDcd
выходы процессаcd
в дополнение к тому, чтобы быть встроенной оболочкой, на самом деле также программа на POSIX совместимые Ose. Они должны обеспечить независимые исполняемые файлы для регулярных утилит, как cd
. Это, например, имеет место с Солярисом, AIX, HP-UX и OS X.
Очевидно, встроенное cd
все еще обязательно, поскольку его внешняя реализация не изменяет текущий каталог оболочки. Однако последний может все еще быть полезным. Вот пример, показывающий, как POSIX предполагает как это cd
команда могла использоваться:
find . -type d -exec cd {} \;
В системе POSIX эта острота сообщит о сообщении об ошибке для всех каталогов, которым Вас не разрешают cd
в. На большей части Гну/еистрибутивов Linux это перестало работать с тем сообщением об ошибке хотя:
find: `cd': No such file or directory
И здесь ответ к Вашему вопросу, "Почему CD не является программой?" одним из исходного соавтора Unix. На очень ранней реализации Unix, cd
(записанный chdir
в то время), была внешняя программа. Это просто прекратило работать неожиданно после fork
был сначала реализован.
Заключение в кавычки Dennis Ritchie:
Посреди нашего ликования было обнаружено, что chdir (изменяют текущий каталог) команда прекратил работать. Было много чтения кода и тревожного самоанализа о том, как добавление ветвления, возможно, повредило вызов chdir. Наконец истина рассветала: в старой системе chdir был обычной командой; это скорректировало текущий каталог (уникального) процесса, подключенного к терминалу. Под новой системой команда chdir правильно изменила текущий каталог процесса, созданного для выполнения его, но этот процесс, быстро завершенный и, не имел никакого эффекта вообще на его родительскую оболочку! Было необходимо сделать chdir специальной командой, выполняемой внутренне в оболочке. Оказывается, что несколько подобных команде функций имеют то же свойство, например, входят в систему.
Источник: Dennis M. Ritchie, “Эволюция Системы с разделением по времени Unix”, AT&T Bell Laboratories Технический Журнал 63 (6), Часть 2, октябрь 1984, pp.1577–93
Версия 1 Unix (март 1971) chdir состояния страницы руководства:
Поскольку новый процесс создается для выполнения каждой команды, chdir был бы неэффективен, если бы это было записано как нормальная команда. Это поэтому распознано и выполнено Shell.
cd
исполняемый файл, но что это ничего не должно делать (кроме возможно испускают сообщения об ошибках, если названо с неправильными аргументами). Странный.
– Ilmari Karonen
17.05.2012, 00:39
От введения Bash (Что такое оболочка?):
Оболочки также обеспечивают маленький набор встроенных команд (builtins) реализация функциональности, невозможной или неудобной для получения через отдельные утилиты. Например,
cd
,break
,continue
, иexec
) не может быть реализован за пределами оболочки, потому что они непосредственно управляют самой оболочкой.history
,getopts
,kill
, илиpwd
builtins, среди других, мог быть реализован в отдельных утилитах, но они более удобны для использования в качестве встроенных команд. Вся оболочка builtins описана в последующих разделах.
Для Жертвы первоапрельской шутки в этом году, я записал автономную версию cd
.
Никто не получил шутку. Вздох.
Любой, кто не уверен это cd
должен быть встроен в оболочку, должен загрузить его, создать его и попробовать его.
Прочитайте его страницу справочника, также.:)
CD является оболочкой встроенная команда. Столь легкий, как. CD человека говорит все это. команда CD изменяет рабочий каталог для всех интерпретаторов и (в потоковой среде) все потоки.
cd
встроено. Я предположил бы, что Вы читаете самые высокие оцениваемые ответы и рассматриваете, как Ваш ответ может быть улучшен.
– Thorbjørn Ravn Andersen
17.05.2012, 19:22
Я думаю одна вещь, отсутствующая у людей, которые ответ - то, что текущий каталог является переменной среды, которую может изменить каждая программа. При использовании команды 'экспорта' для наблюдения текущего списка переменных среды, Вы будете иметь:
declare -x PWD="/home/erfan"
в Ваших результатах. Таким образом 'CD' управляют, чтобы мы просто хотели изменить эту внутреннюю переменную. Я думаю, пробуем ли мы, мы можем chage переменная PWD любого имущества в оболочке, конечно. Как:
cder #change current PTY $PWD variable
Но я не думаю там s никакая потребность в нормальных случаях. В другом слове мы берем справку от удара (или любая оболочка) для изменения ее определенной внутренней переменной.
..
путь, не путь Вы запустили его с: #include <stdlib.h>
int main(void) { chdir(".."); puts(getenv("PWD")); }
(Оболочки C выставляют CWD как %cwd вместо этого, между прочим.)
– Warren Young
23.05.2012, 19:59
#include <unistd.h>
int main(void) { char ac[99]; setenv("PWD", "/", 1); puts(getcwd(ac, sizeof(ac))); }
Это покажет каталог, Вы запустили программу от, нет /
.
– Warren Young
25.05.2012, 11:02
$PWD
только имеет значение к Оболочке Bourne. Это - просто путь к оболочке для передачи чего-то, что это знает к сценариям оболочки, таким образом, они не должны звонить pwd
найти его. Любая автономная программа в зависимости от значения $PWD
будет ненадежно.
– Warren Young
25.05.2012, 12:26
Команда cd
в оболочке не может быть отдельным процессом, потому что в Unix нет механизма для изменения текущего рабочего каталога другого процесса (даже родительского процесса).
Если бы cd
был другим процессом, ему пришлось бы изменить текущий рабочий каталог своего родителя (оболочки), что невозможно в Unix.
Вместо cd
- это специальная встроенная команда. Оболочка вызывает такие функции, как chdir ()
и fchdir ()
, изменяя свой собственный текущий рабочий каталог.
Примечание: ядро хранит номер inode текущего рабочего каталога для каждого процесса. Дочерний процесс наследует свой cwd
от своего родителя.
cd
если бы программа был, это будет работать как это", то должен быть "когдаcd
используется в его внешней реализации программы, она действительно работает как это". – jlliagre 19.05.2012, 15:21