Команда Linux может иметь прописную букву (буквы)?

Учитывая, что Вы хотите отследить все пользовательские команды, необходимо посмотреть на acct пакет в Вашей системе (в некоторых системах это также называют "учетом процесса" или psacct). Затем после того, как это было включено, можно работать lastcomm управляйте для показа, какие программы были запущены, кого, когда и как долго. От Google, поисковый "Linux acct" для получения дополнительной информации.

http://beginlinux.com/blog/2010/01/monitoring-user-activity-with-psacct-or-acct/

http://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html

17
28.03.2013, 19:50
6 ответов

Нет никакого ограничения на названия команды на Unix. Любой файл может быть командой. И имя файла может быть любой последовательностью одного или нескольких (до предела хотя) символов кроме ASCII NUL или ASCII /. zsh даже лифты, что ограничение для функций, где у Вас может быть любая строка как имя функции.

Несколько примечаний, хотя:

  • Вам будет нелегко создавать названный командный файл . или .. ;-).
  • избегайте имен, которые уже взяты стандартными командами или окружают builtins или ключевые слова (по крайней мере, наиболее распространенных оболочек как bash, zsh, tcsh или ksh). В том отношении символы верхнего регистра могут помочь, поскольку они обычно не используются стандартными командами.
  • Лучше ограничить символами ASCII. Символов Non ASCII не выражают то же в различных наборах символов, которые являются там
  • в то время как Вы в нем, ограничиваете себя буквами, цифрами, тире, точкой и подчеркиванием. Что-либо еще, в то время как законный, может вызвать одну проблему или другого с этим или тем инструментом (например, |, =, & и многих других должны были бы оставить в оболочках, если Вы используете :, Ваша команда не может использоваться в качестве оболочки входа в систему...). Можно даже хотеть исключить . и - которые не позволяются на имена функций во многих оболочках, в случае, если Вы хотите позволить пользователям переносить свою команду в функцию оболочки.
  • Сделайте первый символ буквой. Снова, не строгое требование. Но подчеркивание иногда используется для специальных вещей (как в zsh функции от систем завершения запускаются с _), и команды все-цифры могут быть проблемой в вещах как cmd>output.log. Файлы, имя которых запускается с точки, будут скрыты вещами как ls или globbings оболочки и много файловых менеджеров.
13
27.01.2020, 19:46
  • 1
    Право. Таким образом, я предполагаю, что это сводится к, не используйте ничего необычного, если у Вас нет серьезного основания сделать так. Даже Ваша вторая точка, я не думаю с помощью верхнего регистра для покрытия тех оболочек, настолько умны - не это лучше для именования команды для описания изменения? Как, zsh_with_some_funky_option (вместо ZSH)? –  Emanuel Berg 29.03.2013, 12:40
  • 2
    Действительно ли псевдоним является командой? Поскольку, если да, мне было очень легко ввести alias .="echo Hello" .-) (ну, sudo vim /bin/. было более твердым, хотя...) –  Alois Mahdal 30.03.2013, 00:11
  • 3
    @AloisMahdal Вот почему я сказал командный файл. zsh также позволяет .() echo Hello. Также - pdksh, но . особенный встроенный имеет приоритет там. –  Stéphane Chazelas 30.03.2013, 00:22
  • 4
    Ой, мой неправильно читавший... Интересный момент о pdksh приоритетах, хотя... –  Alois Mahdal 30.03.2013, 00:38

Да это может, и уже существуют некоторые. Такой как /usr/bin/X :)

dennis@lightning:~$ ls {/usr{/local,},}/{s,}bin | grep '[A-Z]'
MAKEDEV
amuFormat.sh
GET
HEAD
Mail
POST
X
X11
Xephyr
Xnest
Xorg
NetworkManager

dennis@lightning:~$ zcat ~/.cache/apt-file /archive.ubuntu.com_ubuntu_dists_precise_Contents-i386.gz | tail -n +33 | cut -f1 | grep -P '^(usr/)?s?bin/.*[A-Z]' | wc -l
758

Таким образом, это 758 во всей Ubuntu 12.04. Полный список: https://gist.github.com/5264777

