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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Skif_off
> В подобных случаях (запуск скриптом) есть ли смысл предварительно
> перейти командой cd в каталог программы?
 
То есть, в нормальном случае в /usr/bin?  Нет, конечно.


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:53 24-04-2018
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго.
Помогите плиз разобраться со скриптом:
Эта "штука" делает образ microSD для Raspberry Pi 3.
по инструкции добывается так:
git clone https://github.com/freebsd/crochet /crochet
затем запуск ./crochet  -b RaspberryPi3
 
Запускал на freebsd 11.1
клонировал не в корень, а в /root/crochet
скрипт успешно (судя по логам) откомпилил world и kernel и вылетел на попытке перейти куда-то

Код:
 
root@max:~/crochet # ./crochet.sh -b RaspberryPi3
Starting at вторник, 29 мая 2018 г. 20:48:42 (+05)
Board: RaspberryPi3
Source version is: 334337
Building FreeBSD version: 11.1
Image name is:
    /root/crochet/work/FreeBSD-aarch64-11.1-GENERIC-334337-RaspberryPi3.img
Building FreeBSD version: 11.1
Object files are at: /root/crochet/work/obj/arm64.aarch64/usr/src
Found suitable FreeBSD source tree in:
    /usr/src
Found U-Boot port in:
    /usr/local/share/u-boot/u-boot-rpi3
Found firmware port in:
    /usr/local/share/rpi-firmware
Building FreeBSD aarch64 world at вторник, 29 мая 2018 г. 20:48:56 (+05)
    (Logging to /root/crochet/work/_.buildworld.aarch64.log)
Building FreeBSD aarch64-GENERIC kernel at среда, 30 мая 2018 г. 00:18:52 (+05)
    (Logging to /root/crochet/work/_.buildkernel.aarch64-GENERIC.log)
Building FreeBSD aarch64-GENERIC efi at среда, 30 мая 2018 г. 00:29:46 (+05)
    (Logging to /root/crochet/work/efi-aarch64-GENERIC/_.efi.aarch64-GENERIC.build.log)
cd: stand: No such file or directory
root@max:~/crochet # cat ./crochet.sh | grep cd
 

но!
я не могу понять, как скрипт устроен внутри - это какой-то другой уровень /bin/sh:

Код:
 
root@mx:~ # cat /root/crochet/crochet.sh
#!/bin/sh
set -e
echo 'Starting at '`date`
 
# General configuration and useful definitions
TOPDIR=`cd \`dirname $0\`; pwd`
LIBDIR=${TOPDIR}/lib
WORKDIR=${TOPDIR}/work
PREFIX="/usr/local"
SHARE_PATH="${PREFIX}/share"
PORTS_PATH="/usr/ports"
CONFIGFILE=
BOARD=
UPDATE_SOURCE=
 
VERBOSE=0
 
# Load utility libraries: strategy.sh must go first
. ${LIBDIR}/strategy.sh
# Rest in alphabetic order
. ${LIBDIR}/board.sh
. ${LIBDIR}/config.sh
. ${LIBDIR}/customize.sh
. ${LIBDIR}/disk.sh
. ${LIBDIR}/email.sh
. ${LIBDIR}/freebsd.sh
. ${LIBDIR}/gpt.sh
. ${LIBDIR}/scm.sh
. ${LIBDIR}/uboot.sh
. ${LIBDIR}/firmware.sh
. ${LIBDIR}/util.sh
 
crochet_usage ( ) {
    echo "Usage: sudo $0 [-b <board>|-c <configfile>]"
    echo " -b <board>: Load standard configuration for board"
    echo "    (Equivalent to loading a config file that contains"
    echo "    only a single board_setup command.)"
    echo " -c <file>: Load configuration from file"
    echo " -e <email>: Email address to receive build status"
    echo " -u: Update source tree"
    echo " -v: Print more detailed progress information"
    exit 2
}
 
# Parse command-line options
args=`getopt b:c:e:vu $*`
if [ $? -ne 0 ]; then
    crochet_usage
