diff --git a/sysadmin/Linux/Base-znaniy/Bat.md b/sysadmin/Linux/Base-znaniy/Bat.md new file mode 100644 index 0000000..e2fed72 --- /dev/null +++ b/sysadmin/Linux/Base-znaniy/Bat.md @@ -0,0 +1,210 @@ +--- +title: Bat как замена для cat +description: +published: true +date: 2023-11-15T18:07:37.064Z +tags: +editor: markdown +dateCreated: 2023-11-15T18:07:37.064Z +--- + +![1.png](/attachments/base/1.png) + +Знакомлю вас с утилитой командной строки, которая мне очень понравилась. Речь пойдёт про bat, аналоге cat, только с подсветкой синтаксиса и не только. + +Лично я утилиту cat использую постоянно. Сформировалась привычка при поиске чего-то делать сначала cat, потом grep. Например: + +`cat /var/log/messages | grep kernel` + +По идее, логичнее и проще сделать так: + +`egrep "kernel" /var/log/messages` + +Но я привык к первому варианту и cat использую постоянно. И при грепанье, и просто при просмотре чего-то в консоли. Перед тем, как что-то скопировать из файла, вывожу через cat в консоль. + +Bat очень классно подсвечивает вывод в консоли. Нет смысла рассказывать, на картинке к посту все и так видно: + +`bat /etc/hosts` + + +Репозиторий утилиты - https://github.com/sharkdp/bat. В Debian/Ubuntu bat ставится из стандартных реп: +``` +apt install bat +ln -s /usr/bin/batcat /usr/bin/bat +``` +Если нет в репах, то качаем с репозитория и устанавливаем. + +``` +wget https://github.com/sharkdp/bat/releases/download/v0.18.2/bat-musl_0.18.2_amd64.deb +dpkg -i bat-musl_0.18.2_amd64.deb +``` +В Centos 8 (на 7 не заработает из-за устаревших пакетов) и форках придется бинарник качать: +``` +wget https://github.com/sharkdp/bat/releases/download/v0.18.2/bat-v0.18.2-x86_64-unknown-linux-gnu.tar.gz +tar xzvf bat-v0.18.2-x86_64-unknown-linux-gnu.tar.gz +cd bat-v0.18.2-x86_64-unknown-linux-gnu +cp bat /usr/bin/ +``` + +________________________ +Добавлю от себя, на centos вылетела ошибка +``` +/lib64/libc.so.6: version `GLIBC_2.18' not found (required by ./bat) +``` + +Поэтому пришлось найти решение вот такое. +```bash +#!/bin/sh + +red=`tput setaf 1` +green=`tput setaf 2` +bold=`tput bold` +reset=`tput sgr0` + +echo "" +echo "${bold}${green}Installing the latest CentOS release version of bat command from GitHub...${reset}" + +echo "" +echo "${bold}Note${reset}: For more information, please see https://github.com/sharkdp/bat." + +echo "" +echo "Finding the latest version tag from Github..." + +BAT_VERSION=$(curl --silent "https://api.github.com/repos/sharkdp/bat/releases/latest" | grep -Eo '"tag_name": "v(.*)"' | sed -E 's/.*"([^"]+)".*/\1/') +BAT_RELEASE="bat-$BAT_VERSION-x86_64-unknown-linux-musl" +BAT_ARCHIVE="$BAT_RELEASE.tar.gz" + +echo "" +echo "Version ${bold}$BAT_VERSION${reset} found, downloading ${bold}$BAT_ARCHIVE${reset} from GitHub..." + +curl -sOL "https://github.com/sharkdp/bat/releases/download/$BAT_VERSION/$BAT_ARCHIVE" + +echo "" +echo "Unarchiving ${bold}$BAT_ARCHIVE${reset} to ${bold}$HOME/$BAT_RELEASE${reset}..." + +tar xzvf $BAT_ARCHIVE -C $HOME/ + +echo "" +echo "Copying executable to ${bold}/usr/local/bin/bat${reset}..." + +sudo sh -c "cp $HOME/$BAT_RELEASE/bat /usr/local/bin/bat" + +echo "" +echo "Removing ${bold}$BAT_ARCHIVE${reset} and cleaning up..." + +rm $BAT_ARCHIVE + +unset BAT_ARCHIVE +unset BAT_RELEASE +unset BAT_VERSION + +if command -v bat &> /dev/null +then + echo "" + echo "${bold}${green}Finished installing $(bat --version).${reset}" +else + echo "" + echo "${bold}${red}Installation failed! Please examine this script and try steps manually.${reset}" + exit 1 +fi +``` + + +Знакомлю вас с утилитой командной строки, которая мне очень понравилась. Речь пойдёт про bat, аналоге cat, только с подсветкой синтаксиса и не только. + +Лично я утилиту cat использую постоянно. Сформировалась привычка при поиске чего-то делать сначала cat, потом grep. Например: + +`cat /var/log/messages | grep kernel` + +По идее, логичнее и проще сделать так: + +`egrep "kernel" /var/log/messages` + +Но я привык к первому варианту и cat использую постоянно. И при грепанье, и просто при просмотре чего-то в консоли. Перед тем, как что-то скопировать из файла, вывожу через cat в консоль. + +Bat очень классно подсвечивает вывод в консоли. Нет смысла рассказывать, на картинке к посту все и так видно: + +`bat /etc/hosts` + +Репозиторий утилиты - https://github.com/sharkdp/bat. В Debian/Ubuntu bat ставится из стандартных реп: +``` +apt install bat +ln -s /usr/bin/batcat /usr/bin/bat +``` +Если нет в репах, то качаем с репозитория и устанавливаем. + +``` +wget https://github.com/sharkdp/bat/releases/download/v0.18.2/bat-musl_0.18.2_amd64.deb +dpkg -i bat-musl_0.18.2_amd64.deb +``` + +В Centos 8 (на 7 не заработает из-за устаревших пакетов) и форках придется бинарник качать: +``` +wget https://github.com/sharkdp/bat/releases/download/v0.18.2/bat-v0.18.2-x86_64-unknown-linux-gnu.tar.gz +tar xzvf bat-v0.18.2-x86_64-unknown-linux-gnu.tar.gz +cd bat-v0.18.2-x86_64-unknown-linux-gnu +cp bat /usr/bin/ +``` + +________________________ +Добавлю от себя, на centos вылетела ошибка +``` +/lib64/libc.so.6: version `GLIBC_2.18' not found (required by ./bat) +``` + +Поэтому пришлось найти решение вот такое. +```bash +#!/bin/sh + +red=`tput setaf 1` +green=`tput setaf 2` +bold=`tput bold` +reset=`tput sgr0` + +echo "" +echo "${bold}${green}Installing the latest CentOS release version of bat command from GitHub...${reset}" + +echo "" +echo "${bold}Note${reset}: For more information, please see https://github.com/sharkdp/bat." + +echo "" +echo "Finding the latest version tag from Github..." + +BAT_VERSION=$(curl --silent "https://api.github.com/repos/sharkdp/bat/releases/latest" | grep -Eo '"tag_name": "v(.*)"' | sed -E 's/.*"([^"]+)".*/\1/') +BAT_RELEASE="bat-$BAT_VERSION-x86_64-unknown-linux-musl" +BAT_ARCHIVE="$BAT_RELEASE.tar.gz" + +echo "" +echo "Version ${bold}$BAT_VERSION${reset} found, downloading ${bold}$BAT_ARCHIVE${reset} from GitHub..." + +curl -sOL "https://github.com/sharkdp/bat/releases/download/$BAT_VERSION/$BAT_ARCHIVE" + +echo "" +echo "Unarchiving ${bold}$BAT_ARCHIVE${reset} to ${bold}$HOME/$BAT_RELEASE${reset}..." + +tar xzvf $BAT_ARCHIVE -C $HOME/ + +echo "" +echo "Copying executable to ${bold}/usr/local/bin/bat${reset}..." + +sudo sh -c "cp $HOME/$BAT_RELEASE/bat /usr/local/bin/bat" + +echo "" +echo "Removing ${bold}$BAT_ARCHIVE${reset} and cleaning up..." + +rm $BAT_ARCHIVE + +unset BAT_ARCHIVE +unset BAT_RELEASE +unset BAT_VERSION + +if command -v bat &> /dev/null +then + echo "" + echo "${bold}${green}Finished installing $(bat --version).${reset}" +else + echo "" + echo "${bold}${red}Installation failed! Please examine this script and try steps manually.${reset}" + exit 1 +fi +``` \ No newline at end of file