bash: невозможно создать временный файл для здесь-документа: на устройстве нет места [duplicate]

Причиной существования и использования . и ..

. и .. являются записи, которые обычно присутствуют в каждом каталоге. Их значение не связано с рабочим каталогом процесса (например, shell), но с каталогом, в котором находится запись.

.. обеспечивает двустороннюю привязку структуры дерева каталогов, а . - удобное имя для обращения к самому каталогу. Путь directory/. совпадает с directory. Теоретически пустую строку можно было бы выбрать для обозначения самой директории, но на самом деле это не так: ls '' не работает, а значение пустой строки было бы неоднозначным, поскольку в начале пути, к которому оно относится, корневой каталог уже: /file1 означает file1 в корневом каталоге или file1 в текущем рабочем каталоге?

Как показало thomasrutter, в качестве обычных записей в каталоге вы можете использовать . и .. на пути. Например, ./-filename можно использовать, чтобы избежать интерпретации символа тире - в качестве введения параметров командной строки. Путь directory1/../directory2 по сути такой же, как ./directory2, который совпадает с directory2.

Почему скрыты . и ..?

Файл ( и каталог) имена с . в начале по умолчанию скрыты в Unix-подобных системах, поэтому по умолчанию большинство инструментов не будут показывать каталоги . и ... Это полезно, потому что мы уже знаем, что . и .. обычно присутствуют в каждом каталоге.

Команда ls -a показывает все записи в каталоге. В Nautilus Ctrl + H отображает скрытые записи, но за исключением . и .., потому что они обычно не очень полезны в графическом диспетчере файлов. Для подобного поведения в командной строке вы можете использовать ls -A.

Реальные записи в . и ..?

Да, в часто используемой файловой системе они , (как напомнил Джонатан Леффлер). Как мы можем это проверить?

# prepare the directory
cd /tmp ; mkdir testdir1

# test 1
ls -lid testdir1 testdir1/. testdir1/..
1179767 drwxrwxr-x  2 pabouk  pabouk  4096 Nov 12 11:52 testdir1
1179767 drwxrwxr-x  2 pabouk  pabouk  4096 Nov 12 11:52 testdir1/.
1179650 drwxrwxrwt 14 root    root    4096 Nov 12 15:17 testdir1/..

Номер inode (1-й столбец), ссылающийся на структуру данных самого каталога / файла, одинаковый для одного и того же каталога testdir1 и testdir1/.. Количество ссылок (3-й столбец), показывающее количество записей в каталоге, относящихся к inode (каталог / файл), равно 2 сразу после создания каталога, потому что в /tmp и . в /tmp/testdir1 есть testdir1. Индекс /tmp/testdir1/.. (/tmp) имеет 14 ссылок, потому что у него есть 12 подкаталогов, содержащих .. + 2 записи в качестве каждой директории.

# test 2
touch testdir1/tesfile1   # to have a regular file too

debugfs /dev/sda2 -R 'ls -l /tmp/testdir1' | cat
debugfs 1.42.12 (29-Aug-2014)
 1179767   40775 (2)   1000   1000    4096 12-Nov-2015 11:52 .
 1179650   41777 (2)      0      0    4096 12-Nov-2015 15:46 ..
 1179771  100664 (1)   1000   1000       0 12-Nov-2015 11:52 tesfile1

Утилита debugfs читает ext2 ( и более новые) данные файловой системы непосредственно из дисковых секторов (обход файловой системы в ядре Linux).

# test 3

debugfs /dev/sda2 -R 'dump /tmp/testdir1 '>(od -tax1)
debugfs 1.42.12 (29-Aug-2014)
0000000   w nul dc2 nul  ff nul soh stx   . nul nul nul stx nul dc2 nul
         77  00  12  00  0c  00  01  02  2e  00  00  00  02  00  12  00
