Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154

Открыть новую тему     Написать ответ в эту тему

digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи вопрошающие! Если ваша система отлична от ГНУ, и в то же время вы желаете обойтись только дефолтными средствами, указывайте и то и другое сразу, пожалуйста.


UNIX Shell

 
   Это глобальная тема по юниксовой командной оболочке, как по интерактивной работе в командной строке, так и по шелл-скриптам. Ключевые слова: sh, bash, zsh, tcsh, busybox, readline, coreutils, cp, mv, ln, rm, ls, readlink, mkdir, touch, stat, date, test, sleep, chown, chmod, chattr, dd, df, du, env, echo, cat, less, man, grep, sort, findutils, find, locate, xargs, md5sum, cmp, diff, patch, ps, kill, killall, tar, gzip, bzip2, xz, mount, fdisk, parted, mkfs, fsck, e2fsprogs, mtools, ss, netcat, netstat, rsync, ssh, scp, sftp, lftp, ncftp, time, strace.
   Неинтерактивная обработка текста (sed, awk, perl) пока тоже здесь.
   Смотри в других ветках: wget, convert, montage, mogrify и др., gs, git, 7z, p7zip, soffice, mplayer, mencoder, vlc, vim, mc, mcedit, kioclient.
 
 

Hint! Русские маны (подустаревшие, не всегда полные и не всегда для вашей системы) можно попытаться найти на Опеннете, к примеру: bash, tar, grep.

 
Готовые решения:
  • commandlinefu.com
    Крупнейшая база полезных однострочников на командной оболочке с ранжированием на основе пользовательского голосования.
     
  • shell-fu.org
    Аналогично, но поменьше и формат записей более свободный, поэтому встречаются и однострочники, и развернутые скрипты, и просто советы.
     
  • Useful one-line scripts for sed
    Почти исчерпывающий список решений для тех случаев, когда sed незаменим. Более сложные скрипты с sed.sf.net — только для тех, кто знает толк... :)

 
