Нет, вам не хватает простой опции, позволяющей отказаться от строки total
, по крайней мере, при перечислении содержимого каталога (включая текущий, без аргументов). Например, в GNU ls
опции -l
, -g
, -n
, -o
и -s
вызывают отображение строки total
без возможности ее отключения:
if (format == long_format || print_block_size)
{
const char *p;
char buf[LONGEST_HUMAN_READABLE + 1];
DIRED_INDENT ();
p = _("total");
DIRED_FPUTS (p, stdout, strlen (p));
DIRED_PUTCHAR (' ');
p = human_readable (total_blocks, buf, human_output_opts,
ST_NBLOCKSIZE, output_block_size);
DIRED_FPUTS (p, stdout, strlen (p));
DIRED_PUTCHAR ('\n');
}
Это фактически предписано POSIX.
Однако, если вы укажете файлы для списка, а не каталог, ls
не покажет общее количество; опция -d
заставляет рассматривать каталоги как файлы, что дает желаемый результат, как упоминал Костас:
ls -ld *
выдаст тот же результат, что и
ls -l
за вычетом строки total
, если ваша оболочка не включает скрытые файлы при расширении *
(dotglob
) и если текущий каталог не содержит так много файлов, что расширение *
превышает максимальную длину командной строки.
Вы можете указать и каталог (ls -ld /path/to/directory/*
), но в результате будут перечислены файлы с заданным путем, в отличие от ls -l /path/to/directory
.
mv: невозможно переместить «/ home» в «/ home-old»: устройство или ресурс заняты
Единственное «использование» [*], которое я могу придумать, которое содержит имя файл от изменения, это точка монтирования.
Что еще я могу проверить?
Я не уверен, но, возможно, это могло произойти, если монтирование все еще существует в другом пространстве имен монтирования. Потому что по какой-то причине размонтирование не распространяется из корневого пространства имен? Или, глядя на результат в моей системе, возможно, службы systemd с ProtectHome
?
$ grep -h home /proc/*/task/*/mountinfo | sort -u
121 89 0:22 /systemd/inaccessible/dir /home ro,nosuid,nodev shared:142 master:24 - tmpfs tmpfs rw,seclabel,mode=755
275 243 253:2 / /home ro,relatime shared:218 master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
321 288 253:2 / /home rw,relatime shared:262 master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
84 64 253:2 / /home rw,relatime shared:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
85 46 253:2 / /home rw,relatime master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
Обратите внимание на эту проблему - невозможно переименовать / home, несмотря на то, что она не отображается как точка монтирования (в текущем пространстве имен) - должна быть исправлено в ядре Linux версии 3.18+.
как узнать пространство имен конкретного процесса?
lsns
может быть полезным, если вы можете его установить. Дополнительные возможные команды:
Список пространств имен монтирования:
# readlink /proc/*/task/*/ns/mnt | sort -u
Определить корневое пространство имен монтирования:
# readlink /proc/1/ns/mnt
Найти процессы с заданным пространством имен монтирования
# readlink /proc/*/task/*/ns/mnt | grep 4026531840
Проверить пространство имен данного процесса:
{{ 1}}# cat /proc/1/task/1/mountinfo
[*] EBUSY Не удалось переименовать, потому что oldpath или newpath - это каталог, который {{1 }} используется некоторым процессом (возможно, как текущий рабочий каталог, или как корневой каталог, или потому что он был открыт для чтения) или используется системой (для пример в качестве точки монтирования) , а система считает это ошибкой. (Обратите внимание, что нет необходимости - возвращать EBUSY в таких случаях - нет ничего плохого в том, что все равно выполняет переименование - но разрешено возвращать EBUSY, если {{ 1}} в противном случае система не сможет справиться с такими ситуациями.)
Это был NetworkManager.
Выполнение systemctl stop mysqld httpd postfix ipmievd настроено atd rsyslog smartd crond irqbalance gssproxy polkit chronyd
не помогло, но сделало таблицу процессов очень маленькой.
После systemctl stop NetworkManager
я смог переименовать / home.
Вы можете загружаться от одного пользователя и вносить любые изменения в домашний каталог.
e
linux16
удалены опции rhgb
и quite
и вставлены вместо них init=/bin/bash
. ctrl+x
для запуска. Это подскажет вам на консоли bash. /
с параметрами чтения/записи, введяmount -o remount,rw /
/home
каталог, переименовать его и т.д. touch /.autorelabel
exec /sbin/init
, чтобы начать загрузку в обычном режиме. @sourcejedi :спасибо за ответ.