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

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

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

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
      Шпаргалка по частым синтаксическим оборотам.

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

 

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

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



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

Цитата:
for iface in `ifconfig | cut -c 1-8 | sort | uniq -u | grep -v lo | grep -v : `; do echo $iface; done  

Если стоит задача вывести список сетевых интерфейсов то я бы сделал это так
 
netstat -i | sed 1,2d | grep -v lo | awk  '{print $1}'
 
Условие 'grep -v :' неточное, поскольку символ ':' может включаться в имя интерфейса, например, если это алиас.

Всего записей: 4946 | Зарегистр. 05-01-2006 | Отправлено: 16:34 22-08-2022 | Исправлено: mithridat1, 16:42 22-08-2022
Osennij_Lis



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

Цитата:
если сетевой интерфейс имеет 8 символов "enp2s0s5" то все отлично работает, а если 6 символов "enp2s0" то не работает, как модифицировать код чтобы что бы работало и на 6 и на 8 символов?

 
А какая задача-то решается? Если вывести имена всех сетевых интерфейсов, кроме lo, то может использовать что-то менее монструозное? Ну например:

Код:
ifconfig | grep HW | awk '{print $1}'

 
Ну и таки да, может быть уже закопать стюардессу в виде net-tools, и использовать iproute2?
 

Всего записей: 96 | Зарегистр. 15-12-2008 | Отправлено: 17:12 22-08-2022
mithridat1



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

Цитата:
ifconfig | grep HW | awk '{print $1}'  

Это только в Debian работает

Цитата:
 Ну и таки да, может быть уже закопать стюардессу в виде net-tools, и использовать iproute2?  

Много чего можно поставить, но как правило bash-скрипты рассчитаны на утилиты, которые уже по умолчанию присутствуют в системе.

Всего записей: 4946 | Зарегистр. 05-01-2006 | Отправлено: 17:47 22-08-2022
Osennij_Lis



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

Цитата:
Это только в Debian работает

 
Интересное утверждение, что же здесь дебиано-специфичного?  
ЗЫ. Я проверял его на трёх линуксах и ни один из них НЕ дебиан.  
 

Цитата:
Много чего можно поставить, но как правило bash-скрипты рассчитаны на утилиты, которые уже по умолчанию присутствуют в системе.

 
А ничего, что iproute2  сейчас как бы стандарт. Его можно везде встретить, а вот ifconfig aka net-tools уже не везде.

Всего записей: 96 | Зарегистр. 15-12-2008 | Отправлено: 18:17 22-08-2022
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Osennij_Lis
В CentOS/RHEL вывод ifconfig другой.

Цитата:
 А ничего, что iproute2  сейчас как бы стандарт. Его можно везде встретить, а вот ifconfig aka net-tools уже не везде.  

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

Всего записей: 4946 | Зарегистр. 05-01-2006 | Отправлено: 19:18 22-08-2022
Osennij_Lis



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

Цитата:
В CentOS/RHEL вывод ifconfig другой.  

 
В Centos версии так с 7 на запрос ifconfig в ответ можно получить что-то в духе:

Код:
 ifconfig: command not found  

как раз потому что RHEL одними из первых перешли на iproute2.
Net-tools там ставится отдельно, при желании.
 
Но на самом деле ты прав. Не нужно грепать по HW (это у меня видимо помутнение было). Универсальней для линуксов с net-tools будет примерно так:

Код:
 ifconfig -s | grep -v 'Iface' | awk '{print $1}'

 
Эмбеддеды отдельная песня. Там может статься так, что ничего кроме штатного комплекта утилит busybox на руках и не будет. И придётся забыть и про iproute и про net-tools.
В такой ситуации да, проще будет как в твоём примере к netstat обратиться или взять из /sys/class/net.

Всего записей: 96 | Зарегистр. 15-12-2008 | Отправлено: 21:10 22-08-2022
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tirex2k
find /sys/class/net/ -mindepth 1 -maxdepth 1 -type l ! -name 'lo*' -printf '%f\n'
или если парсить вывод утилит, то я согласен с теми кто ратовал за утилиту ip. Ибо ifconfig давно deprecated.
ip -o link show | awk -F' |:' '{print $3}'

----------
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.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 15:02 24-08-2022
tirex2k



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо всем, это заработало, пока коректно, задача была настроить интерфейс, red os 7.3

Код:
for iface in `netstat -i | sed 1,2d | grep -v lo | awk  '{print $1}'`; do echo $iface; done
cp -f ./conf/ifcfg-enp2s0 /etc/sysconfig/network-scripts/ifcfg-$iface
sed -i "s/NAME=enp2s0/NAME=$iface/" /etc/sysconfig/network-scripts/ifcfg-$iface
sed -i "s/DEVICE=enp2s0/DEVICE=$iface/" /etc/sysconfig/network-scripts/ifcfg-$iface
ifup $iface
 

Всего записей: 70 | Зарегистр. 09-12-2004 | Отправлено: 16:01 24-08-2022 | Исправлено: tirex2k, 16:03 24-08-2022
urodliv



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

Цитата:
Как в консоли найти (и удалить) файлы, которые загружены в течении 8 последних дней?

/usr/bin/find /путь_поиска -type f -mtime +8 -exec rm -f {} \;

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 6691 | Зарегистр. 29-04-2009 | Отправлено: 02:27 07-09-2022
Alinalessio

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

Цитата:
/usr/bin/find /путь_поиска -type f -mtime +8 -exec rm -f {} \;

 
Спасибо за ответ. Скажите пожалуйста, можно ли как-то сделать так:
1. Есть папки с большой вложенностью и файлами внутри всех папок
2. Нужно получить копию всех этих папок, но без файлов. Чтобы была структура вложенности папок, но без файлов.
Это возможно средствами командной строки?

