Этот точно тот же самый вопрос задали на serverfault просто на днях :-)
Система виртуальной памяти Linux не вполне так проста. Вы не можете только сложить все поля RSS и сообщать о значении used
free
. Существует много причин этого, но я поражу несколько самых больших.
Когда процесс ветвления, и родитель и ребенок покажет с тем же RSS. Однако Linux использует copy-on-write
так, чтобы оба процесса действительно использовали ту же память. Только то, когда один из процессов изменяет память, будет он на самом деле быть дублированным. Таким образом, это вызовет free
число, чтобы быть меньшим, чем top
Сумма RSS.
Значение RSS не включает общую память. Поскольку общая память не принадлежит никакому процессу, top
не включает его в RSS. Таким образом, это вызовет free
число, чтобы быть больше, чем top
Сумма RSS.
Другой способ сделать это должно использовать здесь документы:
#!/bin/sh
cat > /etc/pam.d/XXX << 'EOF'
Place whatever
should go in
the file here
EOF
chown root:root /etc/pam.d/XXX # Or whatever floats your boat
chmod u=r,go= /etc/pam.d/XXX # Ditto
Если бы у Вас уже есть содержание, было бы лучше поместить это в отдельный файл и просто cp
или install
файл к \etc\pam.d\XXX
. Тем путем Вы избегаете любых проблем, связанных с выходом из данных в рамках сценариев оболочки. Например, для создания файла, только читаемого корнем:
install --owner=root --group=root --mode='u=r' my_file /etc/pam.d/XXX
Обратите внимание, что в системах Unix и Linux, пути всегда разделяются наклонными чертами (/
), не обратные косые черты.