K4S

          -- Доктор, после того, как я очнулся из комы,
             мне никого больше не узнать. Что это -- 
             глобальная Мутация, или Адаптация к захваченной Земле?
             
          Блеснув по-инопланетному налитыми черными зрачками,
          Доктор ответила милым и приветливым голосом:

          -- Да ну что вы. Это, как у вас говорят, Ассимиляция*. 

          *) слияние одного народа с другим с утратой одним 
             из них своего языка, культуры, национального 
             самосознания. [БЭС]

# Законы Тейлора. Часть первая. Эхо, кот и тp
---------------------------------------------

Анализ файлов журнала и дампа требует, чтобы вы могли использовать инструменты, созданные для этой цели. В среде Windows мы в основном работали с PowerShell, В Linux это так называемое модифицированное правило Тейлора. Напомню, что оригинал звучит так:

  Never write it in 'C' if you can do it in 'awk';
  Never do it in 'awk' if 'sed' can handle it;
  Never use 'sed' when 'tr' can do the job;
  Never invoke 'tr' when 'cat' is sufficient;
  Avoid using 'cat' whenever possible.
           
           --Taylor's Laws of Programming

Еще ниже лежит школьная информатика. 


# Начнем с cat
-------------- 

Упражнение 1
```
  $ cat << EOF > hello
  Hello, 
  World!
  EOF
  $ cat hello
  Hello,
  World!
  $ cat -n hello
      1  Hello,
      2  World!
```
Это всё, что для начала, нужно знать о cat. Что это дает?

  -- можем создавать простые текстовые файлы без редактора.
  -- можем просматривать текстовые файлы без нумерации строк.
  -- можем просматривать текстовые файлы c нумерациeй строк.
  

# Потоки и перенаправления 
--------------------------

  stdin , stdout , stderr , tee , << , < , > , >> , 2>&1
  
Не вижу причины, зачем мне переписывать из найденного в Гугле, Яндексе или у пиратов.
  
# Упражнение 2.
```
$ sudo apk add bash
$ echo $0
-ash
$ bash
$ echo $0
bash

$ cat sss.c
#include <stdio.h>

int main() {
  fprintf( stderr, "Hello, World!\n");
  return 0;
}

$ ./sss 2>&1 | cat > output; cat output
Hello, World!
```

# Упражнение 3.
```
$ cat sss.c
#include <stdio.h>

int main() {
  fprintf( stdout, "Hello, \n");
  fprintf( stderr, "World!\n");
  return 0;
}

$ ./sss
Hello,
World!

$ ./sss 2> /dev/null
Hello,
$ ./sss 1> /dev/null
World!
$ $ ./sss 2>&1
Hello,
World!
```

# Именем tr !
-------------

  $ sudo apk add zlib-dev ncurses-dev
  
Архив heirloom'a добудем здесь:

  https://sourceforge.net/projects/heirloom/files/heirloom/070715/heirloom-070715.tar.bz2/download

Построимся и спасемся.. как писал Маслов*

  $ tar xf heirloom-070715.tar.bz2
  $ cd ~/heirloom-070715
  $ make


  $ echo 'в чащах юга жил был цитрус да но фальшивый экземпляр' | \
  tr абвгдежзийклмнопрстуфхцчшщъыьэюя abvgdeZzijklmnoprstufhcCwW\'yqEYA
  Ae ▒▒Ab▒▒Ab▒▒ ▒▒AzAb AnAsAC Ag▒▒AC ▒▒As▒вc▒▒▒o AjAb AqAY ▒▒AbAC▒▒▒▒AsAe▒▒Au ▒▒AhApAlAWA
AC▒▒▒c

