Я вижу проблему, с которой вы столкнулись, на моих хостах я не наблюдаю такого же поведения. Он показывает правильную информацию. Например, см. Ниже
[root@centos7 ~]# uptime
19:53:40 up 13 days, 6:10, 1 user, load average: 0.06, 0.13, 0.20
[root@centos7 ~]#
[root@centos7 ~]# journalctl -b |head -1
-- Logs begin at Sat 2015-11-21 13:42:51 EST, end at Fri 2015-12-04 19:48:26 EST. --
Таким образом, это должно быть что-то особенное для вашей установки. Вы можете проверить, насколько велик файл журнала? Есть ли какие-либо настройки в вашей настройке для journalctl, такие как ограничения размера журнала? каков результат journalctl --disk-usage
?
РЕДАКТИРОВАТЬ: Вы увидите на своем хосте строку, похожую на приведенную ниже.После достижения пределов по умолчанию и отсутствия постоянного хранилища этот журнал удаляется, и journalctl -b
может отображать только самые старые доступные сообщения журнала
Nov 21 13:43:27 xxxxxx-hostname systemd-journal[81]: Runtime journal is using 8.0M (max 74.8M, leaving 112.3M of free 740.6M, current limit 74.8M).
sed 's![^/]*$!!'
Это делает следующее:
/
, потому что регулярное выражение содержит /
. (Мне нравятся !
и |
, потому что они выглядят как разделительные линии; другие люди используют @
, #
, ^
или что-то другое, что им нравится. Можно использовать /
в регулярном выражении, ограниченном /
, но это может быть трудно для человека читать.)/
. (Делайте это как можно дольше. )Но он должен быть в конце строки. Осторожно :строка ввода, которая не содержит символов /
будет полностью уничтожен (т. е. будет удалено все содержимое строки, оставив только пустую строку ). Если бы мы хотели это исправить, и пусть строка без косых черт проходит без изменений, мы могли бы изменить команду на
sed 's!/[^/]*$!/!'
Это то же самое, что и первый ответ, за исключением того, что он соответствует последнему/
ивсем символам после него, а затем заменяет их на /
(, оставляя последний /
во входной строке только ). Итак, где первый ответ находит one.txt
и ничего не заменяет, это находит /one.txt
и заменяет его на /
. Но в строке, не содержащей символов /
, первый ответ соответствует всей строке и ничем ее не заменяет, в то время как этот не нашел бы совпадения, и так бы не сделал замену.
Мы могли бы использовать /
в качестве разделителя в этой команде, но тогда это должно быть
sed 's/\/[^/]*$/\//'
«экранирование» косых черт, являющихся частью регулярного выражения и строка замены предваряя их обратной косой чертой(\
). Некоторые люди находят эти джунгли «наклонившихся деревьев» труднее читать и поддерживать, но в основном это сводится к вопросу стиля.
Вы можете использовать утилиту dirname
:
xargs -I {} dirname {} <file.txt
Это даст вам пути к каждому родительскому каталогу в списке. Для заданного списка это даст
/path/to/directory
/longer/path/to/some/directory
/path/with spaces/in/it
Чтобы вставить новую строку в путь, используйте
/some/path with a \
newline/in/it
И чтобы вставить кавычки, экранируйте их, например. \"
.