Pull to refresh

Comments 126

Создать пустой файл:
> <file>
=
echo "" > <file>
=
tee <file>
ctrl+D


Создать файл с текстом:
cat > <file>
<text>
ctrl+D
=
echo "<text>" > <file>
=
tee <file>
<text>
ctrl+D
Пустой файл можно создать командой touch.
А еще так:
:> <filename>
То же самое с существующим файлом сделает его пустым. Иногда так удобно вручную чистить логи.
Всё-равно мой первый вариант на 1 символ короче и магии в нём на одно двоеточие меньше :)
Да, но эта магия работает далеко не на всех шеллах. Вариант с двоеточием надёжнее.
[зануда]
echo -n "" > <file>
или
echo -n > <file>
[/зануда]
Юмора ради, — вариант через Ж (не во всех *sh, но работает):
/dev/ass > /tmp/shit
не сработает — получится или блочное устройство-копия /dev/null (под рутом) или сфейлит (под юзером).
А Вы попробуйте? Получается вполне регулярный пустой файл. По крайней мере под Debian 6 и MacOS.
zsh, debian sid:
kom@ideacat ~ % cp /dev/null ll
cp: cannot create special file 'll': Operation not permitted

Интересно… Под zsh на 6.0.7 под обычным пользователем у меня то же проблем нет. А можете попробовать так: /bin/cp /dev/null ll?
Аналогично, zsh, получается пустой файл.
Перепробовал все шеллы, которые стояли, получается пустой файл. Чини шелл ;)
Не получается только тогда, когда передаю -r, то есть recursive. Может, у тебя где-то в alias запихано?
Иногда нужно создать файл определённого размера. Вот варианты:

dd if=/dev/zero of=file.txt bs=1G count=1
truncate -s 1g file.txt
fallocate -l 1g file.txt
mkfile 1024m file.txt

Уверен, что можно придумать ещё много.
Первый точно. Только надо bs=1M count=1000
Да нет.
N and BYTES may be followed by the following multiplicative suffixes: c =1, w =2, b =512, kB =1000, K=1024, MB =1000*1000, M =1024*1024, xM =M GB =1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
Так я с этим и не спорю… Поэтому, чтобы получить 1G, вам нужно иметь count=1024, а у вас 1000…
Вы правы, что-то я затупил.
Как ни странно, самую интересную и информативную ссылку по теме заминусовали. Статья описывает восстановление системы после частичной потери корневого каталога и смонтированных в нём файловых систем. Автору удалось залить uuencoded tar бинарник на повреждённую систему через терминал, собрать его обратно в исполняемый вид с помощью echo и base64, а потом восстановить систему с резервов. На мой взгляд, восхитительно.
Бесспорно, интересно. А причем тут оно?
Я посчитал, что текст по ссылке наиболее точно отражает ситуацию описанную автором. Правда удалили не один файл, а почти весь корень.

«Но вот представьте, что возникает ситуация, когда кто-то нечаянно, по глупости или из нехороших побуждений удалил исполнимый файл, который являлся бинарным файлом какой-то команды, которой вы более или менее часто пользовались. И что тогда делать?»
>Создать пустой файл
touch

>Добавление пользователя в группу
gpasswd

