Существуют только 3 (что я могу с готовностью думать), способы запретить корневого доступа к файлу (в нормальных файловых системах).
chattr +i
). Корень может изменить атрибуты и удалить неизменный флаг, но это - ручной процесс, поскольку приложения автоматически не делают этого. Это является наиболее часто используемым для предотвращения случайно записи в файлы.rm
) файл, но Вы не можете изменить его содержание.Теперь существует много других способов отклонить доступ для записи к файлу при использовании корня. Сетевые файловые системы как NFS и CIFS могут запретить корневого доступа, если настроено, чтобы сделать так на сервере. Некоторые другие специальные файловые системы, как mvfs от IBM Рациональный ClearCase, могут сделать это также.
Однако со всем этим сказал, нет никаких стандартных файлов, в которые корень не может записать. Распределение может установить файлы с неизменным уверенным флагом, но не стандартный.
Да, рабочей статистикой на конечном файле и локальном файле, и получают размер файла,
т.е. stat -c "%s" /bin/ls
И Вы добираетесь, процент данных, скопированных путем сравнения этих двух, оценивают, вот именно
В очень простой реализации, которая будет похожа на это:
function cpstat()
{
local pid="${1:-$(pgrep -xn cp)}" src dst
[[ "$pid" ]] || return
while [[ -f "/proc/$pid/fd/3" ]]; do
read src dst < <(stat -L --printf '%s ' "/proc/$pid/fd/"{3,4})
(( src )) || break
printf 'cp %d%%\r' $((dst*100/src))
sleep 1
done
echo
}
Когда Вы копируете много файлов, du -s /path/to/destination
или find /path/to/destination | wc -l
дает Вам общее представление о том, сколько было уже сделано.
Можно узнать, с которым копируется файл lsof -p1234
где 1234 является идентификатором процесса cp
. Под многими системами, pgrep -x cp
сообщают идентификаторы процесса всех рабочих названных процессов cp
. Это не может быть очень полезно как порядок, в котором копируются файлы в данном каталоге, чрезвычайно непредсказуемо (в большом каталоге в соответствии с Linux, ls --sort=none
скажет Вам; с деревом каталогов попробовать find
).
lsof -p1234
также говорит Вам сколько байтов cp
уже читал и записал для текущего файла, в OFFSET
столбец.
В соответствии с Linux, существуют статистические данные использования IO в /proc/$pid/io
(снова, используйте PID cp
процесс для $pidf
). rchar
значение является общим количеством байтов, которые процесс считал, и wchar
число байтов, которые записал процесс. Это включает не только данные в файлах, но также и метаданные в каталогах. Можно сравнить то число с приблизительным числом, полученным с du /path/to/source
(который только считает данные файла). read_bytes
и write_bytes
только включайте то, что было считано или записано из устройства хранения данных, т.е. оно уже исключает терминальную диагностику и данные в кэше или все еще в буферах.
Существует несколько вещей, которые можно сделать. Вы могли присоединить strace
к нему для наблюдения то, что это делает (вывод может быть обильным!):
strace -p [pid of cp]
или Вы могли добраться lsof
для сообщения Вы, который регистрирует его в настоящее время, имеете открытый:
lsof -p [pid of cp]
Если Вы выполняете большое рекурсивное cp
, Вы могли использовать pwdx
для получения текущего рабочего каталога, который может дать Вам некоторое представление о том, как он делает:
pwdx [pid of cp]
То, что можно сделать, проверить файлы в месте назначения.
Если Ваше CP управляет, что-то как cp -a <my_source> <my_dest_folder>
Я проверил бы, в котором уже копируются файлы <my_dest_folder>
и каждый размер файла, таким образом, я вижу прогресс. Если <my_source>
немного сложно (несколько слоев каталогов) затем, маленький сценарий смог бы проверить состояние. Хотя такой сценарий мог использовать немного ввода-вывода, который не будет затем использоваться cp
процесс.
Один из моих любимых приемов для этого (в соответствии с Linux) должен узнать PID cp
процесс (использование ps | grep cp
или подобный), и затем заглянуть /proc/$PID/fd/
и /proc/$PID/fdinfo/
.
$ cp -r y z
^Z
$ ls -l /proc/8614/fd
lrwx------ 1 jander jander 64 Aug 2 15:21 0 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug 2 15:21 1 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug 2 15:20 2 -> /dev/pts/4
lr-x------ 1 jander jander 64 Aug 2 15:21 3 -> /home/jander/y/foo.tgz
l-wx------ 1 jander jander 64 Aug 2 15:21 4 -> /home/jander/z/foo.tgz
Это покажет Вам, какие файлы процесс имеет открытый. Если Вы хотите видеть, как далеко в файл процесс...
$ cat /proc/8614/fdinfo/3
pos: 105381888
flags: 0500000
pos
параметр является положением чтения (или запись) указатель в байтах.
На последних версиях Mac OS X можно просто поразить CTRL+T для наблюдения прогресса. Из страницы справочника OSX 10.6 для CP (1):
"If cp receives a SIGINFO (see the status argument for stty(1)) signal,
the current input and output file and the percentage complete will be
written to the standard output."
Удар CTRL+T эквивалентен передаче сигналов о текущем процессе с SIGINFO на машинах BSD-выхода, включая OSX.
Это работает на dd (1) также.
Я не думаю, что Linux имеет этот механизм SIGINFO, и ничего не смотрите в странице справочника GNU для CP (1) о сигналах, которые могут использоваться для создания отчетов о прогрессе.
mv
живо.Спасибо!
– Dan Rosenstark
29.09.2016, 17:13
Вы можете послать сигнал в процесс:
kill -SIGUSR1 pid
Еще более полезно создать скрипт, который будет опрашивать до тех пор, пока вы не нажмете Ctrl-C или процесс не завершится:
while [ : ] ; do kill -SIGUSR1 $1 && sleep 1m || exit ; done
Работает для dd. Не работает для cp. Может быть, вам нужно использовать другой сигнал. Я как-то пробовал SIGINFO, но, похоже, на платформе Intel его больше нет.
xprop -root 2>/dev/null | sed -n '/^_NET_ACTIVE_WINDOW/ s/.* // p'
-121--21919- Использование отчасти
вместо этого, возможно, связана с командой изменений вашей файловой системы.
Расставленные
- это двигатель под GPARTED GUI. Вы можете использовать его в режиме интерактивного команда или непосредственно из командной строки.
Перед рассталось
3.0
3.0, следующая команда делает то, что вы, вероятно, ожидаете, узнав о GPARTED:
$ sudo parted /dev/sdb resize 1 1 200M
, которые будут изменять размер первого раздела на втором жестком диске до 200 миб, и убедитесь, что это Начинается 1 миб на диск, чтобы избежать проблем выравнивания с продвинутыми приводами .
Эта функциональность была удалена в V3.0 , регрессия оправдана сравнением для удаления гангренозного пальца. Частичная функциональность была , восстановлена в V3.1 , покрывая только жир и HFS +.
v3.2 - это то, где все действительно интересны, от перспективы файловой системы Unix / Linux. Это заменяет изменение изменений
с Resizepart
. Новое имя связано с тем, что он может изменить только размер раздела; Это даже не пытается переставить его содержимое в первую очередь.
В случае выращивания существующей файловой системы это операция с низким уровнем риска, если вы используете файловую систему, которая может быть выращена на лету, как Ext4 или XFS. Например, если мы начнем с раздела 200 MIB Ext4 на / dev / sdb1
, мы можем удвоить его размер:
$ sudo parted /dev/sdb resizepart 1 400M
$ sudo resize2fs /dev/sdb1 400M
ту же командная пара также работает для сокращения Ext [234]
файловые системы, за исключением того, что вы их даете в обратном направлении : сокращают фактическую файловую систему, затем нарезать пустое пространство с конца раздела.
Некоторые файловые системы (например, XF) могут быть выращены только; Они не могут быть сжаты. Вот почему эквивалент XFS в Resize2FS
XFS_GROWFS
.
RAID и LVM-системы усложняют все это. У них есть собственные ограничения и возможности.
Общая ситуация состоит в том, чтобы иметь файловую систему XFS в верхней части мультиприводов LVM-управляемого дискового массива, к которому вы добавляете несколько дисков, затем разверните LVM и, наконец, расширяйте файловую систему XFS в новое пространство.
-121--28269-Относительно новый инструмент, который имеет ровно прогресс (ранее CV [COREUTILS Viewer]).
Что это?
Этот инструмент может быть описан как крошечный, грязный, Linux-osx-OSX-OSX-OSX-OSX-COMP COMP, которая ищет базовые команды CORETILS (CP, MV, DD, TAR, GZIP / GUNZIP, CAT И т. Д.) В настоящее время работает в вашей системе и отображает процент скопированных данных.
Как это работает?
Это просто сканирует
/ proc
для интересных команд, а затем рассматривает каталогиFD
иFDINFO
, чтобы найти открытые файлы и искать позиции и отчеты о статусе для крупнейшего файла.
Этот инструмент - это команда утилиты Linux, которая ищет COREUTILS Basic Commands (CP, MV, DD, TAR, GZIP / GUNZIP, CAT и т. Д.) В данный момент работает в вашей системе и отображает процент скопированных данных:
Хотя OP специально упомянул возможность видеть, как команда "cp" прогрессирует, надо сказать, что другие утилиты лучше подходят для этой конкретной проблемы.
Например:
rsync -avP FROM TO
покажет прогресс копирования ОТ файла / папки в К файлу / ПАПКУ.
# rsync -avP Video.mp4 /run/media/user1/3.8G/
sending incremental file list
Video.mp4
565,170,046 100% 51.23MB/s 0:00:10 (xfr#1, to-chk=0/1)
sent 565,308,115 bytes received 134 bytes 5,210,214.28 bytes/sec
total size is 565,170,046 speedup is 1.00
И rsync сообщит вам, сколько копируется (и скорость передачи) по пути. Он работает для отдельных файлов или папок как на одном компьютере, так и в сети.
Вы также можете использовать pipeviewer
for f in *; do
pv $f > destination/$f
done