27
27.01.2020, 19:46
  • 1
    Нет Xdialog?: o И необходимо заключить в кавычки grepпараметр для предотвращения оболочки, расширяющей его в текущем каталоге перед выполнением. –  manatwork 28.03.2013, 18:34
  • 2
    Не устанавливайте его в этой системе :) –  Dennis Kaarsemaker 28.03.2013, 18:35
  • 3
    я хотел бы настоять на заключении в кавычки grepпараметр: pastebin.com/Gak7x9rN (Да, я могу отредактировать его сам, но я предпочитаю, чтобы Вы поняли почему.) –  manatwork 29.03.2013, 10:28
  • 4
    Ну, это может зависеть от оболочки также. Я использовал верхний регистр в своем примере для мобильности, но моего bash в моем корневом каталоге на самом деле расходует [A-Z] к “c d f h j m p q r t”. Так нечувствительно к регистру. –  manatwork 29.03.2013, 11:11
  • 5
    Не говоря уже о zsh или удар failglob опция. Я лично обычно называю свои временные файлы (в ~) a, b, c... и мои временные директора A, B, C... –  Stéphane Chazelas 30.03.2013, 02:15

Самая известная команда stty, который был также доступен как STTY. Было очень удобно задержать терминал к нормальному поведению с STTY SANE.

4
27.01.2020, 19:46
  • 1
    я имею /bin/stty но ничто иное. Хотеть разработать свой ответ немного? –  Emanuel Berg 29.03.2013, 12:25
  • 2
    В добрые старые времена для Вашего терминала было возможно стать так завинченным, что все было прописным. Так тип a и терминал видел бы A. Для восстановления исправности Вы использовали бы stty sane команда. За исключением того, что это теперь невозможно, поэтому имея stty доступный как STTY очень приветствовалось. Я не могу даже помнить прошлый раз, когда мне было нужно это хотя :) –  Dennis Kaarsemaker 29.03.2013, 12:29
  • 3
    @DennisKaarsemaker: WOW! Это - некоторая прохладная часть истории! –  Emanuel Berg 29.03.2013, 12:35
  • 4
    (ott - и @DennisKaarsemaker), у Вас есть он назад. Я отправил другой ответ для разъяснения. –  Stéphane Chazelas 30.03.2013, 00:03

На Fedora 18 здесь:

amuFormat.sh
chkrootkitX
enum_chmLib
enumdir_chmLib
extract_chmLib
fakeCMY
GET
HEAD
Mail
oLschema2ldif
POST
smoltDeleteProfile
smoltGui
smoltSendProfile
smp_conf_zone_man_pass.#prelink#.coLtYv
Terminal
test_chmLib
Thunar
X
Xephyr
xfig-Xaw3d
Xorg
Xvnc
MAKEDEV
NetworkManager
amuFormat.sh
chkrootkitX
enum_chmLib
enumdir_chmLib
extract_chmLib
fakeCMY
GET
HEAD
Mail
oLschema2ldif
POST
smoltDeleteProfile
smoltGui
smoltSendProfile
smp_conf_zone_man_pass.#prelink#.coLtYv
Terminal
test_chmLib
Thunar
X
Xephyr
xfig-Xaw3d
Xorg
Xvnc
MAKEDEV
NetworkManager

Для в общей сложности 50 (о которых я не знал больше всего).

2
27.01.2020, 19:46

На Debian sid, с zsh, и ls -1 $path | grep '[A-Z]', Я добираюсь

GET
HEAD
HtFileType
Mail
POST
Pnews
Rnmail
X
X11
Xephyr
Xorg
ircII
amuFormat.sh
hpljP1005
hpljP1006
hpljP1007
hpljP1008
hpljP1505

Править: Обратите внимание, что, в команде выше, это - цифра один, не буква l. Тот как в одном столбце.

0
27.01.2020, 19:46
  • 1
    С zsh, выполненный: type -m '*[A-Z]*' –  Stéphane Chazelas 29.03.2013, 23:11
  • 2
    @StephaneChazelas: хорошо, Ваш дисплеи путь поиска, и также включает функции оболочки. Но мой также zsh-конкретен: нижний регистр $path не находится в ударе, на этот раз. Ну, чем больше информации, тем лучше. –  Emanuel Berg 30.03.2013, 15:56
  • 3
    Да, я не сказал, что Вашему неправильно, просто предложили альтернативу (хотя я соглашусь, что это не было лучшим из формулировок). Отметьте это $path не zsh конкретный. Это прибывает из csh/tcsh где Ваша команда также работает. –  Stéphane Chazelas 30.03.2013, 19:02
  • 4
    @StephaneChazelas: Ага, это интересно! Нет, моя команда не является "неправильной", но я соглашаюсь, что Ваша лучше, потому что имеет смысл включать функции оболочки и псевдонимы. По крайней мере, для меня это делает, потому что, когда я использую свой компьютер, я не забочусь, является ли это двоичный файл, сценарий, функция, псевдоним, или что бы то ни было, пока я могу выполнить его, и это делает свое задание. (Я предполагаю -m для "соответствия".) –  Emanuel Berg 31.03.2013, 19:54

