Вы полностью упускаете суть/философию того, как Linux использует оперативную память.
Оперативная память является потраченным впустую ресурсом, если она полностью свободна и ОС вынуждена обращаться к жесткому диску за файлами,поэтому в Linux он поддерживает буферы и кеш, которые агрессивно используют ОЗУ для повышения производительности.
Эта оперативная память может быть использована процессом в любое время (она фактически кэшируется ).
Reading from a disk is very slow compared to accessing (real) memory. In addition, it is common to read the same part of a disk several times during relatively short periods of time. For example, one might first read an e-mail message, then read the letter into an editor when replying to it, then make the mail program read it again when copying it to a folder. Or, consider how often the command ls might be run on a system with many users. By reading the information from disk only once and then keeping it in memory until no longer needed, one can speed up all but the first read. This is called disk buffering, and the memory used for the purpose is called the buffer cache.
Reference: http://www.tldp.org/LDP/sag/html/buffer-cache.html
$ free -hw
total used free shared buffers cache available
Mem: 992M 76M 202M 12M 68M 645M 739M
Swap: 2.0G 0B 2.0G
В этом выводе моя виртуальная машина имеет ~992 МБ, из которых кажется, что у нее есть только 202 МБ свободного места. Но именно здесь многие путаются/вводятся в заблуждение.
Эта система Linux фактически имеет 739 МБ свободного (доступного столбца ).
Просто. Linux использует ОЗУ для повышения производительности за счет хранения файлов, библиотек и т. д. в ОЗУ (, буферах и кеше ), вместо того, чтобы каждый раз обращаться к медленному жесткому диску для извлечения этих файлов.
Буферы и кэш используются ядром Linux таким образом, и в любой момент, если диспетчер памяти (часть ядра )ощущает нагрузку, когда процессам требуется все больше и больше оперативной памяти, ядро может буквально удалить любые данные, которые кэшируются здесь, чтобы немедленно получить больше оперативной памяти.
Что касается вашего вопроса о скрипте clearcache.sh
. Ответ прост. Это опечатка автора статьи. Так и должно быть:
$ echo "echo 3 > /proc/sys/vm/drop_caches" | sudo sh
Возможно, они неправильно скопировали/вставили мой ответ на вопросы и ответы U&L на этот вопрос.:Как очистить буферы и кеш в системе Linux?
В этом случае в bash или zsh вы можете ввести команду как
cp file.txt.1{,.bak}
Это расширение фигурной скобки .
Для случаев, когда раскрытие фигурных скобок неудобно, потому что вы хотите больше редактировать второй аргумент, в zsh есть команда copy-prev-word
, привязанная к Ctrl + Alt +из коробки. Он вставляет копию слова, непосредственно предшествующего курсору. Обязательно введите пробел перед Ctrl + Alt +. Вы можете предпочесть связать copy-prev-shell-word
, что обычно более полезно.
bindkey '^[^_' copy-prev-shell-word
В bash или zsh, чтобы повторить последнее слово в командной строке, начиная с конца строки, убедитесь, что строка заканчивается пробелом, и нажмите Alt + BCtrl + KCtrl + YCtrl + Y . Это дважды вырезает и вставляет последнее слово плюс завершающий пробел. В качестве альтернативы, если строка не заканчивается пробелом, нажмите Alt + BВлевоCtrl + KCtrl + YCtrl + Y . Это работает, только если последний аргумент не содержит пробелов; если это так, вам нужно вернуться немного дальше. Вы можете заменить Alt + B на Ctrl + Left , если это работает на вашей установке.