Нет никакой встроенной команды, но можно легко записать функцию, которая звонит mkdir
затем cd
:
mkcd () {
mkdir "$1"
cd "$1"
}
Вставьте этот код Ваш ~/.bashrc
файл (или ~/.kshrc
для ksh пользователей, или ~/.zshrc
для zsh пользователей). Это определяет вызванную функцию mkcd
. "$1"
будет заменен аргументом функции, когда Вы выполните его.
Эта простая версия имеет несколько дефектов:
-p
опция к mkdir
. (Это может или не может быть желательно, поскольку это увеличивает риск опечатки, идущей необнаруженный, например. mkcd mydierctory/newsub
счастливо создаст mydierctory
и mydierctory/newsub
когда Вы означали создавать newsub
в существующем mydirectory
.)-
но не просто -
, затем mkdir
и cd
интерпретирует его как опцию. Если это справедливо -
, затем cd
интерпретирует его для значения $OLDPWD
. Если это +
сопровождаемый 0 или больше цифрами, затем cd
в zsh интерпретирует его как индекс в стопке каталога. Можно решить первую проблему, но не другие два, путем передачи --
перед аргументом. Можно решить все эти проблемы путем предварительного ожидания ./
к аргументу, если это - относительный путь.mkdir
не следует CDPATH
, но cd
делает, поэтому если Вы установили CDPATH
к значению, которое не начинается .
(по общему признанию несколько необычная конфигурация), затем cd
может принести Вам к другому каталогу, чем тот, который был просто создан. Предварительное ожидание ./
к относительным путям фиксирует это (это вызывает CDPATH
быть проигнорированным).mkdir
сбои, это пытается выполниться cd
. Зафиксируйте: использовать &&
разделить две команды.Все еще довольно простой:
mkcd () {
case "$1" in /*) :;; *) set -- "./$1";; esac
mkdir -p "$1" && cd "$1"
}
Эта версия все еще имеет потенциал для создания cd
войдите в другой каталог от того это mkdir
просто созданный в одном пограничном случае: если аргумент mkcd
содержит ..
и проходит символьную ссылку. Например, если текущий каталог /tmp/here
и mylink
символьная ссылка на /somewhere/else
, затем mkdir mylink/../foo
создает /somewhere/else/foo
тогда как cd mylink/../foo
изменения в foo
. Недостаточно искать символьные ссылки в аргументе, потому что оболочка также отслеживает символьные ссылки в своем собственном текущем каталоге, таким образом, cd /tmp/mylink; mkdir ../foo; cd ../foo
не изменяется в новый каталог (/somewhere/else/foo
) но в /tmp/foo
. Фиксация для этого должна позволить cd
встроенная твердость все ..
компоненты контура сначала (не имеет смысла использовать foo/..
если foo
не существует, таким образом, mkdir
никогда потребности не видеть никого ..
).
Мы приезжаем в это устойчивое если немного окровавленная версия:
mkcd () {
case "$1" in
*/..|*/../) cd -- "$1";; # that doesn't make any sense unless the directory already exists
/*/../*) (cd "${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd -- "$1";;
/*) mkdir -p "$1" && cd "$1";;
*/../*) (cd "./${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd "./$1";;
../*) (cd .. && mkdir -p "${1#.}") && cd "$1";;
*) mkdir -p "./$1" && cd "./$1";;
esac
}
(Осуществление: почему я использую подоболочку для первого cd
звонить?)
Если mkdir перестал работать, я хочу убедиться не изменить текущий каталог. Возврат с CD - или $OLDPWD не достаточно хорош, если оболочка не имеет разрешения измениться в его текущий каталог. Кроме того, вызов CD обновляет OLDPWD, таким образом, мы только хотим сделать это однажды (или восстановить OLDPWD).
Существуют также менее специализированные способы не должным быть перепечатать слово от предыдущей строки:
cd
, затем Esc. (или Высокий звук +.) для вставки последнего аргумента от предыдущей команды.cd !$
выполняется cd
на последнем аргументе предыдущей команды.mkdir
в cd
.В моем уме единственное преимущество Вы действительно добираетесь от компиляции Вашего собственного ядра Linux:
Вы изучаете, как скомпилировать Ваше собственное ядро Linux.
Это не что-то, что необходимо сделать для большей скорости / память / xxx безотносительно. Это - ценная вещь сделать, если это - этап, Вы чувствуете, что Вы в в Вашей разработке. Если Вы хотите иметь более глубокое понимание того, что эта целая вещь "с открытым исходным кодом" о, о том, как и каковы различные части ядра, то необходимо дать ему движение. Если Вы просто надеетесь ускорять свое время начальной загрузки на 3 секунды, то... какой смысл... идут, покупают ssd. Если Вам любопытно, если Вы хотите учиться, то компиляция Вашего собственного ядра является прекрасной идеей, и Вы, вероятно, вытащите много из него.
После этих слов существуют некоторые определенные причины, когда было бы уместно скомпилировать Ваше собственное ядро (как несколько человек указали в других ответах). Обычно они проистекают из определенной потребности, которую Вы имеете для определенного результата, например:
Проблема находится в размышлении, что существует некоторое внутреннее преимущество для компиляции Вашего собственного ядра, когда все уже работает способ, которым это должно быть, и я не думаю, что существует. Хотя можно провести бесчисленные часы, отключая вещи, Вам не нужно и тонкая настройка вещей, которые tweakable, факт является ядром Linux, уже вполне прилично настраивается (Вашим распределением) для большинства пользовательских ситуаций.
Большинство пользователей не должно компилировать свое собственное ядро, их распределение сделало эту работу для них. Обычно дистрибутивы будут включать ряд патчей для или интеграции с определенными частями способа, которым распределение работает, бэкпорты драйверов устройств и фиксирует от более новых, но невыпущенных версий ядра или функций, что они являются новаторскими со своими пользователями.
При компиляции собственного ядра у Вас есть несколько опций, можно скомпилировать ядро чиновника Linus Torvalds, это не будет включать ни одного из патчей или настроек, которые были добавлены распределением (который может быть хорошим или плохим), или можно использовать распределение, восстанавливают инструмент для создания собственного ядра.
Причины Вы могли бы хотеть восстановить свое ядро, включают:
Многие разработчики используют его для создания также пользовательских версий ядра для встроенных систем или абонентских установок, где им нужны драйверы специального устройства, или они хотят удалить функциональность, в которой они не нуждаются.
bisect
луг для нахождения, где ошибка была представлена...
– xenoterracide
22.08.2010, 15:10
Компиляция ядра самостоятельно позволяет Вам только включать части, относящиеся к Вашему компьютеру, который делает это меньшим и потенциально быстрее, особенно во время начальной загрузки. Универсальные ядра должны включать поддержку как можно большего количества аппаратных средств; во время начальной загрузки они обнаруживают, какие аппаратные средства присоединены к Вашему компьютеру и загружают соответствующие модули, но это занимает время, чтобы сделать все это, и они должны загрузить динамические модули, вместо того, чтобы испечь код непосредственно в ядро. Нет никакой причины иметь Вашу поддержку ядра 400 различных центральных процессоров, когда существует только один в Вашем компьютере, или поддерживать мышей Bluetooth, если Вы не имеете один, это все потратило впустую пространство, которое можно освободить
Я не могу полагать, что принятый ответ здесь начинает говорить, что "Это не что-то, что необходимо сделать для большей скорости / память / xxx безотносительно".
Это полностью ложно. Я обычно сделанный на заказ мои Ядра обоим удаляю ненужный код, а также включая код улучшения производительности, главным образом связанный с аппаратными средствами. Например, я выполняю некоторые более старые аппаратные средства, и может eek некоторое увеличение производительности путем включения редко включаемых Драйверов ядра, таких как поддержка чипсета HPT36x на некоторых более старых MoBos, которые имеют это встроенное.
Другой пример, БОЛЬШОЙ SMP под Slackware является значением по умолчанию и на Dell 2800, например, использует большой след для выполнения вещей как GFSD (не как модуль ядра), который, также между прочим, использует галочки ЦП для чего-то, в чем я не нуждаюсь. Аналогично для NFSD и другого вместилища для угождения всех менталитетов, который прекрасен, если Вы просто пытаетесь получить Linux на поле и выполнении, но если Вы действительно заботитесь о "скорости / память / xxx безотносительно" затем эти вещи вопрос и работа.
Всеми моими производственными полями являются пользовательские Ядра. Если я нахожусь на общих аппаратных средствах, таких как серия Dell (2800, 2850, 2900, и т.д....) аппаратные средства, это - простой вопрос копирования .config файла ядра вокруг к каждому полю и компиляции ядра и установке.
Вот некоторые ситуации, где компиляция Вашего собственного ядра принесет пользу Вам:
Ядро с отключенной загрузкой модуля более безопасно. Это потребует, чтобы Вы выбрали модули, Вы знаете, что нуждаетесь и включаете их как часть ядра, в противоположность компиляции их как модули.
Отключение поддержки/dev/kmem или нанесение вреда ему с соответствующим параметром компилятора являются хорошей вещью для безопасности. Я думаю, что большинство дистрибутивов делает это по умолчанию теперь.
Я предпочитаю не использовать initrd's, если это возможно. Настройка Вашего ядра к аппаратным средствам, от которых это загружается, устраняет initrd.
Иногда более поздняя версия ядра будет иметь функции, в которых Вы нуждаетесь, но это очень редко сегодня. Я помню, когда я сначала начал использовать Debian, он использовал 2,4 ядра, но мне были нужны 2,6 ядра для поддержки udev.
Отключение сетевых протоколов/опций, в которых Вы не нуждаетесь, может ускорить Вашу производительность TCP/IP.
Отключение опций, в которых Вы не нуждаетесь, понижает объем потребляемой памяти ядра, которое важно в низких средах RAM. Когда Вы используете систему RAM 256 МБ в качестве маршрутизатора, это помогает.
Я нахожу все "tty" устройства в/dev раздражении в системах, где я обычно только регистрируюсь на пути последовательный или ssh.
Компиляция Вашего собственного ядра позволяет Вам участвовать в процессе разработки ядра, является ли это простым материалом, таким как предоставление идентификаторов PCI/USB-устройства для существующего драйвера, который может заставить более новое устройство работать на Вас к связыванию глубоко с дракой базовой разработки ядра.
Это также позволяет Вам тестировать ядра разработки на своих аппаратных средствах и обеспечивать обратную связь, если Вы замечаете какие-либо регрессии. Это может быть особенно полезно Вам и другим, если у Вас есть редкая часть аппаратных средств. Если Вы ожидаете ядра дистрибутива, оно может занять время для мер от Вашей проблемы, сообщает для фильтрации в новый выпуск ядра дистрибутива.
Мне также лично нравится компилировать мои собственные ядра для включения поддержки только аппаратных средств, которые я имею. Когда Вы выполняете ядра дистрибутива и смотрите на вывод lsmod(8)
, Вы видите много модулей, загруженных для аппаратных средств, которые Вы не имеете. Это может загрязнить список модулей,/proc,/sys и Ваши журналы, таким образом что при поиске чего-то, которое он может быть скрыт среди шума; Вы также не можете быть на 100% уверены, что те модули не способствуют проблеме, которую Вы пытаетесь диагностировать.
Я ответ второго gabe. (мой комментарий является слишком длинным, таким образом, я отправляю как ответ).
Если у Вас нет узкоспециализированной цели (например, встроенные машины, строгое профилирование безопасности), я не вижу практического преимущества для компиляции Вашего собственного ядра кроме видеть, как это сделано. Путем методического рассмотрения опций наблюдения то, как они взаимодействуют друг с другом для создания системы, является отличным способом понять, как система работает. Удивительно, что Вы узнаете, когда Вы пытаетесь удалить компоненты, которые, кажется, не имеют цели для задач, которые Вы пытаетесь выполнить.
Предупредите однако - почему спрыгивающий от кроличьей норы является, несомненно, волнующим, она высосет назад больше ночей и выходных, чем Вы думали возможные!
На работе мы используем скрученные вручную ядра для применения патчей из дерева, таких как vserver и unionfs.
Дома, я компилирую скрученные вручную ядра для нахождения, какая фиксация представила ошибку, которую я испытываю. После того как я закончил это, я буду, вероятно, придерживаться скрученного вручную ядра, пока ошибка не будет исправлена в моем распределении (Debian), в которой точке я вернулся бы к их ядрам снова.
Для большей части использования универсальные ядра хороши для фактически любых аппаратных средств. Дополнительно они обычно содержат (редактор), определенные для распределения патчи, настолько компилирующие Ваше собственное ядро, могут (мог) бы вызвать проблемы.
Причина скомпилировать Ваше собственное ядро:
Если бы я не использовал основанный на источнике дистрибутив, то я не скомпилировал бы ядро вообще.
Другой случай помимо многих, упомянутых здесь для того, чтобы иметь пользовательские скомпилированные ядра, настраивает специализированные среды сетевой загрузки, где загрузка модуля не выполнима, и необходимо раздать полностью рабочие ядра к определенным машинам для определенных задач.
Я удивлен, что об этом никто не упомянул причина для компиляции собственного ядра:
потому что вы хотите использовать другой компилятор C / c ++. GCC очень хорош для компиляции ядра Linux. Но есть компиляторы намного лучше! Оптимизация GCC немного отстает от компилятора Intel C / C ++. Кроме того, Intel предоставляет библиотеки примитивов производительности и инструмент vtune, которые незаменимы при создании высокопроизводительного ядра Linux. Вы можете продвинуться так далеко только с GCC и G ++. Практически независимо от того, что вы делаете, результат будет ограничен компилятором. Итак, я использую компилятор Intel и библиотеки производительности. Он немного велик - загрузка 1,5 ГБ, но это дает некоторое представление о том, что все содержится в хорошем компиляторе.
Компилятор Intel C / C ++ доступен бесплатно для некоммерческого использования. Но проще найти в Google страницу загрузки компилятора Intel c ++ с некоммерческой лицензией, чем искать на сайте Intel. Обычно я ни для чего не использую GCC / G ++. И вам не нужно быть программистом. Вы просто устанавливаете свою среду и изменяете две строки в файле make, чтобы они указывали на компилятор Intel.
Тогда вы сможете набрать серьезную скорость!
Эта ветка устарела, но все еще актуальна сегодня, как и тогда, когда был задан вопрос!
Ответ: :Вы компилируете ядро Linux по вашему выбору в соответствии с вашими потребностями и требованиями.
Допустимы многие сценарии:
Вы инженер и требуете, чтобы ваша сборка соответствовала требованиям/требованиям производительности и безопасности для вашей системы, вы перекомпилируете, чтобы соответствовать и/или превзойти указанные критерии.
Вы обычный пользователь и у вас есть старая система, которую вы хотите поддерживать как можно дольше, вы перекомпилируете, добавляя/удаляя компоненты, чтобы ваша старая система оставалась оптимизированной.
Вы обычный пользователь с новейшим быстрым оборудованием и более чем достаточным объемом памяти/ОЗУ. Нет необходимости перекомпилировать, но вы все равно можете это сделать, если хотите узнать немного больше о своей системе.
Вы просто хотите быть похожим на обычного пользователя Microsoft и/или Mac, не перекомпилируйте и просто установите обновления из исходного дистрибутива.
Следите за сценариями:-)
В отличие от пользователей Mac/Windows, Linux предоставляет выбор. Выбор между упрощением или оптимизацией системы в соответствии с вашими требованиями.