• avatar
  • aonick
  • 25 августа 2009, 23:59
  • #
  • +1
Моё объяснение того как удобно пользоваться Vim'ом:
много букоф, но текст подходит для новичка, чтобы научится пользоваться vi по серьёзному.
  • avatar
  • aonick
  • 22 августа 2009, 00:43
  • #
  • +1
Уже года три(если не больше) пользуюсь подобными программами — начинал с Quake. А в последних полгода перестал(просто заметил, что ни разу не вызвал его за месяц и убрал из автозапуска в gnome) — просто по этим же клавишам запускаю обычный gnome-terminal, а с compiz'ом он так же(если не лучше) красиво выезжает.
  • avatar
  • aonick
  • 19 июля 2009, 03:01
  • #
  • 0
очепятка — у мен и сидюка нет — написал и не проверил
  • avatar
  • aonick
  • 18 июля 2009, 18:40
  • #
  • 0
":" добавь
# echo $name

# echo ${name:=anonymous}
anonymous
# echo $name
anonymous

  • avatar
  • aonick
  • 18 июля 2009, 00:23
  • #
  • +4
Добавка:
1)Сигналы:
HUP – hangup(требуется переподключение, многие службы получив этот сигнал перечитывают свой конфиг);
INT – interrupt, прерывание с клавиатуры(что делать при нажатие Ctrl-C);
KILL – убить(безусловно — нет шанса отказатся умерать) процесс;
TERM – termination, завершить процесс — просьба процессу умереть;
STOP — застопить процесс (безусловно — нет шанса отказатся)
CONT — продолжить выполнение застопленного процеса

2) А еще есть: killall и xkill

3) У команды tee есть опция -a — означает append — то есть если указанный файл-логов существует то его не перезаписать. а дописывать в него

4) А про script — её часто просят запустить техподдержка в случае какой-нить проблемы и затем выполнить стандартный набор команд по списку, которые собирают информацию по системе — и затем прислать им собранный script'ом файл.
  • avatar
  • aonick
  • 17 июля 2009, 09:40
  • #
  • 0
Не заглядывал ранее на OBS.
Спасибо
  • avatar
  • aonick
  • 15 июля 2009, 23:46
  • #
  • +3
Немного моего соуса в блюдо Istergul'а:

Пример1
Часто вижу линуксойдов, которые постоянно (когда хотят обратится к какому-то файлу) переходят в директорию(cd /home), затем смотрят её содержимое (ls), затем переходят дальше (cd /home/aonick), опять (ls) и тд… до достижения файла — для них:
lcd(){
  echo "Директория: $1"
  cd $1 && ls
}
После этого переходить в нужную директорию можно так:
lcd /home
это команда и в директорию перейдет и сразу содержимое покажет.

Пример 2
Так как функция выполняется в той же сессии (в отличии от скрипта) — удобно например для команд настраивать автозаполнение по Тab-клавиши, напимер для команды rpm чтобы дописывал из списка установленных пакетов:
_rpm-refresh(){ complete -W "$(rpm -qa) -ivh -ql -qi" rpm; }

После этого — каждый раз когда запускаю функцию:
_rpm-refresh
обновляется список аргументов которые предлагаются по нажатию Tab.
И пользуясь командой rpm уже так, например:
rpm -ql apach<i><Нажимаю  дважды Tab></i>
и вижу список установленных пакетов начинающихся с «apach»

Дополнение:
Функция задается только в текущей сессии и после закрытия терминал про неё система забудет. Чтобы навеки-вечные задать своему пользователю функцию — её прописывают в файл ".bashrc" в домашней директории пользователя.

  • avatar
  • aonick
  • 15 июля 2009, 00:17
  • #
  • +3
Немного моего соуса в блюдо Istergul'а:

Пример 1
Часто мои скрипты начинаются с такой строчки:
Dir=${1-.}
То есть скрипт запускается и в качестве параметра ему указывается директория, которую надо обработать. Если директория не указана, то обрабатывается текущая директория.

