grep '^ [^: ]\+:: '/etc/shadow
ничего не покажет, так как образец Regex неверен.
Я предполагаю, что вы должны были найти пользователей, не имеющих связанных паролей, т.е. системных учетных записей. В этом случае:
grep '^[^:]\+:.:' /etc/shadow
Давайте разбьем его:
^ [^: ]\+
найдет часть от начала строки до следующего :
т.е. имя пользователя
За именем пользователя последует :
, любой отдельный символ, указанный маркером Regex .
(возможно, !
или *
), а затем :
.
-121--154175-
Вот интересный вариант. Вы можете использовать sed
непосредственно, чтобы удалить все копии первой строки и оставить все остальное на месте (включая саму первую строку).
sed '1{h;n;};G;/^\(.*\)\n\1$/d;s/\n.*$//' input
1 {h; n;}
помещает первую строку в область хранения, печатает ее и считывает в следующей строке - пропуская остальные команды sed
для первой строки. (Также пропускает первый 1
тест для второй строки , но это не имеет значения, поскольку этот тест не был бы применен ко второй строке.)
G
добавляет новую строку, за которой следует содержимое удерживаемого пространства, к образцу пространству.
/^\(. *\)\n\1 $/d
удаляет содержимое образца пространства (таким образом, переходя к следующей строке), если часть после новой строки (т.е. то, что было добавлено из области хранения) точно соответствует части перед новой строкой. Здесь будут удалены строки, дублирующие заголовок.
s/\n. * $//
удаляет часть текста, добавленного командой G
, так что печатается только строка текста из файла.
Однако, поскольку regex является дорогостоящим, несколько более быстрым подходом было бы использование одного и того же условия (с отрицанием) и P
до новой линии, если часть после новой линии (т.е. то, что было добавлено из удерживаемого пространства) не точно соответствует части перед новой линией, а затем безоговорочно удалить образец пространство:
sed '1{h;n;};G;/^\(.*\)\n\1$/!P;d' input
Вывод при вводе:
ID Data1 Data2
1 100 100
2 100 200
3 200 100
4 100 100
5 200 200
-121--23930-
Я не знаю конкретно о systemd, но если вы используете StartManager, вы можете использовать nm-online
в верхней части вашего сценария, чтобы подождать, пока сеть не заработает.
if nm-online; then
echo "Online"
# do my stuff
else
echo "Network error"
fi
По умолчанию он будет ждать 30 секунд, пока сетевое подключение станет активным, и возвращает 0 (true), если это так, в противном случае - false.
Это, по крайней мере, лучше, чем пинг, я думаю.
так как я установил только cifs -утилиты, которые мне не нужны138
139
137
вот что у меня сработало:
iptables -t filter -A OUTPUT -p tcp --dport 445 -j ACCEPT
iptables -t filter -A INPUT -p tcp --sport 445 -j ACCEPT
надеюсь, кому-то это будет полезно:-)