Это зависит от редактора.
Для текстового редактора вполне возможно проверить разрешения для файла и отказаться от записи в него, если у него нет прав на запись ни для владельца, ни для группы, ни для других. Просто потому, что он может записывать в файл (потому что он работает от имени root), это не значит, что он должен это делать.
Я только что попробовал это с vim 7.3 на Ubuntu, и он действительно делает это. Если я редактирую файл как root, он переводит его в режим только для чтения. (Я все еще могу написать ему, используя :w!
а не :w
.) GNU Emacs 23.2.1 ведет себя аналогично.
Нано, как вы заметили, не делает этого; Я не пробовал других редакторов. Но nano -v
редактирует файл в режиме "просмотра" (только для чтения). Не должно быть слишком сложно написать оболочку, которая проверяет права доступа к файлу и вызывает либо nano
либо nano -v
, в зависимости от того, должен ли он быть доступен для записи. (Обратите внимание, что вам нужно использовать что-то кроме теста [ -w filename ]
; если вы root, он возвращает true для файла с 400 правами доступа.)
РЕДАКТИРОВАТЬ :
Вот nano
оболочка, которую я только что скинул в Perl. Он не принимает никаких аргументов, кроме одного имени файла, которое является обязательным (и файл должен уже существовать).
#!/usr/bin/perl
use strict;
use warnings;
die "Usage: $0 file\n" if scalar @ARGV != 1;
my $file = $ARGV[0];
die "$file does not exist\n" if not -e $file;
my @stat = stat $file;
die "stat $file: $!\n" if not @stat;
my $mode = $stat[2];
my @command = qw(nano);
if (($mode & 0222) == 0) {
push @command, '-v';
}
push @command, $file;
# print "\$ @command\n";
exec @command;
Вместо того, чтобы проверять, доступен ли файл для записи, он извлекает свои биты режима и непосредственно проверяет, установлены ли какие-либо биты записи. Кажется, это работает с очень беглым тестированием, которое я сделал. Используйте это на свой страх и риск. Это должно быть легко адаптироваться к другим редакторам.
Кстати, я никогда не использую нано. Кажется, что когда вы выходите, он спрашивает, хотите ли вы сохранить измененный буфер, и запрашивает файл для его сохранения, даже если файл доступен для записи. По крайней мере, в режиме по умолчанию мне кажется, что было бы трудно случайно заглушить файл. Я полагаю, это проще, если вы установите некоторые параметры для "экспертного" использования.