Учебная литература:
  • Greg’s Wiki (http://mywiki.wooledge.org)
    Наиболее обширный авторский сборник постоянно обновляющихся материалов по Башу.

    1. Bash Pitfalls
      (Частые ошибки программирования на Баше: [1], [2], [3], [4], [5] — пер. на русский по сост. на дек. 2008 г.).
      Рассмотрены преимущественно ошибки, возникающие из-за непонимания отличия шелла от «нормальных» скриптовых языков. Если вы уже владеете, например, Перлом, то это вполне может быть ваше первое руководство для ознакомления с Башем.
    2. Bash FAQ
    3. Bash Guide
    4. Bash Reference Sheet
      Шпаргалка по частым синтаксическим оборотам.

 
Классическая учебная литература:
С одной стороны не упомянуть эти издания нельзя, с другой — они настолько устарели, что едва ли их можно рекомендовать в роли учебника.

 

Смело правьте и дополняйте шапку, однако не забывайте отписываться об исправлениях и сохранять исходный вариант под #.
Первый пост темы имел вид...

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: qw12, 09:42 24-03-2020
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ещё один на мой взгляд недостаток PIPESTATUS-ов (насколько я ими успел проникнуться) - невозможность узнать статусы предыдущих пайпов.
 
Про (stmfadm list-view -l $guid | grep "Host group" | cut -d: -f 2) они рассказывают, а вот так уже нет:
host_group=$(stmfadm list-view -l $guid | grep "Host group" | cut -d: -f 2)  
 
Логично поручить это тому же фреймворку.
 
 
Добавлено:
 
Или, может... вместо фреймворка с препроцессором - масенький интерпретатор специально под описанную задачу созданного "языка описания пайпов" (написанный на том же баше, конечно), который бы для всей реальной работы запускал субшеллы в специально подготовленном для них окружении.
 
Впрочем, возможно я изобретаю велосипед, и в экосистеме юниксов такое уже присутствует
 

Всего записей: 17747 | Зарегистр. 14-10-2001 | Отправлено: 16:40 31-03-2012 | Исправлено: LevT, 16:54 31-03-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
Причём здесь вообще система? Bash самый обычный интерпретатор. И работаете вы именно с данным языком программирования, а не с системой. К системе вы только периодически обращаетесь через внешние утилиты.

Цитата:
так уже нет
да, конструкция $() вызывается отдельно.
 
Повторюсь - ни что не мешает написать функцию pipe(), которая выполняла бы необходимые Вам преобразования. На вход подать список команд.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 17:01 31-03-2012
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
можно написать такую функцию, навскидку она, даже, не сложная, но...

 
Ну да, продумать инфраструктуру (архитектуру исполнения и управляющий язык) определённо сложнее, а пока это не сделано, нет смысла писать отдельные функции под несуществующий рантайм.
 
Тут вопрос именно личной мотивации. Вас прикалывает решать задачки "вглубь", лазя по закоулкам манов - а меня другое, вот это вот самое: генерировать технически осмысленные мегазадачи, в надежде на то, что часть из них будут решены. Хотя бы с ростом брутальной силы окружающих гигагерц и контролируемой сложности систем.
 
 
Добавлено:
 

Цитата:
Причём здесь вообще система? Bash самый обычный интерпретатор.  

 
То, что PIPESTATUS-ы известны только для последнего пайпа - это фича системы или баша?
 
Но тема-то здешняя не только о баше, не так ли?

Всего записей: 17747 | Зарегистр. 14-10-2001 | Отправлено: 17:14 31-03-2012 | Исправлено: LevT, 18:41 31-03-2012
DrakonHaSh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
увидел ваше это:

Цитата:
либо для каждой команды перенаправлять вывод, либо всё гораздо проще:
exec 5<&2    # сохранили текущие настройки в новый файловый дескриптор 5
exec 2>new_err.log   # запили новый вывод для ошибок
ls /qqq   # ошибка ушла в новый вывод
...   # еще с пяток команд с ошибками
exec 2<&5   # вернули настройки вывода ошибок в хз куда
 

 
возник вопрос. а существует ли "консольная магия", позволяющая эмулировать tty ?
т.е. что-то, что делало бы возможным следующее:  
id
=>
uid=666(user) gid=666(user) groups=777(users)
 
exec /dev/tty1<&0; echo password $'\n' id | su;
=>
id uid=0(root) gid=0(root) groups=0(root)

Всего записей: 2078 | Зарегистр. 08-01-2008 | Отправлено: 18:36 31-03-2012 | Исправлено: DrakonHaSh, 19:12 31-03-2012
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Могу ещё дополнить свой проект инструментовки транслятором обычного скрипта в программу на "языке управления пайпами" вкупе с шаблонами обёрток для команд (с #<TODO:> внутри).  
Готовые заполненные шаблоны могут выбираться из локальной библиотеки.
 
Впрочем, не исключаю что в экосистеме что-то для этой цели есть, и я изобретаю лисапед. )

Всего записей: 17747 | Зарегистр. 14-10-2001 | Отправлено: 19:12 31-03-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
> а существует ли "консольная магия", позволяющая эмулировать tty?
Крайне неудачная формулировка. Вы как бы постоянно пользуетесь именно эмулированным телетайпом. ;-)
 
> id
> =>
> uid=666(user) gid=666(user) groups=777(users)
 
Это, я так понимаю, следует читать так:
$ id
uid=666(user) gid=666(user) groups=777(users)

 
Тогда это вы, я так понимаю, пытаетесь обойти наложенный разработчиками по соображениям безопасности запрет на чтение рутового пароля не из терминала.
$ su <<< myrootpass
su: must be run from a terminal

 
Если да, то сразу это нельзя было написать, не запутывая нас заведомо ошибочными конструкциями вида su; id, вместо su -c id?
 
В качестве ответа могу сообщить, что наиболее детальный разбор этого вопроса я читал по адресу http://web.me.com/nissplus/SILKDOTCOM/SwimLanes/Entries/2008/8/3_SU_vs_TERMINAL.html

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:29 31-03-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
у-у, я в этом не участвую...
Я тут только по поводу shell'ов и скриптов к ним.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 22:11 31-03-2012
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

А я и не призываю никого заниматься чем-то ему несвойственным.
 
Но и к себе прошу такого же отношения - а именно не отсылать искать во "всемогущих манах" ответы на (возможно, неприятные) вопросы об ограничениях существующей архитектуры системы-шеллов-утилит:

Цитата:
То, что PIPESTATUS-ы известны только для последнего пайпа - это фича системы или баша?  

 
И на обратного рода вопросы тоже прошу ответы не скрывать, если они вдруг вам известны:

Цитата:
Впрочем, возможно я изобретаю велосипед, и в экосистеме юниксов такое уже присутствует  


