Почему cp не может скопировать файл /proc/stat?
В моей машине Linux, если я пытаюсь скопировать /proc/stat, он создает файл 0 байт. но если я делаю cat /proc/stat, у него есть данные. но размер всегда показывает как 0.
cp /proc/stat statfile
создает файл нулевого байта. Если я напишу программу для копирования, то это сработало. почему это так?
int main()
{
std::ifstream procFile("/proc/stat");
std::ofstream outfile("statfile");
char buf[1024];
while (!procFile.eof() && procFile.is_open())
{
procFile.getline(buf, 1024);
outfile << buf<<endl;
}
procFile.close();
outfile.close();
return 0;
}
2 ответа
/proc
является псевдофайловой системой Это указывает на размер 0 для файла /proc/stat
,
Вот почему копирование не работает (cp сначала смотрит на размер файла, который он должен копировать), но вы можете легко прочитать информацию и записать ее обратно в файл.
$> cat /proc/stat > statfile
Это было исправлено в GNU coreutils 7.3.
Использование find
сделать cp
будучи пользователем root, как показано на рисунке,
find /proc/cpuinfo -type f -exec cp -iv '{}' /home/dir/ \;
Вот моя попытка,
~/cpuinfo$ ls
~/cpuinfo$ sudo find /proc/cpuinfo -type f -exec cp -iv '{}' /home/esunboj/
stackru/cpuinfo/ \;
`/proc/cpuinfo' -> `/home/esunboj/stackru/cpuinfo/cpuinfo'
~/cpuinfo$ ls
cpuinfo
Также, как сказал /proc
это псевдо файловая система, означающая, что файлы не хранятся на диске, но имеют привязки к ядру. Вероятно, вы можете читать и / или записывать каждую запись из пространства пользователя, как обычные файловые операции. Обычно разные программы мониторинга, когда они fopen
файл, теперь его задача ядра найти соответствующий драйвер, который выполняет задачу, и назначить его этому драйверу. Где в случае /proc
его система proc в ядре, которая будет считывать объекты памяти с учетом стоимости загрузки системы.