Всего записей: 223 | Зарегистр. 21-06-2010 | Отправлено: 07:16 07-09-2022
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alinalessio
http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html

Всего записей: 12398 | Зарегистр. 11-03-2002 | Отправлено: 07:42 07-09-2022
Alinalessio

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

Цитата:
/usr/bin/find /путь_поиска -type f -mtime +8 -exec rm -f {} \;

 
Хочу запустить пока без удаления. Удаляю в этой конструкции  rm но что-то не получается.
Делаю так:

Код:
find /catalog/ -type f -mtime +8 -exec -f {} \;

но в этом случае выдаёт ошибку:

Код:
find: '-f': No such file or directory

Скажите пожалуйста, как правильно составить команду, чтобы для начала посмотреть какие файлы будут найдены, чтобы потом удалить?

Всего записей: 223 | Зарегистр. 21-06-2010 | Отправлено: 07:56 07-09-2022
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alinalessio
Весь -exec удаляй, по умолчанию же -print

Всего записей: 12398 | Зарегистр. 11-03-2002 | Отправлено: 08:09 07-09-2022
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alinalessio, вы бы ОС указывали бы и более точные условия задачи. Ибо некоторые ОС оперируют не только amc/time но и временем создания файла. Т.е.
если после создания файла вы его не редактировали и т.п. это одно условие, а в ином случае это другое условие и т.д.
 
проверить что будет удаляться
find 'путь' 'условия/параметры' -exec echo rm {} +
если все правильно нужно убрать echo
 
P.S.
у find есть возможность удаления и без использования rm - ключ -delete
пример:
find . -type f -delete
Будьте внимательны файлы будут удалены без подтверждения.

Всего записей: 7334 | Зарегистр. 08-09-2001 | Отправлено: 13:05 07-09-2022 | Исправлено: los, 13:07 07-09-2022
Alinalessio

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

Всего записей: 223 | Зарегистр. 21-06-2010 | Отправлено: 17:28 13-09-2022
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alinalessio
Да, такое возможно.
find нужных файлов по расширению в указанных каталогах, для каждого файла получить размер, например командой file и дальше выполнить расчёт до нужных размеров исходя из полученных и выполнить convert -resize
 
convert — утилита из пакета imagemagick
identify — тоже из imagemagick, это можно вместо file
 
Написание полного скрипта оставлю Вам на домашнее задание, со своим вариантом приходите потом за комментариями и разбором ошибок.

----------
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.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 22:54 13-09-2022
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd, там по условию, насколько я понимаю, может возникнуть проблема с кол-вом обрабатываемых файлов. Т.е. к уже обработанным файлам будут добавляться новые, но проверка размера будет выполняться для всех и если использовать find с параметром amcB(time) чтобы отсечь обработанные файлы после первого запуска скрипта, то постепенно кол-во добавляемых файлов будет увеличиваться и время от времени критерий amcB(time) нужно будет изменять.
 

Всего записей: 7334 | Зарегистр. 08-09-2001 | Отправлено: 10:07 14-09-2022
Alinalessio

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

Код:
find -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -exec mogrify -resize '1500x>' '{}' \;

 
Вроде так находим изображения, которые больше 1500px
Только мне не ясно, поиск идёт по любой стороне изображения? Т.е. если изображение 800*1600 или 1600*800 они одинаково будут найдены? Или только одно из них?
И ещё не понятно, как найденные изображения редактировать? В этой же строке надо convert -resize прописывать? Или изменение размера отдельной командой?

Всего записей: 223 | Зарегистр. 21-06-2010 | Отправлено: 10:23 14-09-2022
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alinalessio, ужасная конструкция. Расширение может быть и JPG, PNG etc. - нужно использовать либо ключ 'iname' либо [Jj][Pp][Gg], плюс выполняете поиск папок и т.д. вместо поиска регулярных файлов, только пример:
find . -type f \( -iname '*.jpg' -o -iname '*.png' \)
find . -type f \( -name '*.[Jj][Pp][Gg]' -o -name '*.[Pp][Nn][Gg]' \)
 
Вы должны найти файлы c помощью команды find, затем с помощью команды file или другим способом определить размер файла.
пример:
file foo.jpg
foo.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, progressive, precision 8, 1080x1460, components 3
можно использовать cut, awk и т.п. для получения необходимого вам параметра 1080 или 1460.
 
и только затем использовать программу для обработки изображения.

Всего записей: 7334 | Зарегистр. 08-09-2001 | Отправлено: 11:54 14-09-2022
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alinalessio
 
 
Добавлю к т.los
 
 
Вкратце: Вы стремитесь вот к чему-то такому:
Код:
some_new_size='1500x1200'
 
while read -r file; do
  [[ -r $file ]] || { echo "No perm to read file" >&2; exit 1; }  
 
  width=$(identify -format '%w' "$file")
  [[ $width =~ ^[0-9]+$ ]] || { echo "Failed to get width of image: '$file'" >&2; exit 1; }
   
  if [[ $width -gt 1500 ]]; then
    convert "$file" -resize "$some_new_size" "/new/path/$(basename "$file")" &&
      rm "$file" # внимание тут есть удаление оригинала, после успешного ресайза, не грохните всю свою коллекцию
  else
    mv "$file" "/new/path/$(basename "$file")"
  fi
done < <(find /your/path/ -type f \( -iname '*.jpg' -o -iname '*.png' \))
Не проверял и не сильно вдумывался, так чисто что накидалось в качестве основы/примера.
 
Проблема с повторным сканированием я решал бы через перемещение результата в новый путь.

----------
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.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 15:46 14-09-2022 | Исправлено: Alukardd, 16:10 14-09-2022
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум 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