0000020  ff nul stx stx   .   . nul nul   { nul dc2 nul   h  si  bs soh
         0c  00  02  02  2e  2e  00  00  7b  00  12  00  e8  0f  08  01
0000040   t   e   s   f   i   l   e   1   s   o   c   k   e   t nul nul
         74  65  73  66  69  6c  65  31  73  6f  63  6b  65  74  00  00
0000060 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
         00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
*
0010000

Если вы не верите в список каталогов debugfs, вы можете изучить исходный дамп каталога и убедитесь, что записи . и .. действительно присутствуют.

23
задан 2 February 2016 в 14:28

6 ответов

Число индексов установлено в момент форматирования раздела. Обычно количество созданных инодов достаточно для любой цели; однако, если у вас есть очень большое количество очень маленьких файлов, вы можете использовать индексы перед заполнением диска.

Вам нужно найти много тысяч небольших файлов, которые вы используете в системе, использующей и удалять их, или переместить их в раздел, который был специально настроен с очень большим количеством доступных inodes. Невозможно изменить количество inodes, доступных в разделе после его форматирования.

Сценарий, написанный paxdiablo в stackoverflow, может быть удобным способом проверить чрезмерное использование небольшого файла, которым вы не можете быть осознавая. Здесь снова:

#!/bin/bash # count_em - count files in all subdirectories under current directory. echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$ chmod 700 /tmp/count_em_$$ find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n rm -f /tmp/count_em_$$

Поместите этот скрипт в текстовый файл ~ / bin / count_em, а затем выполните команду

chmod +x ~/bin/count_em

, чтобы сделать его исполняемым. Если вам нужно было создать каталог ~ / bin, то он еще не будет на исполняемом пути, поэтому просто войдите и снова войдите.

Чтобы запустить программу, просто введите

count_em

, и в нем будут перечислены номера всех файлов в текущем каталоге и подкаталогах по каталогу с наивысшим показателем последнего. Очень удобно!

21
ответ дан 18 July 2018 в 08:06

Число индексов установлено в момент форматирования раздела. Обычно количество созданных инодов достаточно для любой цели; однако, если у вас есть очень большое количество очень маленьких файлов, вы можете использовать индексы перед заполнением диска.

Вам нужно найти много тысяч небольших файлов, которые вы используете в системе, использующей и удалять их, или переместить их в раздел, который был специально настроен с очень большим количеством доступных inodes. Невозможно изменить количество inodes, доступных в разделе после его форматирования.

Сценарий, написанный paxdiablo в stackoverflow, может быть удобным способом проверить чрезмерное использование небольшого файла, которым вы не можете быть осознавая. Здесь снова:

#!/bin/bash # count_em - count files in all subdirectories under current directory. echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$ chmod 700 /tmp/count_em_$$ find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n rm -f /tmp/count_em_$$

Поместите этот скрипт в текстовый файл ~ / bin / count_em, а затем выполните команду

chmod +x ~/bin/count_em

, чтобы сделать его исполняемым. Если вам нужно было создать каталог ~ / bin, то он еще не будет на исполняемом пути, поэтому просто войдите и снова войдите.

Чтобы запустить программу, просто введите

count_em

, и в нем будут перечислены номера всех файлов в текущем каталоге и подкаталогах по каталогу с наивысшим показателем последнего. Очень удобно!

21
ответ дан 24 July 2018 в 19:00

Вы также можете отобразить отсортированный список каталогов по числу inodes с помощью этой команды: du --inodes -d 3 / | sort -n | tail

Оттуда вы можете определить, какие каталоги удалить

4
ответ дан 18 July 2018 в 08:06

Я обнаружил, что использование inode происходит из /root/.local и удаляет эту папку.

2
ответ дан 18 July 2018 в 08:06

Вы также можете отобразить отсортированный список каталогов по числу inodes с помощью этой команды: du --inodes -d 3 / | sort -n | tail

Оттуда вы можете определить, какие каталоги удалить

4
ответ дан 24 July 2018 в 19:00

Я обнаружил, что использование inode происходит из /root/.local и удаляет эту папку.

2
ответ дан 24 July 2018 в 19:00
  • 1
    Ничего особого не следует использовать /root/.local, и оно существует только по соображениям совместимости. Вам нужно узнать, что написало много крошечных файлов в этом каталоге. – fabricator4 22 December 2012 в 10:05

Другие вопросы по тегам:

Похожие вопросы: