Если вы используете ls -lR
, вам нужно каким-то образом исключить содержимое из вывода, а затем grep
вывести то, что вы хотите.
find
, вероятно, быстрее. Вот очень быстрый способ взлома моей машины ( grep
уродливы, я ими не горжусь).
tony@trinity:~$ time ls -lR | grep "tony tony" | grep -vc "rwxr-xr-x"
115668
real 0m3.247s
user 0m1.456s
sys 0m1.808s
tony@trinity:~$ time find ./ -not -perm 755 | wc -l
125185
real 0m0.503s
user 0m0.120s
sys 0m0.380s
tony@trinity:~$ time ls -lR | grep "tony tony" | grep -vc "rwxr-xr-x"
115668
real 0m3.128s
user 0m1.564s
sys 0m1.920s
tony@trinity:~$ time find ./ -not -perm 755 | wc -l
125185
real 0m0.501s
user 0m0.196s
sys 0m0.428s
Некоторые примечания:
find
работает довольно быстро по сравнению с raw ls
+ grep
. Могут быть более быстрые решения, например что-то в perl
, или способ заставить ls
работать быстрее (установка $ LANG
? - мои тесты просто показано, что это сбивает на секунду вывод ls
, вы, вероятно, можете указать ls
не сортировать, что может помочь).
Изменить: я только что видел ваш комментарий, в котором вы также говорите, что вам нужно изменить права доступа. В этом случае find
является абсолютно правильным ответом, потому что он может выполнить всю работу за один раз.
find ./ -not -perm 755 -exec chmod 755 {} \;
Вы должны быть предельно осторожными при выполнении этой команды, чтобы убедиться, что вы находитесь в правильном месте. Более безопасным вариантом будет
find / actual / full / path -not -perm 755 -exec chmod 755 {} \;
, чтобы избежать изменения каждого файла в системе, если вы оказались в неправильном месте.
Кроме того, вам, вероятно, следует рассмотреть программные ссылки, каталоги и нестандартные файлы и в результате изменить свой find
. Итак, предполагая, что вас интересуют только файлы, я бы начал с
find / actual / full / path -type f -not -perm 755 -exec chmod 755 {} \;
Наконец, вы можете спросить вы сами, если вы меняете разрешения для каждого файла в каталоге или наборе каталогов, у которых нет разрешений с 755 по 755, тогда вам не нужно делать ничего сложного.
find / actual / full / path -type f -exec chmod 755 {} \;
Это просто установит их все на 755. Это может быть немного быстрее (меньше логики в выборе файлов для обновления vs .обновление разрешений на миллионы файлов зависит, я полагаю, от количества файлов, которые уже верны).
Если вы действительно хотите, чтобы это произошло после того, как пользователь войдет в систему, вы можете поместить его в свой файл профиля оболочки. Скорее всего ~ / .bash_profile
.
Вы хотите добавить строку, вероятно, ближе к концу, которая просто вызывает имя файла вашего приложения, как если бы вы запускали его со своего терминала, например: /home/username/bin/mypersonalscript.sh&
. Возможно, вам потребуется использовать абсолютный путь.
Также не забудьте добавить амперсанд в конец. Это переводит процесс в фоновый режим, и без него вы не сможете войти в свою оболочку при входе в систему.
Если это не сработает, убедитесь, что ваш скрипт исполняется.
Задача ядра - запустить один процесс: init , который получает идентификатор процесса 1. Это задача init - запускать другие процессы для предоставления системных служб и разрешения пользователям входить в систему.
Там - это еще несколько случаев, когда ядро Linux выполняет процесс. Например, когда ядро обнаруживает новое оборудование на определенных шинах, оно выполняет modprobe
для загрузки драйвера как модуля . Другой пример: можно настроить программу для передачи дампов ядра. Я думаю, что во всех этих случаях используются функции call_usermodehelper_xxx
.
Вы заметите, что случаев очень мало, и все они запускаются событием ядра: аппаратным событием или завершением программы. Это исключительные случаи, зарезервированные для низкоуровневой системной функциональности. Обычный способ выполнения процесса - это его разветвление из процесса, разветвленного из процесса, который ... разветвляется из init.
Ядро даже не знает об «успешном входе в систему». Вход в систему - это высокоуровневая концепция, стоящая далеко за пределами ядра. Чтобы запустить процесс от имени пользователя root, когда пользователь входит в систему, добавьте его в конфигурацию PAM с помощью модуля pam_exec
. Чтобы запустить процесс от имени пользователя, который вошел в систему, добавьте его в файл запуска оболочки пользователя, обычно ~ / .profile
.