fi
set -- $args
while true; do
    case "$1" in
        -b)
            BOARD="$2"
            shift; shift
            ;;
        -c)
            CONFIGFILE="$2"
            shift; shift
            ;;
        -e)
            option Email "$2"
            shift; shift
            ;;
        -u)
            UPDATE_SOURCETREE=yes
            shift
            ;;
        -v)
            VERBOSE=$(($VERBOSE + 1))
            shift
            ;;
        --)
            shift; break
            ;;
        *)
            crochet_usage
    esac
done
 
#
# Load user configuration:  This builds the strategy.
#
if [ -z "$BOARD" ] && [ -z "$CONFIGFILE" ]; then
    crochet_usage
fi
if [ -n "$BOARD" ]; then
    board_setup $BOARD
fi
if [ -n "$CONFIGFILE" ]; then
    load_config $CONFIGFILE
fi
 
# Initialize the work directory, clean out old logs.
mkdir -p ${WORKDIR}
rm -f ${WORKDIR}/*.log
 
# Details for the email reports
BUILDCONFIG="TOPDIR: ${TOPDIR}
SOURCE TREE: ${FREEBSD_SRC}"
 
#
# What to do when things go wrong.
#
handle_trap ( ) {
    disk_unmount_all
 
    email_status "${BUILDCONFIG}" "Crochet build failed"
 
    echo
    echo 'ERROR: Exiting at '`date`
    echo
    exit 2
}
trap handle_trap INT QUIT KILL
 
if [ -n "${UPDATE_SOURCETREE}" ]; then
    scm_update_sourcetree
fi
 
#
# show source revision
#
scm_get_revision
 
#
# get the OS version from the source tree
#
freebsd_src_version
 
#
# Run the strategy to do all of the work.
#
email_status "${BUILDCONFIG}" "Crochet build commenced"
run_strategy
 
# Clear the error exit handler
trap - INT QUIT KILL EXIT
 
# Clean up
disk_unmount_all
 
email_status "${BUILDCONFIG}" "Crochet build finished"
echo 'Finished at '`date`
 

 
не понимаю, как это работает и что поправить (КУДА не получилось "cd"?)чтобы образ сформировался без перекомпиляции ядра и мира (сильно долго).

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 23:05 29-05-2018
U235

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

Цитата:
клонировал не в корень, а в /root/crochet  

Вот из-за этого, похоже, и не работает.
в crochet-master/lib/freebsd.sh
есть фрагмент:

Код:
echo "Building FreeBSD $CONF efi at "`date`
    echo "    (Logging to ${LOGFILE})"
    rm -rf ${EFI_DIR}/boot
    mkdir -p ${EFI_DIR}/boot/defaults
 
    cd stand
    eval $buildenv make "$@" -m $sharemk obj > ${LOGFILE} 2>&1  

а stand у FreeBSD в корне, а не в текущей папке.
можно попробовать заменить cd stand на cd /stand или клонировать в корень.
P.S. удачи с RPi3
 

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 05:54 30-05-2018
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо!
ключевое слово "stand"!
теперь понятно, что я невнимательно прочёл ошибку....
 
И, ни на одном сервере у меня в "stand" корне нет.  
Он в корне сырцов (должен быть)
но, поскольку сырцы я по привычке качал как
svn co svn://svn.freebsd.org/base/releng/11.1/ /usr/src
то именно stand там нету.
а надо было  
svn co svn://svn.freebsd.org/base/head /usr/src/
 
придётся всё-таки перекомпилять...
 

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 08:06 30-05-2018
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Прошу помочь с освоением незнакомой мне нотации (раньше видел, но не задумывался) шаблонов в sed.
Есть исходные данные:

Код:
1.32.194.33/32
1.32.194.67/32

Результат выглядит так:

Код:
route 1.32.194.33/32 reject;
route 1.32.194.67/32 reject;

Команда с понятной мне нотацией для подобного результата:

Код:
sed 's/^/route /g; s/$/ reject;/g'

Тот же результат делает команда, которую хочется понять:

Код:
sed 's_.*_route & reject;_'

 
Где почитать про эту магию?

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 00:55 03-06-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan
В общем-то ни какой магии.
Амперсанд (&) представляет собой всё то что "сматчил" шаблон, в данном случае это вся строка (.*).
А подчркивание здесь хз ради какого выпендрёжа. На самом деле это всё таже команда s///, просто вместо привычного Вам слеша можно использовать совершенно любой символ.
 
Почитать? Ну, наверняка, всё это описано в документации - info sed
Что-то про s/// не вижу, но просто про regexp там описано, наверное ниже сказано типа "аналогично описанному выше"

'\%REGEXP%'
     (The '%' may be replaced by any other single character.)
 
     This also matches the regular expression REGEXP, but allows one to
     use a different delimiter than '/'.  This is particularly useful if
     the REGEXP itself contains a lot of slashes, since it avoids the
     tedious escaping of every '/'.  If REGEXP itself includes any
     delimiter characters, each must be escaped by a backslash ('\').
 
     The following two commands are equivalent.  They print lines which
     start with '/home/alice/documents/':
 
          sed -n '/^\/home\/alice\/documents\//p'
          sed -n '\%^/home/alice/documents/%p'
          sed -n '\;^/home/alice/documents/;p'


----------
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 | Отправлено: 02:12 03-06-2018 | Исправлено: Alukardd, 02:17 03-06-2018
karavan



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

Цитата:
вместо привычного Вам слеша можно использовать совершенно любой символ.

Спасибо. Именно это я где-то пропустил.

Цитата:
sed -n '\%^/home/alice/documents/%p'
sed -n '\;^/home/alice/documents/;p'

Здесь первый разделитель (и только первый) экранируется, а в моем примере нет экрана перед первым подчеркиванием. Почему?
Если следовать примеру с разделителем ";", как разделить несколько команд из моего примера?
 

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 03:10 03-06-2018 | Исправлено: karavan, 03:23 03-06-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan
у команды s разделитель не надо экранировать
echo "ok ololo no" | sed 's_ .* _ & nono _; s? no$? YES?'
 
Это, даже логично, команда явно начинается с символа s, за которым следует разделитель. В случае с поиском, не ясно без экранирования. что это нечто начало команды поиска.
Можно довести до такого: echo "ok ololo no" | sed -n '\sololosp'

----------
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 | Отправлено: 11:26 03-06-2018
VecH



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
использую wget для Windows например вот так:
wget --no-check-certificate --content-disposition "https://download.mozilla.org/?product=firefox-esr-latest&os=win&lang=ru"
все качается верно, на выходе: Firefox Setup 52.7.4esr.exe
 
т.к. в wget нет поддержки socks, а для Windows нет консольных утилит для заворачивания трафика в socks
попробовал curl в котором есть поддержка socks
 
но опять проблема, файлы на выходе через редиректы от mozilla получаются кривыми: product=firefox-esr-latest&
 
как дергать серверные имена файлов в curl
 
в интернете есть скрипты в два запроса, первый спрашивает имя, второй уже качает перенаправляя в полученное ранее имя файла, но они под linux, а у меня windows
 
Есть ли в curl какой то аналог параметра --content-disposition из wget ?

Всего записей: 2509 | Зарегистр. 18-02-2003 | Отправлено: 04:31 07-06-2018
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
VecH
В скриптах используются sed и/или grep, которые вполне есть под Win. Иногда еще xargs - тоже имеется.

Всего записей: 12815 | Зарегистр. 11-03-2002 | Отправлено: 07:57 07-06-2018
drondo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помочь со скриптом на баше, никак не могу разобраться.  
С помощью curl получаю JSON с рандомной картинкой JSON
нагуглил консольную утилитку jq для парсинга JSON.  
нужно сохранить файл по именем, указанным в ID, по ссылке, указанной в  .urls. full
ссылку на файл получилось узнать вот таким совмещением curl и jq:
 
Код:
curl -v -G --header "Authorization: Client-ID $KEY" https://api.unsplash.com/photos/random --data-urlencode "query=$keyWord" | jq '.urls | .full' | tr -d '"'
но не получается из этого же JSON выцепить и ID, чтобы сохранить под этим именем. А два запроса делать бесполезно, каждый запрос возвращает рандомную картинку.  
C помощью запятой в синтаксесе jq
Код:
.id, .urls
получаю так
 но перейти на уровень глубже не выходит, чтобы в одну переменную сохранить ID а в другой ссылку.
Может что подсказать? Что хочется получить в конечном результате - запросом curl получаю json с рандомной картинкой, выцепляю из ответа ID и ссылку, сохраняю ссылку тем же curl под нужным именем, указанным в ID. C переменными, curl  и jq вожусь всего второй день, поэтому наверняка что то упускаю

Всего записей: 464 | Зарегистр. 28-10-2005 | Отправлено: 13:49 10-06-2018 | Исправлено: drondo, 13:58 10-06-2018
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
drondo
Цитата:
curl -v -G --header "Authorization: Client-ID $KEY" https://api.unsplash.com/photos/random --data-urlencode "query=$keyWord" | jq '.id, .urls.full' | xargs curl <curl_params> -o

Всего записей: 12815 | Зарегистр. 11-03-2002 | Отправлено: 14:05 10-06-2018
drondo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
большое спасибо, работает, но чуть чуть не так как хотелось бы. имя получается без расширения. Можно ли как то получить через вывод
Код:
jq '.id, .urls.full'
две переменные внутри скрипта, $id и $url для дальшейшего использования, например если понадобится сохранить ссылку в файл. конструкция
Код:
var=$(curl -v -G --header "Authorization: Client-ID $KEY" https://api.unsplash.com/photos/random --data-urlencode "query=$keyWord" | jq '.urls | .full' | tr -d '"');
echo $var
дает одну строку, где два значения разделяются пробелами, хотя вывод в консоли
Код:
curl -v -G --header "Authorization: Client-ID $KEY" https://api.unsplash.com/photos/random --data-urlencode "query=$keyWord" | jq '.urls | .full' | tr -d '"'
выводит их в две строки, id и ссылку отдельно.

Всего записей: 464 | Зарегистр. 28-10-2005 | Отправлено: 15:28 10-06-2018 | Исправлено: drondo, 15:34 10-06-2018
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
drondo
Ну например так, если параметры комстроки (или переданные в процедуру) не особо нужны уже
Цитата:
set -- $(curl -v -G --header "Authorization: Client-ID $KEY" https://api.unsplash.com/photos/random --data-urlencode "query=$keyWord" | jq -r '.id, .urls.full')
id=$1
url=$2
(jq -r - это чтобы кавычки не мешались)

Всего записей: 12815 | Зарегистр. 11-03-2002 | Отправлено: 15:44 10-06-2018
drondo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
К сожалению в процедуру передаются как раз передаются 3 параметра при вводе, и они используются в дальнейшем, поэтому $1 и $2 нельзя затирать.

Всего записей: 464 | Зарегистр. 28-10-2005 | Отправлено: 15:56 10-06-2018 | Исправлено: drondo, 16:00 10-06-2018
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
drondo
Нуканешна... нельзя. Ведь перед этим set -- ну никак не написать
Цитата:
param1=$1
param2=$2
это ведь так сложно

Всего записей: 12815 | Зарегистр. 11-03-2002 | Отправлено: 16:10 10-06-2018
drondo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
да, торможу, прошу прощения . В свое оправдание скажу, что это мой первый опыт со скриптами и командной строкой, приходится гуглить и переменные и eval  и кучу всего за эти два дня знакомства.  

Всего записей: 464 | Зарегистр. 28-10-2005 | Отправлено: 16:45 10-06-2018
qw12



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вопрос про grep
 
--binary-files=ТИП считать, что двоичный файл имеет ТИП:   «binary», «text» или «without-match».    
-a, --text то же что и --binary-files=text    
-I то же, что и --binary-files=without-match

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

Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 15:41 14-06-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
qw12
Обычно они нужны когда ты делаешь рекурсивный поиск, например по всему дереву, от /. И не хочешь искать нужную тебе строку в бинарниках, а хочешь только конфиги грепать.

----------
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 | Отправлено: 16:05 14-06-2018
qw12



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Я рекурсивно вот и ищу. Результат - разный. С параметром находит значительно больше в тех же самых файлах.

Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 16:18 14-06-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 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