Хьюстон, у нас тут проблема (Houston, we have problem here..)

  $ cd ~
  $ sudo apk add --no-cache cmake make musl-dev gcc gettext-dev libintl
  $ wget https://gitlab.com/rilian-la-te/musl-locales/-/archive/master/musl-locales-master.zip
  $ unzip musl-locales-master.zip
  $ cd musl-locales-master
  $ cmake -DLOCALE_PROFILE=OFF -D CMAKE_INSTALL_PREFIX:PATH=/usr . 
  $ make && sudo make install
  $ locale -a
  C
  C.UTF-8
  $ cat /etc/profile
  export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  export PAGER=less
  export PS1='\h:\w\$ '
  export MUSL_LOCPATH=/usr/share/i18n/locales/musl
  umask 022

  for script in /etc/profile.d/*.sh ; do
          if [ -r $script ] ; then
                  . $script
          fi
  done
  
  $ cat /etc/profile.d/locale
  CHARSET=UTF-8
  LANG=en_US.UTF-8
  LANGUAGE=en_US.UTF-8
  LC_ALL=en_US.UTF-8
  
Set time zone

  $ sudo apk add tzdata
  $ sudo cp /usr/share/zoneinfo/Europe/Tallinn /etc/localtime
  $ sudo bash -c 'echo "Europe/Tallinn" >  /etc/timezone'
  $ date
  Wed Apr 29 01:00:03 EEST 2020
  
Снова:

  $ echo 'в чащах юга жил был цитрус да но фальшивый экземпляр' | \
    tr абвгдежзийклмнопрстуфхцчшщъыьэюя abvgdeZzijklmnoprstufhcCwW\'yqEYA
  Ye AAYbAAYbAA AAYzYb YnYsYC YgAAYC AAYsAAAAAAAA YjYb YyYE AAYbYCAAAAYsYeAAYu AAYhYpYlYWYAYCAAAA

Хьюстон, у нас все равно проблема (Houston, we still have problem..)

  $ cd alpine-pkg-glibc/
  $ mkdir releases
  $ cd releases
  $ wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.31-r0/glibc-2.31-r0.apk
  $ wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.31-r0/glibc-bin-2.31-r0.apk
  $ wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.31-r0/glibc-dev-2.31-r0.apk
  $ wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.31-r0/glibc-i18n-2.31-r0.apk
  $ sudo apk add --allow-untrusted /home/opilane/alpine-pkg-glibc/releases/glibc-2.31-r0.apk
  $ sudo apk add --allow-untrusted /home/opilane/alpine-pkg-glibc/releases/glibc-bin-2.31-r0.apk
  /usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link
  OK: 1224 MiB in 267 packages
  $ sudo apk add --allow-untrusted /home/opilane/alpine-pkg-glibc/releases/glibc-dev-2.31-r0.apk
  /usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link
  OK: 1292 MiB in 268 packages
  $ sudo apk add --allow-untrusted /home/opilane/alpine-pkg-glibc/glibc-i18n-2.31-r0.apk
  $ ls -l /usr/glibc-compat/lib/ld-linux-x86-64.so.2
  -rwxr-xr-x 1 root root 173800 Mar  9 23:04 
  $ cd /usr/glibc-compat/lib/
  $ sudo mv ld-linux-x86-64.so.2 ld-linux-x86-64.so
  $ cd /home/opilane/alpine-pkg-glibc
  $ # just curious to see whatif ?
  $ bash glibc-bin.trigger
  /usr/glibc-compat/sbin/ldconfig: Can't link /usr/glibc-compat/lib/ld-linux-x86-64.so.2 to ld-2.31.so
  /usr/glibc-compat/sbin/ldconfig: Can't create temporary cache file /usr/glibc-compat/etc/ld.so.cache~: Permission denied
  $ sudo bash glibc-bin.trigger

  $ sudo apk add bison flex zfs-dev
  $ sudo cp /usr/include/dirent.h /usr/include/sys/
  $ sudo cp /usr/include/libspl/sys/mkdev.h /usr/include/sys/
  $ make
  
грохнется, но все что нам надо он уже построил..

  $ cd tr
  $ make
  $ sudo cp tr /usr/local/bin/tr-utf8
  $ cd ~
  
Попробуем 

  $ echo 'в чащах юга жил был цитрус да но фальшивый экземпляр' | \
    tr-utf8 абвгдежзийклмнопрстуфхцчшщъыьэюя abvgdeZzijklmnoprstufhcCwW\'yqEYA
  v CaWah Yga Zil byl citrus da no falqwivyj EkzemplAr
  
Работает!

---------

Вот сказывают, что и в FreeBSD tr дружит с юникодом. Но об этом в другой раз..

  $ sudo apk add --no-cache  zlib-dev ncurses-de
  $ sudo apk add subversion
  $ mkdir FBSD
  $ cd FBSD
  $ svn checkout https://svn.freebsd.org/base/releng/12.1 .

# Ссылки и литература
---------------------

 *1) http://lib.ru/PERL/russperl5/perl.txt

  2. https://grrr.tech/posts/2020/add-locales-to-alpine-linux-docker-image/

  3. https://iweb.dl.sourceforge.net/project/heirloom/heirloom/070715/heirloom-070715.tar.bz2

  4. https://wiki.alpinelinux.org/wiki/How_to_get_regular_stuff_working
 
  5. https://grrr.tech/posts/2020/add-locales-to-alpine-linux-docker-image/

  6. https://wiki.alpinelinux.org/wiki/Setting_the_timezone