Всего записей: 17747 | Зарегистр. 14-10-2001 | Отправлено: 22:33 31-03-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
А если отвлечься от поиска уязвимости в su при проверке пароля, то писать во входной буфер произвольного tty, сиречь отдавать в него команды, вполне можно, но:
а) утилиты для этого среди дефолтных нету, но можно воспользоваться вот этой, что под названием ttyecho;
б) для этого нужны рутовые права ;-).
 
Писать во входной буфер того tty, с которого исполняемся, можно и с пользовательскими правами:
 
$ ttyecho -n $(tty) echo Ququ. # далее я ничего вручную не вводил
echo Ququ.  
$ echo Ququ.
Ququ.

 
Это применимо и из-под скриптов:
 
$ cat ttyechotest.sh  
#!/bin/bash
ttyecho -n $(tty) echo Ququ.
$ ./ttyechotest.sh # опять же, это последняя введенная мною команда
echo Ququ.  
$ echo Ququ.  
Ququ.


----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:33 31-03-2012 | Исправлено: ASE_DAG, 22:36 31-03-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
утилиты для этого среди дефолтных нету
# echo "some text" > /dev/pts/0
 
LevT

Цитата:
The following variables are set by the shell:
что бы Вас ни куда не посылать буду сам цитировать. Среди переменных и PIPESTATUS...
Ни чего подходящего под Ваши запросы я не встречал, да и не требовалось ни когда такого в моей практике.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 22:41 31-03-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
>> утилиты для этого среди дефолтных нету  
> # echo "some text" > /dev/pts/0
Цитата:
писать во входной буфер произвольного tty, сиречь отдавать в него команды, но утилиты для этого среди дефолтных нету

 
А для записи в выходной, кстати, суперпользовательские права не нужны. При условии, что это ваша tty, конечно.
$ echo "some text" > /dev/pts/0

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:49 31-03-2012 | Исправлено: ASE_DAG, 22:50 31-03-2012
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd

Цитата:
что бы Вас ни куда не посылать буду сам цитировать.

 
Я всё же полагаю, что это от того, что разработчикам шелла не показалось нужным проложить более толстую прокладку над ЭТИМ МЕСТОМ системы (а над другими вполне показалось: выбор произвольный, под влиянием их тогдашних обстоятельств и приоритетов)
 
Это не означает, что их тогдашний выбор стал "божественной данностью".
 
Я считаю себя равноправным субъектом, способным интересоваться их мотивами и желать исправления всплывающих со временем ограничений. Например,  мне кажется, что на современных компах можно не экономить на использовании субшеллов.
 
 
Добавлено:
 
В то же время, вероятно есть какие-то базовые для юникса ограничения, которые можно выкинуть только вместе с юниксом как рантаймом (например, в пользу жабы какой-нибудь или powershell)
 
Как Вы думаете, относятся ли сюда проблемы интерпретации содержимого stderr и запоминания серии экзитстатусов (не только последнего пайпа)?
 

Всего записей: 17747 | Зарегистр. 14-10-2001 | Отправлено: 22:55 31-03-2012 | Исправлено: LevT, 23:08 31-03-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
> ...желать исправления всплывающих со временем ограничений. Например...
mailto:bug-bash@gnu.org?subject=Feature%20Request%3A

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:04 31-03-2012 | Исправлено: ASE_DAG, 23:05 31-03-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
Видимо им так не показалось, да не возможно сделать всё на все случае жизни. Они сделали правильно, дали возможность получить данные из команд между pipelines. Дальше можете сохранять эту инфу и делать с ней всё что угодно. Их цель дать инструмент, а не конструктор с миллионом деталей.
Как найти разработчика для написания петиции.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 23:06 31-03-2012 | Исправлено: Alukardd, 23:06 31-03-2012
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

А почему технические проблемы с свободными инструментами должны решаться непременно с помощью метода гуманитарного - петиций к разработчикам и т.п. "политической" активности? Для меня лично этот метод даже затратнее затеи соорудить собственный фреймворк, расширяющий рантайм.
 
Кроме того, даже если такая петиция будет удовлетворена через некое время в новой версии баша - это мне не поможет: обновлять баш на невнятных деривативах соляры я не рискну.
 

Цитата:
В то же время, вероятно есть какие-то базовые для юникса ограничения, которые можно выкинуть только вместе с юниксом как рантаймом (например, в пользу жабы какой-нибудь или powershell)
 
