К сожалению, многие маршрутизаторы в наши дни требуют javascript, который lynx не поддерживает.
Но в качестве альтернативного метода вы должны иметь возможность использовать туннели на ssh, и использовать настоящий браузер, чтобы добраться до него. Например, если вы туннелируете порт 8888 на порт 80 на IP вашего маршрутизатора (например, 192.168.1.1:80). После установления ssh-соединения на локальной машине в "настоящем" браузере (графическом с js) перейдите по адресу http://127.0.0.1:8888
, чтобы попасть на обычную веб-страницу удаленного маршрутизатора. Это использует ваш удаленный ssh-хост в качестве прокси.
В таких браузерах, как firefox
, вы можете довольно легко настроить его на использование SOCKS
прокси, и позволить SSH настроить SOCKS
прокси для вас, и прозрачно использовать удаленный хост как ваш сетевой прокси, включая любой доступ из его локальной сети к маршрутизатору. Поищите, как настроить SOCKS с вашим конкретным SSH-клиентом (обычно это называется динамической переадресацией портов), и как настроить прокси-соединение для firefox
в его диалоге подключения. В итоге вы сможете указать firefox
использовать SOCKS-прокси по адресу 127.0.0. 1:1080
(например)
(Lynx может продвинуться на шаг дальше, если вы попробуете url вроде http://admin:password@192.168.1.230
, но я подозреваю, что вы все равно столкнетесь с js
проблемами)
Файл - это (примерно) три отдельные вещи:
Когда вы создаете пустой файл, вы создаете только inode и запись каталога, указывающую на этот inode. То же самое для разреженных файлов (dd if=/dev/null of=sparse_file bs=10M seek=1
).
Когда вы создаете жесткие ссылки на существующий файл, вы просто создаете дополнительные записи в каталоге, которые указывают на тот же inode.
Здесь я все упростил, но вы поняли идею.
Сам файл не занимает места, но файловая система его занимает, сохраняя имя файла, местоположение , права доступа к нему и тому подобное.
Используя простейшую аналогию:
Давайте сравним файл, скажем, с стакан воды.
'touch / tmp / test' очень похож на создание пустого стакана без воды. Стакан пустой, поэтому его размер равен нулю. Но стекло существует.
На языке файловой системы стакан - это метаданные, а содержимое стакана - это данные. Мета-данные содержат все, что упоминалось в предыдущих сообщениях.
Могут быть полезны файлы нулевого размера. Один из примеров - использование их в качестве навигационной крошки, где простое существование может использоваться для обозначения какого-то состояния (то есть, если файл существует: тогда что-то сделайте; если нет: игнорировать).
Простой ответ: Потому что так определено.
Более длинный ответ: Он определен так, потому что некоторые операции концептуально проще:
Вы можете сделать больше:
* Файлы журнала ошибок обычно создаются пустыми, чтобы быть заполненными, если и только если произойдет ошибка.
* Чтобы узнать, сколько ошибок произошло, подсчитайте количество строк в файлах журнала. Если файл журнала пуст, количество ошибок равно нулю, что вполне логично.
* Иногда встречаются файлы, где весь необходимый текст содержится в имени файла, например, this-is-the-logging-directory
. Это предотвращает удаление пустых каталогов после установки нерадивыми администраторами, а также предотвращает ошибки, когда программа или пользователь случайно создает файл там, где программа хотела бы видеть каталог позже. Программа git
(и другие) склонна игнорировать пустые каталоги, и если проект/администратор/пользователь хочет иметь запись о том, что каталог существует, даже если в нем нет полезного содержимого (пока), вы можете увидеть пустой файл с именем empty
или empty.directory
.
Никакие операции не усложняются:
В случае с файлами аспект "где-то записан файл" (инод и/или имя файла) накладывается на вышеприведенные соображения, но файловые системы не стали бы этого делать, если бы пустые файлы были бесполезны.
В общем, все вышеперечисленные причины, кроме тех, что относятся к именам файлов, применимы к последовательностям. В первую очередь к строкам, которые представляют собой последовательности символов: Строки нулевой длины - обычное явление внутри программ. Строки обычно запрещаются на уровне пользователя, если они не имеют смысла: имя файла - это строка, и большинство файловых систем не допускают пустую строку в качестве имени файла; внутри программы, при создании имен файлов из фрагментов, в качестве одного из фрагментов вполне может быть пустая строка.
Подумайте об этом так: скажите, что программа отслеживает SQL-запросы, отправленные на ваш сервер. Программа хочет указать, что она регистрирует запросы в обычном текстовом файле, но никакие запросы еще не были зарегистрированы. Как это должно выглядеть? Я бы сказал, что это должен быть файл нулевого размера по адресу /var/log/acme-sql-server/queries.log
. Таким образом, вы можете выяснить, когда началось ведение журнала (время создания файла), когда он был в последний раз обновлен (т. Е. Когда он был создан), сколько запросов было записано (количество новых строк в файле = 0) и кто ведет журнал (Acme SQL Server). Для таких случаев полезно иметь концепцию пустого файла, который, тем не менее, существует в определенном месте.
touch
создастинод , а ls -i
или stat
покажет информацию об индексе:
$ touch test
$ ls -i test
28971114 test
$ stat test
File: ‘test’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 28971114 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/1000) Gid: ( 1000/1000)
Access: 2017-03-28 17:38:07.221131925 +0200
Modify: 2017-03-28 17:38:07.221131925 +0200
Change: 2017-03-28 17:38:07.221131925 +0200
Birth: -
Обратите внимание, что test
использует 0 блоков. Для хранения отображаемых данных индекс использует несколько байтов. Эти байты хранятся в таблице инодов. Посмотрите на странице ext2 пример структуры inode .
ls
(или хорошо, stat(2)
системный вызов )сообщает вам размер содержимого файла. Сколько места требуется файловой системе для ведения бухгалтерского учета, это не является частью этого, и как деталь реализации это не то, что программы в целом должны заботиться или даже знать об этом. Отображение деталей реализации сделало бы абстракцию файловой системы менее полезной.