Жесткий диск 10 ГБ, 8 процессоров, 4 ГБ ОЗУ -Эти настройки вполне могут подойти для виртуальной машины Linux, у меня были виртуальные машины меньшего размера и гораздо большего размера (на аппаратном обеспечении серверного уровня ).
Требуемые ресурсы сильно зависят от того, что должен делать сервер, однако запрошенные ресурсы, вероятно, не подходят для используемой вами (главной )машины/компьютера.
Вы делитесь/«воруете» ресурсы, которые хост не использует для передачи виртуальной машине; нельзя украсть то, чего нет; чтобы предоставить виртуальные процессоры, дисковое пространство и оперативную память виртуальной машине в Virtualbox, у вас должны быть физические (свободные )ресурсы, соответствующие (хост-компьютеру ), который вы используете.
Если у вас есть только 4 ГБ или даже 8 ГБ физической оперативной памяти, ОС также потребуется хороший кусок для правильной работы, и она не позволит вам использовать всю оперативную память для VirtualBox; тот же комментарий относится примерно к вашим процессорам.
Я советую создать виртуальную машину, ограниченную вашим аппаратным обеспечением, и пояснить в отчете, почему вы не смогли/почему нет смысла создавать требуемые ресурсы. Это, вероятно, принесет вам несколько очков, показывающих, что вы поняли проблему и все же смогли создать виртуальную машину.
Вы можете быстро сделать это в bash:
mapfile -t lines < file
printf "%s\n" "${lines[@]:1}" "${lines[0]} $(date "+%F %T")" > file
Помещение этого в функцию:
rotate_file() {
[[ -w "$1" ]] || return 1
local -a lines
mapfile -t lines < "$1"
printf "%s\n" "${lines[@]:1}" "${lines[0]} $(date "+%F %T")" > "$1"
}
Демо:
$ cat file
1
2
3
$ rotate_file file
$ cat file
2
3
1 2019-07-25 17:16:51
$ rotate_file file
$ cat file
3
1 2019-07-25 17:16:51
2 2019-07-25 17:16:57
При этом весь файл помещается в память. Если файл большой, это может быть медленным.
Немного сложно получить правильное экранирование в строке формата date
, но учитывая
$ cat file
old1
old2
old3
, затем
$ cat << 'EOF' | ed -s file
1m$
r !date +\ \%x\ \%X
.-1,.j
,p
EOF
old2
old3
old1 2019-07-25 05:42:32 PM
или (в виде одного -вкладыша)
printf '%s\n' '1m$' 'r !date +\ \%x\ \%X' '.-1,.j' ',p' | ed -s file
Чтобы отредактировать файл на месте, заменитеp
(print )наwq
(write -quit ). Конечно, вы можете заменить %x
и %X
другими спецификаторами формата по вашему выбору.
$ hd="$(head -1 file)"; tail +2 file; printf '%s %s\n' "$hd" "$(date)"
old2
old3
old1 Thu, Jul 25, 2019 4:27:15 PM
$ hd="$(head -1 file)"; { tail +2 file; printf '%s %s\n' "$hd" "$(date)"; } > tmp && mv tmp file; cat file
old2
old3
old1 Thu, Jul 25, 2019 4:28:44 PM
$ hd="$(head -1 file)"; { tail +2 file; printf '%s %s\n' "$hd" "$(date)"; } > tmp && mv tmp file; cat file
old3
old1 Thu, Jul 25, 2019 4:28:44 PM
old2 Thu, Jul 25, 2019 4:28:46 PM
$ hd="$(head -1 file)"; { tail +2 file; printf '%s %s\n' "$hd" "$(date)"; } > tmp && mv tmp file; cat file
old1 Thu, Jul 25, 2019 4:28:44 PM
old2 Thu, Jul 25, 2019 4:28:46 PM
old3 Thu, Jul 25, 2019 4:28:48 PM
$ date +"$(head -n 1 file) %F %T" >>file; sed -i 1d file
$ cat file
old2
old3
old1 2019-07-25 23:39:51
$ date +"$(head -n 1 file) %F %T" >>file; sed -i 1d file
$ cat file
old3
old1 2019-07-25 23:47:10
old2 2019-07-25 23:47:22
Это вставляет первую строку file
как строку в выходной формат date
. %F
— это сокращение для %Y-%m-%d
, а %T
— это сокращение для %H:%M:%S
в большинстве реализаций date
.
Вывод date
затем добавляется в конец file
.
После добавления новых данных sed
используется для удаления старой первой строки (с помощью редактирования места -). Некоторая реализация sed
должна вызываться какsed -i '' 1d file
(см. Как я могу добиться переносимости с помощью sed -i (в -место редактирования )?).
Четвертый запуск приведенных выше команд даст
$ date +"$(head -n 1 file) %F %T" >>file; sed -i 1d file
$ cat file
old2 2019-07-25 23:47:22
old3 2019-07-25 23:51:22
old1 2019-07-25 23:47:10 2019-07-25 23:51:24
Если это не нужно, используйте что-то вроде
awk '{ print $1; exit }'
вместо head -n 1
. Это выделит первый столбец с разделителями пробелами -в первой строке, но не всю первую строку со старой датой и временем.