Как Вы думаете, относятся ли сюда проблемы интерпретации содержимого stderr и запоминания серии экзитстатусов (не только последнего пайпа)?
 

 
Поскольку выкидывать юникс-рантайм я никак не могу: шанс управлять моими таргетами покамест предоставляет мне только он, мне В ТАКОМ (см. самоцитату) СЛУЧАЕ остаётся примириться с его аутизмом в некоторых областях. ((
 
 

Всего записей: 17747 | Зарегистр. 14-10-2001 | Отправлено: 23:22 31-03-2012 | Исправлено: LevT, 00:13 01-04-2012
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможности метода петиций ограничены самой технической реальностью.  
 
Для разработчиков баша приоритетна совместимость с существующими скриптами; по этой причине язык невозможно бесконечно гнуть под влиянием разнонаправленных векторов: имхо, он и так уже не блещет красотой из-за трудного прошлого. Я понимаю их вероятное стремление оставаться в каких-то важных для них, а для меня непонятных рамках и уважаю их решение.
 
Но язык это тоже всего лишь инструмент, как и рантайм. По большому счету, приоритетны люди, их цели, их свободы от технически немотивированных ограничений и даже эстетические вкусы и причуды (поскольку они физически обеспечены дармовыми гигагерцами-иопсами): если возможности существующих языков и рантаймов перестают тем удовлетворять, ничто не мешает создавать более подходящие инструменты.  
 
А также использовать существующие неожиданным и непривычным образом, по соображениям экономии личных ресурсов.

Всего записей: 17747 | Зарегистр. 14-10-2001 | Отправлено: 08:57 01-04-2012 | Исправлено: LevT, 09:45 01-04-2012
SIgor33

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вопрос в crone запускаю скрипт в котором хочу остановить glassfish cron настроен на работу от пользователя который запустил glassfish
скрипт выглядит  
#!/bin/bash
cd /home/umms/
/home/umms/usr/glassfish3/bin/asadmin stop-domain
glassfish почему-то не стопиться а если запускаю скрипт из командной строки все отрабатывается подскажите что сделать чтобы он из крона пахал

Всего записей: 653 | Зарегистр. 03-03-2009 | Отправлено: 15:06 01-04-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SIgor33
акакаянеобходимостьвскрипте · здесьвсегооднастрочканужна · /home/umms/usr/glassfish3/bin/asadmin stop-domain · ееивпишитевкронтаб · адабыотследитьгдеошибкаперенаправьтевыводвфайл · $HOME/usr/glassfish3/bin/asadmin stop-domain >> $HOME/var/asadmin.log 2>&1

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:32 01-04-2012 | Исправлено: ASE_DAG, 17:52 01-04-2012
DrakonHaSh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
спасибо за ответы
 

Цитата:
В качестве ответа могу сообщить, что наиболее детальный разбор этого вопроса я читал по адресу http://web.me.com/nissplus/SILKDOTCOM/SwimLanes/Entries/2008/8/3_SU_vs_TERMINAL.html

это шаманство заюзать мне не получилось - у меня оно в BackTrack не работает. У вас получилось ?
 

Цитата:
а) утилиты для этого среди дефолтных нету, но можно воспользоваться вот этой, что под названием ttyecho;
б) для этого нужны рутовые права .  

за прогу спасибо, но толку от нее, раз рут для запуска всегда обязателен.
 
нашел решение попроще и поуниверсальнее:

Код:
#!/usr/bin/expect
spawn su
sleep 1
send "toor\r"
sleep 1
send "id\r"
interact

Всего записей: 2078 | Зарегистр. 08-01-2008 | Отправлено: 23:15 01-04-2012 | Исправлено: DrakonHaSh, 23:17 01-04-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
> но толку от нее, раз рут для запуска всегда обязателен
Отнюдь не всегда. Вы как-то выборочно читаете. ;-)
ASE_DAG (22:33 31-03-2012)
Цитата:
Писать во входной буфер того tty, с которого исполняемся, можно и с пользовательскими правами:

Но ввести рутовый пароль таким образом у меня не получилось, хотя команды, как я и показал выше, отдаются корректно.
 
> #!/usr/bin/expect
Любопытная штука. Спасибо, запишу себе в блокнотик.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:29 01-04-2012 | Исправлено: ASE_DAG, 23:29 01-04-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154

Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru