Запуск кота должен быть сделан в init-сценарии. Если Вы хотите дать группу пользователей, право на (ре) запускает кота, добавляет строку к использованию/etc/sudoers visudo
. Это могло быть похожим:
%tomcatcontrol localhost = NOPASSWD : /etc/init.d/tomcat *
Замените localhost названием Вашей машины. Затем каждый пользователь группы tomcatcontrol сможет выйти:
sudo /etc/init.d/tomcat restart
(или состояние или остановка, или запускается).
Для именно это sudo. Если Вы хотите работать дольше с корневой учетной записью, можно сделать su -
. Если Вы хотите, чтобы другие пользователи на самом деле управляли содержанием кота (файлы, принадлежавшие пользовательскому коту), Вы могли позволить a su - tomcat
для пользователя или группы пользователей.
Что касается Ваших псевдонимов - я думаю, что OpenSuSE имеет/etc/profile.local с этой целью: Там можно поместить материал, который должен быть допустимым для каждого пользователя.
file=myfile
for class in alnum alpha blank cntrl digit graph lower print punct space upper xdigit
do
printf '%7s: %d\n' "$class" "$(tr -Cd "[:${class}:]" < "$file" | wc -m)"
done
ascii
и word
не классы стандартного символа и bash
конкретный. word
alnum
плюс подчеркивание, и ascii
символы от 0 до 127, таким образом, можно сделать:
printf '%7s: %d\n' word "$(tr -Cd "_[:alnum:]" < "$file" | wc -m)"
printf '%7s: %d\n' ascii "$(LC_ALL=C tr -cd '\0-\177' < "$file" | wc -c)"
(обратите внимание что реализация GNU tr
, с coreutils-8.22, не будет работать с многобайтовыми символами).
Походит на забавный класс!Что это?
Это получит Вас большая часть пути там; sed, кажется, не поддерживает: ASCII: или: слово: но:
for f in alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
do
echo "$f: $(sed s/[^[:$f:]]//g b.txt | tr -d '\n' | wc -c)"
done
Где мы используем sed для разделения всего кроме символов, мы заботимся о, затем удаляем все пустые строки и просто получаем количество перенесенных символов.
Должно быть относительно точным, за возможным исключением +/-1 или off-by-a-factor-of-ten ошибки.
cntrl
или space
так как Вы исключаете символы LF. В зависимости от sed
реализация, символы NUL могут быть проблемой также.
– Stéphane Chazelas
23.07.2013, 11:51
]Я не буду искать, какие символы подходят к какому классу - вероятно, вы сможете это выяснить и/или просто посмотреть другие ответы. Но это даст вам однозначное представление о характере вашего файла по символам, не пропустив ни одного:[
] [ _c2o() { od -A n -t o1 -w1 -v | tr -dc '0-9\n' ; }
_c2o <file
163
150
072
040
167
141
162
156
151
156
147
]
[]Это функция, которую я использую во множестве различных способов. Каждая строка представляет собой один кусочек, выраженный в восьмеричном формате - хотя []od[
] очень настраиваемый. Но таким образом вы можете очень просто []grep[
] или []sed[
] для своих целевых значений и реализовать счетчик строк. Это действительно кусок пирога. И это очень быстро.[
]Хорошо, итак, я все равно сделал классы:[
] [_classes() { set -- ${classes=alnum alpha blank cntrl digit graph lower print punct space upper xdigit}
while ${1+:} false ; do
printf %b $(printf '\\%04o\n' $(seq 0 127)) |
tr -dc "[:${1}:]" | {
printf "$1='"
_c2o
printf "'\n"
} ; shift
done
}
]
[]Запустите выше и вы получите вывод типа:[
] [xdigit='060
061
062
063
064
065
066
067
070
...
'
]
[]Отсюда я представляю себе что-то вроде:[
] [eval "$(_classes)"
for class in $classes ; do
eval "$class=\$(_c2o <file | grep -c -F "$class")"
done
]
[]Нужно разобраться с этим немного лучше - но это почти делает всю работу.[
]
word
не синонимично сalnum
– “_”word
но неalnum
. pastebin.com/raw.php?i=czZcwix0 – manatwork 23.07.2013, 10:47