Пример 2
Для начала задам переменную
Pic=/usr/share/wallpapers/Wolf.jpg
Вывод без первых трех символов(любых)
echo ${Pic#???}
r/share/wallpapers/Wolf.jpg


Пример 3
Для той же переменной
Pic=/usr/share/wallpapers/Wolf.jpg
Вывод с пятого по 9ый символы (то есть пропустить от начала 4ре символа и напечатать следующие 5)
echo ${Pic:4:5}
/shar


Пример 4
Переименование всех jpg-файлов в текущей папке под общий шаблон: Image_число.jpg
N=10000; for i in *.jpg;do let N=N+1; mv -i "$i" Image_${N:1}.jpg;done
Работает для не более 9999 файлов в текущей директории

Пример 5
Pic=/usr/share/wallpapers/Wolf.jpg
Перейти в папку содержащую эту картинку
cd ${Pic%/*}
это соответствует
cd /usr/share/wallpapers


Пример 6
Если файл картинка(jpg), то просмотеть ей (например, при помощи програмки eog)
[ "${Pic##*.}" = jpg ] && eog $Pic
  • avatar
  • aonick
  • 13 июля 2009, 20:22
  • #
  • +1
да лучше, но я хотел продемонстрировать связку «while read» на несложном для понимания примере — в bash_history ничего коротенького не нашел, поэтому придумывал на ходу.
  • avatar
  • aonick
  • 12 июля 2009, 17:08
  • #
  • +5
Немного моего соуса в блюдо Istergul'а:
Пример for — 1ый(простой):
#Создает html-галерейку из jpg-картинок в текущей папке
for i in *.jpg; do
        echo "<IMG src=$i><HR>"
done > gallery.html


Пример for — 2ой(тоже простой, но из моего bash_history):
#Выкачевает рейтинг на сегодня с одного сайта
for i in {1..22};do  
        wget -nv https://open-life.org/people/good/page$i -O -|zcat
done > reiting_$(date +%y%m%d).html


Пример while — 1ый(бесконечный цикл):
#Сидюк-хронометр
while : ; do 
        eject; sleep 2; eject -2
done 


Пример while — 2ой(использование в построчной обработке файла)
#Подсчитать сумарный размер jpg-файлов в текущей папке
ls -l *.jpg| (  
        while read Perm nL Uid Gid Size others;do
                let SumSize=SumSize+$Size;
        done;
        echo $SumSize 
)
  • avatar
  • aonick
  • 11 июля 2009, 00:24
  • #
  • +1
два раза ;; забыл в конце строк: про html и про dev

я так понял свой коммент здесь отредактировать позже нельзя
  • avatar
  • aonick
  • 11 июля 2009, 00:22
  • #
  • 0
На тон он и называется «код» то есть по этой цифре можно в документации посмотреть и понять какой ошибочной ситуации это соответствует.
  • avatar
  • aonick
  • 11 июля 2009, 00:17
  • #
  • +2
Мой пример case:
echo -n "[Универсальный просмоторщик] Укажите имя файла: "; read File
case "$File" in
  *.jpg|*.gif|*.png)
       eog $File
  ;;
  *.pdf)       evince $File   ;;
  *.txt)       less $File   ;;
  *.html)      firefox $File
  /dev/*)      echo "Ну это страшные файлы."
  *)
      echo "Ну ладно, ладно - не такой уж и универсальный."
      echo "Этот тип файлов мне не знаком. Не знаю, чем его просмотреть."
  ;;
esac

  • avatar
  • aonick
  • 11 июля 2009, 00:00
  • #
  • +2
Немного моего соуса в блюдо Istergul'а:
>> Кодом успешного завершения является 0, а ошибочного 1
О — код успешного завершения команды, а не ноль — код ошибки.
Наглядный пример:
# ls
reiting.html  script.sh
# echo $?
0
# ls /root/
ls: невозможно открыть каталог /root/: Отказано в доступе
# echo $?
2
# lsbebebetutut
bash: lsbebebetutut: команда не найдена
# echo $?
127

Видно разные значения кода ошибки($?).

  • avatar
  • aonick
  • 10 июля 2009, 21:05
  • #
  • 0
Цитата из «man bash» — раздел «Arrays(массивы)»:
Any  element  of  an  array may be referenced using ${name[subscript]}.  The braces are REQUIRED to avoid conflicts with pathname expansion. 

Литературный перевод:
фигурные скобки НЕОБХОДИМЫ обязательно.
  • avatar
  • aonick
  • 09 июля 2009, 23:32
  • #
  • +1
Проще так — одной строкой, без if'ов:
echo ${name=anonymous}

если переменная «name» заданна — выведется её значение, если нет то присвоится(и выведется) значение «anonymous».
  • avatar
  • aonick
  • 09 июля 2009, 23:15
  • #
  • 0
Простой пример командной постановки:
1)
tar -czf /backup/$(date +%A).tgz /etc

Создает архив директории /etc с названием(сегодня) /backup/Четверг.tgz, а если выполню завтра то будет /backup/Пятница.tgz

2)
PS1="\$(tail -1 /var/log/messages)\n$PS1"

В приглашении командной строки добавился вывод последней строки из системного log-файла

  • avatar
  • aonick
  • 09 июля 2009, 19:15
  • #
  • +2
Пожалуйста.
Буду признателен. если и дальше будет, что комментировать :)
  • avatar
  • aonick
  • 09 июля 2009, 19:13
  • #
  • 0
mass= ([0]=element0 [5]=element5)

пробел лишний, надо так:
mass=([0]=element0 [5]=element5)