>Удаление файла
unlink, rm, find. -name file -delete
У меня как-то возникала ситуация, когда нечаянно, по глупости ввел chmod -R 644 /.
И тут уже ни одна другая команда не помогла :) Всегда Permission denied (в том числе при входе по ssh).
А я как-то набрал sudo rm -rf ./*, но потерял в точку, опомнился через пару минут, когда подумал что долго удаляет, хорошо что только системные папки потереть немного успело, до хома не дошло =)
А вот скажите, почему было не использовать rm -rf *? И не ошибешься, и набирать меньше.
я вместо rm /dir1/dir2/dir3/* набрал rm /dir1/dir2/dir3 /*
под рутом. Спасло то, что без -r, довольно легко удалось востановить систему (не linux)
Так это вы писали установщик драйверов под нвидию.
чесно говоря — не понял коментария
Если у вас система не настроена пароноидально, то:
cp /bin/ls /tmp/chown
cat /bin/chown > /tmp/chown
/tmp/chown +x /bin/chown
rm /tmp/chown
useradd $username; mkdir /home/$username; chown $username:$username /home/$username; passwd $username

я понимаю, что *nix-way, но зачем так извращаться над простой командой?

PS в арче мейнтейнеры сказали, то adduser не нужно. И удалили из реп.
В CentOS adduser создает юзера без пароля, надо отдельно вбивать. ЕМНИП.
Не изменяет, так и есть. По крайней мере, в 5.x
Пароль отдельно, но для создания домашней директории достаточно добавить --create-home.
В CentOS adduser является символической ссылкой на useradd, а в debian-based — отдельная команда, обёртка для useadd.
Всегда нужно держать под рукой загрузочный диск/флешку (например SystemRescueCd), busybox в нескольких директориях тоже не повредит. А вообще странно выглядит ситуация, случайно удалить ifconfig или passwd, под рутом? Для работы с пользователями всегда можно vi /etc/passwd и потом pwconv. Ну и бэкапы, они рулят!
Согласен насчет busybox'а.
Вообще есть еще одно отличное средство — жесткие ссылки на все необходимые системные файлы, размещенные в труднодоступной директории. Тогда при удалении этих файлов содержимое останется и будет доступно по другому имени файла, плюс экономия дискового пространства.
Загрузочный диск/флэшка при удаленных системах неприменимы.
А хорошие PHP-разработчики, например, бывает иногда делают весьма странные вещи, в результате которых что-то нужное пропадает. Перенаправление с пайпом перепутают, например.
И бэкапы — это да, это наше всё. Как говорится, есть две категории людей — те, кто не делает бэкапы, и те, кто уже делает.
Иногда просто быстрее сделать действие другой командой, чем восстанавливать бэкап, особенно если последний полный был 7-10 инкрементальных назад.
Загрузочный диск/флэшка при удаленных системах неприменимы.
Однажды (когда ещё source control системы были мало распространены, да и вообще очень плохо работали с большими бинами) мне очень пригодилась e2undel — получилось полностью восстановить новый файл, случайно удалённый художником на samba-шаре (бэкапы делаю ночью, он туда ещё не успел).
Как говорится, есть две категории людей — те, кто не делает бэкапы, и те, кто уже делает.
В самое яблочко!
Иногда просто быстрее сделать действие другой командой, чем восстанавливать бэкап, особенно если последний полный был 7-10 инкрементальных назад.
Размер бэкапа самой системы такой маленький (~2GB), а современные носители такие большие, что ИМХО, можно не заморачиваться, и держать рядышком загрузочную копию рабочей системы, а ночью mount-rsync-umount.
ip addr = ip a
и
ip route = ip ro (ну и ip ru до кучи)

А вот за route -e и route -C я вам от всей души благодарен. Не знал.
Вы, похоже, не уловили смысл статьи. Вы все делаете одной и той же утилитой, которая понимает сокращения…
Может быть не совсем подходит, но в качестве альтернативы можно использовать:

Останов системы:
shutdown -h now
=
init 0
=
telinit 0

Вывод архитектуры компьютера:
arch
=
uname -m

Перезагрузка:
shutdown -r now
=
reboot

Вывод дерева директорий:
tree
=
lstree

Проверка файловой системы:
fsck.msdos
=
dosfsck
fsck.msdos это симлинк на dosfsck
Фигня эта ваша перезагрузка через shutdown. Если диск отвалился или рут на сдохшем nfs'e, то спасёт только magic sysrq:
echo b > /proc/sysrq-trigger

Там ещё много интересных плюшек.
Перезагрузка:
shutdown -r now
=
reboot

Я не знаю, как под линуксами, но, насколько я помню, под фрёй эти две команды отличаются. Отличаются не результатом, а процедурой выполнения: первая попытается, так сказать, культурно завершить все процессы, используя rc.d скрипты (init.d в понимании линуксов) и далее перезагрузка, вторая — пошлёт всем SIGTERM, после чего SIGKILL для непонятливых процессов, и перезагрузка. Например, это может быть критично для «задумчивых» процессов, которые по SIGTERM не очень оперативно шатдаунятся.
последний момент (с fsck) сильно зависит от файла.
Очень часто dosfsck это симлинк на fsck.msdos.
позанудствую)

Это у вас perl way: «There's more than one way to do it».
*nix way о другом)
Философия UNIX (*nix-way) предполагает наличие большого количества простых программ для выполнения простых действий, а результаты работы можно передавать между разными программами через потоки.

У меня *nix-way об этом.
А несколько способов — это как одни эти самые простые действия заменить на другие.
Простые программы, на основе группирования вызовов которых можно сделать что-то большее — это ваш пример pingtrace.sh. Остальное, все же, perl way.
usermod -G не добавит в группу, а заменит все дополнительные группы пользователя на список groupname. Чтоб было так, как Вы хотите, должно быть
usermod -aG <groupname> <username>


-G, --groupsГРУППА1[, ГРУППА2,...[, ГРУППАN]]]
A list of supplementary groups which the user is also a member of.
Each group is separated from the next by a comma, with no
intervening whitespace. The groups are subject to the same
restrictions as the group given with the -g option.

If the user is currently a member of a group which is not listed,
the user will be removed from the group. This behaviour can be
changed via the -a option, which appends the user to the current
supplementary group list.
Ага. Я уже в какой то статье нашел рекомендацию ввести «usermod -G» для добавления себя в группу. Потом с ноутбука жены искал статьи на тему «Как восстановить права на sudo через „rescue console“.
верно, useradd -G — опасная команда :)
я использую gpasswd -a вместо неё
может не сработать если файлов в директории очень много, скажет что-то типа «слишком длинная строка» или просто обрежет её
2) Просмотр таблицы маршрутов
cat /proc/net/route
3) Просмотр списка сетевых интерфейсов
cat /proc/net/dev
ls /sys/class/net
10) Создание жесткой ссылки
link file_name link_name
Касательно п. 1 можно еще использовать
$ sed = filename | sed 'N;s/\n/\t/'

Что же касается остального… Почти все указанные утилиты входят в так называемый core пакет — пакет базовых утилит системы. Поэтому, например, если у вас кто-то (?) удалит cat хотя-бы, то практически ни один скрипт инициализации системы работать не будет. Вывод, я думаю ясен.
Про утилиту ip, netstat, ifconfig — ip входит в состав пакета iproute, все остальные используют этот пакет.
Если его удалить из системы, сетевой стек вообще никак не поднимется. Ifconfig даже в Debian не рекомендуется к использованию.
Касательно adduser — он практически не используется — useradd из core делает все одной командой.
Там выше еще было про выключение. Скажу сразу — отмирает. Все новые версии дистрибутивов переходят на systemd — там все по-другому. Да, Debian тоже уйдет туда — выхода другого нет, нарушится связь пакетов. Впрочем, в новоиспеченной 7 уже намекнули на него в /etc.
Напоследок насчет случайного удаления.
Для того, чтобы что из указанного удалить, нужно иметь права root. Такие права имеет только администратор системы. Или пользователь из группы wheel, который, соответственно имеет доступ к root через sudo.
Если администратор позволяет присутствовать в системе sudo — гнать надо поганой метлой!
Если администратор позволил себе удалить что-то из указанного, тогда не спасет, но может помочь получить моральную компенсацию потчевание виновника КАНДЕЛЯБРОМ.
Впрочем, от восстановления, трудного и неприятного, это не спасет.
Простая переустановка пакетов здесь тоже не поможет. В силу специфики системы.
Поставил-бы плюсик, да кармы не хватает.
>> Если администратор позволяет присутствовать в системе sudo — гнать надо поганой метлой!

Можно не пользоваться sudo пока ты один администратор в системе. Потом уже начнаются проблемы.
С sed целый список есть.

Насчёт удаления: бывают случаи, когда выходит из строя дисковая система и нужно срочно спасаться бегством что-то сделать. Такие штуки больше для этиз случаев, а не для «юзеры удаляют системные бинарники? не переживайте, у нас всё равно много способов сделать нужные вещи» (:

и про sudo: я правильно понимаю, что по вашему мнению его вообще не должно быть в системе? ( или всё таки быть должно, но должно быть корректно настроено? )

ps. ну и magic sysrq будет работать независимо от загрузки systemd/inetd/whateverd. (:
и про sudo: я правильно понимаю, что по вашему мнению его вообще не должно быть в системе? ( или всё таки быть должно, но должно быть корректно настроено? )

Здесь палка о двух концах. Лучше, конечно, чтобы админ был один. В другом случае sudo только для админ группы.
А чем Вас sudo не устроил? Вы из под root учетки все делаете?
Я делаю в root то, что нужно делать в root. И в Arch, и в Debian. Если нужно быстро — $ su - 'command' Сеанс закрывается сразу, никаких задержек, как по умолчанию в sudo, нет.
Т.е. в sudo есть сохранение сеанса, в течение этого времени можно зайти без пароля. Теоретически можно использовать.
То есть на локалхосте который вы админите всего один админ и потребности в sudo не возникает. А еще, судя по всему, у вас пользователи имеют пароли. Хм, вы вообще слышали о безопасности-то?
И это единственная причина по которой надо в «поганой метлой гнать» админа использующего sudo?
Кстати наш коллега написал статью, рекомендую к ознакомлению su или sudo
Когда на сервере рут только Вы, sudo — имхо излишен. В нем из-за его сложности уязвимостей больше, чем в su нашли последнее время. sudo хорош на десктопной машине для рядового пользователя. Вот насчет группы системных администраторов — не знаю. Я всегда один :-(
Это так же как и про бэкапы, есть те, кто ещё не использует sudo и те, кто уже использует.
Без sudo привыкаешь сидеть под рутом. А сиденье под рутом чревато «ой, почему оно вставилось, а я хотел только скопировать?!» в то время, когда пытаешься скопировать с экрана терминала пару нужных строк.
После вот такого — sudo мне использовать на боевых серверах совсем расхотелось.

И (не)привычка сидеть под рутом — дело внутренней культуры. Я никогда sudo не пользовался, но под рутом работать так и не привык, даже неуютно как-то.

А копировать с терминала лучше всего вбив # в приглашение shell'а.
> После вот такого — sudo мне использовать на боевых серверах совсем расхотелось.
На сколько я понимаю суть уязвимости сводится к тому, что если пользователь может использовать sudo и имеет права на установку даты в системе, то он может единожды набрав пароль для sudo больше его не набирать. Во-первых — это не так уж и страшно, во-вторых — уязвимости находят каждый день (в том числе я в ядре), просто нужно чаще обновляться.

> А копировать с терминала лучше всего вбив # в приглашение shell'а.
сработает только если всего одну строку копируете, но если несколько
Если администратор позволяет присутствовать в системе sudo — гнать надо поганой метлой!

А как должна быть организована работа отдела администраторов? Интересуюсь с целью повышения квалификации :)
Имелось ввиду sudo для некоторых пользователей. Хотя, работа отдела администраторов должна быть жестко увязана с работой отдела безопасности. И тут есть много механизмов обойтись без sudo. Расписывать здесь нет смысла. Все равно я против sudo в системе. Иногда это даже спасает от необдуманных действий.
Немножко не понял, что имеется в виду «по простому»)
Права sudo только у администраторов. Всяким остальным выдаются права на отдельные каталоги или файлы по необходимости. На мой взгляд разумно, но увидев ваш коментарий подумалось, что есть правильное решение. Захотелось его узнать)
Конечно же, есть правильное решение. Но, я думаю этот топик не предназначен для обсуждения этого вопроса, потому что слишком большой объем займет. Все зависит от бюджета организации и ценности системы. Если это какой-нибудь а-ля пельменная на колесах, или хостинг на коленке, то, конечно, трудно обеспечить надлежащую защиту. Не принимайте близко к сердцу. Ничего обидного здесь нет. Это только бизнес-вопросы. Просто админ-отдел это не только админы и системы, это нужно понимать. Просто вот такой он сс… sudo :)
Потому и хотелось услышать про правильный процесс организации работы с учетными записями. Если вдруг у вас будет вдохновение — напишите об этом статью?) Думаю, она будет полезной.
Не знаю, будет ли она полезной в наше время. Слишком, наверное, старомодной она получится. И не айтишной. Знаете, это для примера, чтобы был понятен ход мысли. Однажды только у одной веб-студии я наткнулся на идеальную рекламу. Звучала она примерно так — «У нас интернет-магазин обойдется вам не дороже 15000 долларов США, но если у вас нет хотя бы 3 миллионов на его работу, не заказывайте его у нас. Интернет-магазин это придаток бизнеса, но не его основа.» Примерно так. Перефразируя, скажу, что информационные системы — это не мир, это его придаток. Т.е. безопасность системы определяется не только наличием или отсутствием sudo, но и еще многими факторами, напрямую, казалось-бы, не связанными с работой ИТ-отделов. Коротко, между карточкой учета кадров и лабиринтным коридором в администраторскую еще очень много звеньев (и денег). И эти процессы — не прерогатива администратора системы, и даже не начальника админ-отдела.
Так что, если нет другой возможности, пользуйтесь sudo, не забывайте про длинные пароли, ограничение сеанса sudo и пр. Остальное оставьте владельцу предприятия — пусть у него голова болит. Просто иногда предупреждайте. Лучше письменно.
И желаю вам отсутствия притаившихся гостей и «чужих ягодиц» на ваших серверах.
Спасибо большое за пожелание :)
Обнаружить белого пушистого зверька, хитро смотрящего на тебя — всегда очень невиданно и неприятно)
UFO just landed and posted this here
Где вы такую статистику взяли, если не секрет?
UFO just landed and posted this here
Тогда это наводит только на мысль о том, что выборка у вас нерепрезентативная.
UFO just landed and posted this here
Наверное то, что из моего опыта эта цифра не больше 60%, а у olegcorner, как я понимаю, стремится к нулю. Ну, и у вас лично 99,9%. В среднем 99,9% никаким образом не получится.
UFO just landed and posted this here
UFO just landed and posted this here
Согласен насчет 1 и 2.
А насчет метлы не согласен. Есть разные требования к системам, в некоторых требованиях фигурируют списки пакетов и прочие требования наподобие монтирования рута в рид-онли. Поэтому вы зря умничаете.
Есть масса систем, в которых под рутом работают только первый день создания системы — для настройки. А потом там работают только обычные пользователи в своих директориях со своими приложениями и аптайм измеряется годами.
Если вы лично говорите всем, какие у них должны быть требования к системе, я вас поздравляю, вам повезло.
Смотрите шире и не переходите на личности.
UFO just landed and posted this here
Если у вас в системе рут смотирован в рид-онли и вам все равно кто-то изменил бинарник — поздравляю, вам нужно переустановить систему.

С чего вы взяли, что у меня так кто-то делал?
Карму я вам минусанул, не отрицаю. Но за дело.
так это вас поганой метлой-то надо гнать.

Очень не люблю, знаете ли, прямых оскорблений. Напиши вы это кому-то другому, тоже минусанул бы.
UFO just landed and posted this here
Вовсе нет. После коммента про метлу я сходил и ткнул соответствующую стрелочку в вашем профиле. Возможно это просто был уже второй раз за сегодня, поэтому уменьшилась раньше.
Я тут подумал, это же непереносимо :). Вот такой вариант решения проблемы должен работать везде:

# /bin/chmod -x /bin/chmod
# cp /bin/cp /bin/cp-copy
# cat /bin/chmod >/bin/cp-copy
# mv /bin/cp-copy /bin/chmod


Да, это предполагает, что cp, mv и cat остались исполняемыми :)).
сарказм навеяло досом — unzip pkunzip.zip
Просмотр содержимого директории
ls
=
dir
=
vdir

А разве dir — это не алиас к ls? Ну и да, еще есть совсем «хакерский ls»:

echo *
dir не алиас.
file /usr/bin/dir /usr/bin/dir: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=7e6f2e1b03b4e9431fb044f01171d533e3d48bf8, stripped
Я вам больше скажу. Это даже не жесткие ссылки
$ md5sum /bin/ls
b691e28e120f6989e37c7db21cb51931  /bin/ls
$ md5sum /bin/dir
f688f685e41a3ab2e1c3dc863ec8aa0a  /bin/dir
$ md5sum /bin/vdir
54e1ac383b938900bfd81d80dbd3c4ec  /bin/vdir
Что интересно, в Ubuntu 12.04, /bin/ls и /bin/dir имеют одинаковый размер, но таки различаются по контенту. Возможно это одна и та-же утилита, с парой строк различающихся в коде.

В любом случае — в каком-то дистрибутиве, возможно уже давно-давно, во времена RedHat 7.2, я видел dir как алиас к ls.
У меня они различаются ровно на один байт. Скорее всего, какой‐то флаг:
(zyx-desktop:zyx:~/tmp) 1 % diff -U0 <(hexdump -C /bin/ls) <(hexdump -C /bin/dir)
--- /proc/self/fd/11    2013-05-09 19:58:51.131592200 +0400
+++ /proc/self/fd/12    2013-05-09 19:58:51.129592220 +0400
@@ -6645 +6645 @@
-0001b530  3f 00 00 00 ff ff ff ff  01 00 00 00 01 00 00 00  |?...............|
+0001b530  3f 00 00 00 ff ff ff ff  01 00 00 00 02 00 00 00  |?...............|
Тогда уж

echo .*

а то скрытые файлы не показывает.
ls тоже не показывает
echo .* покажет только скрытые
Тогда, может быть так?
echo {*,.*}
shopt -s dotglob # Bash
# or
setopt dotglob    # Zsh
echo *
Иногда удобно.
А может кто нибудь подскажет хорошую графическую тулзу, которая позволяет составлять команды линуска не копаясь по манам? Ну типа из меню выбрал по рубрикатору нужную команду, тулза сразу показала какие у нее основные аргументы с краткими пояснениями и предупреждениями об опасных ключах. Поставил галочки и переключатели, в итоге сгеренировалась строка для терминала. Желательно чтобы можно было строить конвееры. Ну и чтобы была хорошая библиотека заготовок и примеров.

Я, например, не администратор, а программист. Поэтому что то сложное в терминале делаю редко, и как результат наизусть не помню многие команды и особенно их параметры. Сейчас выкручиваюсь тем, что у меня в гугл доксе лежит самомисная шпаргалка.

Попробуйте zsh, похоже то, что вам нужно.
ip address (ip a) показывает интерфейсы с адресами. Для получения просто списка интерфейсов есть ip link (ip l).

У useradd есть ключ -m: вместо
useradd <username>; mkdir /home/<username>; chown <username>:<username> /home/<username>; passwd <username>

можно сделать
useradd -m <username> && passwd <username>
удобный поиск с фильтрами по директории

tree <directory> | grep js | less

удобно еще то, что можно искать в самом less /
Особенно радует в паре с каким нибудь bck-i-search zsh, если занести в хистори заранее часто используемые паттерны

вроде

echo 'get css' | tree . | grep css | less

жмешь Ctrl+R пишешь get css и готово
ifconfig -s

вообще-то ifconfig уже достаточно давно объявлен deprecated.
Большое спасибо за cp -s, не знал. Это намного интуитивнее ln.
grep -n "" файл покажет номера строк красивее, чем cat.

Операции с пользователями можно и вручную выполнять (редактированием /etc/passwd и /etc/groups; а еще можно вручную копировать пароли пользователя с машины на машину простым редактированием /etc/shadow).

Для ссылок есть еще команда link.

Еще свои 5 копеек: многие для создания пустых файлов пишут touch файл, а можно сделать быстрее: >> файл (> файл опасно тем, что если файл существовал, он обнулится).

service apache2 restart например
Аналоги это всегда хорошо. Только я не согласен с целью их перечисления здесь: если удалил что-то — восстанови, думаю, не нужно объяснять почему это предпочтительнее.
Цель тут просто как пример. Как выше уже указали, при посыпавшемся диске тоже применимо.
Немного занудства:

Первый пункт не совсем верен ибо nl <file> не равно cat -n <file>. :) Первый нумерует не пустые строки, а второй — все.
Всё верно. Если нужна идентичность, то тогда будет так
nl -ba <file>
Sign up to leave a comment.

Articles