Несколько примечаний по историческому STTY команда для разъяснения некоторых погрешностей в другом ответе и связанных комментариях:

Более ранние терминалы как DEC VT05 или VT50 и телепринтеры перед этим только поддерживаемые символы верхнего регистра. То, что это означало, - то, что никакой символ нижнего регистра никогда не мог вводиться от них или что они не смогут отобразить любую другую букву, чем прописные.

Так как Unix чувствителен к регистру и большинство команд, являющихся нижним регистром, Вы видите, что там существует проблема. Вот почему существуют специальные termio/termios режимы (и которые находятся все еще там в современных Нельдах даже при том, что те терминалы давно в прошлом) обработать их.

termio/termios являются соответственно более старыми и более новыми интерфейсами для управления tty драйвером на Unix. В termio (s) ioctl, Вы указываете вход, производите, управляете флагами..., которые указывают, как электрические сигналы на последовательной линии состоят в том, чтобы быть обработаны во входные и выходные символы и внутреннее поведение драйвера wrt вещи как эхо, строчный редактор... Большинство из тех обращается к виртуальным терминалам как современные консоли Unix VGA или псевдотерминалам.

Интерфейс командной строки к termio(s) stty команда.

Для обработки прописных терминалов существует три termio(s) флаги включили:

  • IUCLC (Введите Верхний регистр к Нижнему регистру): входящие символы преобразовываются в нижний регистр, когда введено. Это означает A отправленный терминалом рассматривается как a a. Это означает, что с этим на, я могу теперь ввести LS на моем VT50 и оболочке будет читать ls от /dev/ttyX. Я могу также теперь работать stty команда.
  • Теперь, с IUCLC один и терминальный echo, в то время как я ввожу LS, драйвер отправил бы ls назад к терминалу (таким образом, я вижу то, что я ввожу), который он не может отобразить, таким образом, нам также нужно OLCUC (Произведите Нижний регистр к Верхнему регистру), который является, мы должны преобразовать любую строчную букву в верхний регистр прежде, чем отправить к терминалу.
  • Теперь, мы можем управлять Unix от VT50, но что, если мы хотим ввести символы верхнего регистра теперь? Это то, где xcase локальный флаг входит. Это позволяет (только в каноническом режиме ввода) отправку верхнего регистра A путем ввода \A, и на выводе, верхнем регистре A представляется как \A. (что каждый не реализован на Linux),

stty команда имеет соответствие iuclc, olcuc и xcase настройки и псевдоним для всех трех: lcase. Настройка по умолчанию и что Вы получаете после stty sane lcase прочь.

Так, когда Вы находитесь на VT50, все, что необходимо сделать, выполняется:

stty lcase

смочь сделать что-либо. Но держитесь, как дела это, когда можно будет только отправить прописные буквы? Это - то, где Вам нужен a STTY управляйте как псевдоним для stty, и вот почему stty поддержки LCASE как псевдоним для lcase.

Существует не такой SANE исказите, потому что Вы не хотите делать stty sane когда Ваш терминал все-прописной.

Если Вы работаете stty lcase или stty olcuc по ошибке на нормальном терминале (пробуют его в xterm или любой современный терминал), это - то, где необходимо войти stty sane возвращаться к нормальному. Но Вам не нужен a STTY команда для этого. Если Вы вводите stty sane, Вы будете видеть STTY SANE отреагировавший, но это - только отображаемый текст (не вводимая команда), который будет переведен, это все еще stty sane команда, которая будет выполнена.

Они iuclc, olcuc, xcase флаги раньше указывались POSIX (и это, вероятно, почему он реализован на Linux даже при том, что я серьезно сомневаюсь, что кто-либо когда-либо подключал любой из тех старых терминалов к системе Linux (кроме для забавы)), но были удалены в POSIX:2001.

4
27.01.2020, 19:46

Теги

Похожие вопросы