1

Тема: Маленькие хитрости в Linux

Делимся  небольшими хитростями.

Начну первым.
Допустим иногда бывает ситуация, когда имеется бинарник (например игра), но для его работы нужны устаревшие бибилиотеки, которых уже нет в системе, логично что установка устаревших библиотек несет конфликт с уже установленными библиотеками.
Тогда можно просто по скачивать устаревшие либы и скопировать в какой нибудь каталог, предназначенный для этих библиотек, пусть это будет /путь/lib
Теперь можно запустить бинарник, предварительно выполнив команду:

$ export LD_LIBRARY_PATH={$LD_LIBRARY_PATH}:/путь/lib

Либо вписать эту команду в скрипт запуска программы.

2

Re: Маленькие хитрости в Linux

midnight commander
ctrl+o открывает консоль.

один админ 5 лет на линухе работает а такой фигни не знал...

3 (23.05.2012 21:19:54 отредактировано Fat-Zer)

Re: Маленькие хитрости в Linux

По горячим следам: Общие вопросы

иногда при линковке возникает undefined reference  to `some_function'.
чтобы найти в какой библиотеке эта функция есть (если конечно эта библиотека установлена) нужно сделать:

SYM="some_function"; 
DIRS="/usr/lib64/";
find $DIRS -type f -executable | while read I; do 
  OBJ_DUMP="$(objdump -tT $I 2>/dev/null | grep "$SYM")"; 
  if [ -n "${OBJ_DUMP}" ]; then 
    echo "$I"; echo "$OBJ_DUMP"; 
  fi; 
done

[разбито на строки для удобства чтения]

ну а дальше включать /dev/brain.

ЗЫ: достаточно objdump -T. я просто забываю, какая из них что делает.

4

Re: Маленькие хитрости в Linux

mvt пишет

допустим, нет такого пакета который Вам очень нужен, и Вы не имеете способностей (или времени, или ещё чего-нибудь), чтобы его сделать

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

5

Re: Маленькие хитрости в Linux

Чтобы создать некоторое число файлов с именами вида {a..c}{1..3}.{txt,lst,conf} не нужен даже цикл! Достаточно

touch {a..c}{1..3}.{txt,lst,conf}

Сделал для себя вот такое открытие. Путеводитель по вash-скриптингу - оочень полезная книжка ab

6 (25.05.2012 12:40:27 отредактировано ormorph)

Re: Маленькие хитрости в Linux

Для добавления ttf шрифтов в LaTex, можно использовать следующий скрипт:

+ открыть спойлер

#!/bin/bash
#использует два параметра, где первый название файла шрифта, а второй название, с которым будет работать, latex

mkdir fon
cp "$1" fon/
cd fon

otftotfm \
--no-type1 \
-fkern \
--encoding="t2a.enc" \
--map-file="$2.map" \
"$1" \
"$2"

if [ -d $HOME/texmf/fonts/enc/dvips/$2 ]; then
     echo "$HOME/texmf/fonts/enc/dvips/$2 yes"
else
     mkdir -p $HOME/texmf/fonts/enc/dvips/$2
fi

cp *.enc $HOME/texmf/fonts/enc/dvips/$2/


if [ -d $HOME/texmf/fonts/map/pdftex/$2 ]; then
     echo "$HOME/texmf/fonts/map/pdftex/$2 yes"
else
     mkdir -p $HOME/texmf/fonts/map/pdftex/$2
fi

MAP1="`cat $2.map |sed '1,2d'|awk '{print $2 }'`"
MAP="`cat $2.map |sed '1,2d'|awk '{print $2 }'|sed 's/-//'`"
MAPFILE="$2.map"
sed -i "s/$MAP1/$MAP/" "$MAPFILE"

cp *.map $HOME/texmf/fonts/map/pdftex/$2/


if [ -d $HOME/texmf/fonts/tfm/trues/$2 ]; then
     echo "$HOME/texmf/fonts/tfm/trues/$2 yes"
else
     mkdir -p $HOME/texmf/fonts/tfm/trues/$2
fi

cp *.tfm $HOME/texmf/fonts/tfm/trues/$2/


if [ -d $HOME/texmf/fonts/truetype/$2 ]; then
     echo "$HOME/texmf/fonts/truetype/$2 yes"
else
     mkdir -p $HOME/texmf/fonts/truetype/$2
fi


cp *.ttf $HOME/texmf/fonts/truetype/$2/



if [ -d $HOME/texmf/fonts/vf/trues/$2 ]; then
     echo "$HOME/texmf/fonts/vf/trues/$2  yes"
else
     mkdir -p $HOME/texmf/fonts/vf/trues/$2
fi

cp *.vf $HOME/texmf/fonts/vf/trues/$2/


if [ -d $HOME/texmf/tex/latex/$2 ]; then
     echo "$HOME/texmf/tex/latex/$2 yes"
else
     mkdir -p $HOME/texmf/tex/latex/$2
fi

echo "\ProvidesFile{t2a$2.fd}[`cat $MAPFILE |sed '1,2d'|awk '{print $2 }'` Font]
\DeclareFontFamily{T2A}{$2}{}
\DeclareFontShape{T2A}{$2}{m}{n} {$2} {}
\endinput" >$HOME/texmf/tex/latex/$2/t2a$2.fd


mktexlsr
updmap --enable Map="$2.map"

Для его работы необходимы пакеты:
lcdf-typetools
kpathsea
TexLive
texlive-core
texlive-langcyrillic

Как известно LaTeX(TexLive) работает с локальным каталогом $HOME/texmf, собственно туда и устанавливаются шрифты. Плюс прописываются в конф файлах $HOME/.texlive
берется обычный файл шрифтов, в названии шрифта удяляются тире и пробелы, а далее выполняется команда:
./script.sh font.ttf Font
второй параметр можно сразу использовать для получения таблицы символов данного шрифта, в документе LaTeX
Пример:

\fonttable{Font}

Использовать шрифт можно просмотрев в каталоге fon который создастся после выполнения шрифта файл *.map

пример:

% Automatically maintained by otftotfm or other programs. Do not edit.

Konkord--base KonkordRetro "AutoEnc_ppykhbua6i6wxtz6lrdyzug7ed ReEncodeFont" <[a_ppykhb.enc <Konkord.ttf

Для формирования команды в документе импользуются два параметра:
первый без --base и второй полный
Пример:

{\font\KonkordRetro Konkord at40pt \KonkordRetro  А это текст,
который выводится при помощи шрифта KonkordRetro.}

Пример документа:

+ открыть спойлер

\documentclass[a4paper,12pt]{article}
\usepackage{latexsym}
\usepackage{fonttable}
\usepackage{mathtext}
\usepackage[T2A]{fontenc}


\usepackage[utf8x]{inputenc}
\usepackage[russian]{babel}

\begin{document}

Это просто текст, который выводится LaTeX с
помощью шрифта по умолчанию.\\

{\font\VictorianGothicOne Victorian at40pt \VictorianGothicOne А это текст,
который выводится при помощи шрифта Victorian.}\\


\text{{\font\Cleopatra  cleopatra at40pt \Cleopatra  А это текст,
который выводится при помощи шрифта Cleopatra.}}\\

\text{{\font\KonkordRetro Konkord at40pt \KonkordRetro  А это текст,
который выводится при помощи шрифта KonkordRetro.}}\\

\text{{\font\MontiDecorA MontiDecorA at40pt \MontiDecorA  А это текст,
который выводится при помощи шрифта MontiDecorA.}}\\


\\ \ \\ \ \\ \ \\ \ \\ \ \\ \ \\

\fonttable{MontiDecorA}

\end{document}

Результат в PDF тыц
После выполнения скрипта каталог fon можно удалить

7

Re: Маленькие хитрости в Linux

Прокручивать веб-страницы можно пробелом.

8 (25.05.2012 15:26:27 отредактировано riso)

Re: Маленькие хитрости в Linux

Для того, чтобы автодополнение (по tab) происходило без учета регистра, нужно прописать в ~/.inputrc

set completion-ignore-case on
"\eOd": backward-word
"\eOc": forward-word

и man readline тоже полезно вещь

9 (26.05.2012 00:33:56 отредактировано xxblx)

Re: Маленькие хитрости в Linux

Если нужно большое кол-во названий файлов поменять из ЗАГЛАВНЫХ в строчные, используем следующий скрипт

#! /bin/bash

for filename in *               
do
   fname=`basename $filename`
   n=`echo $fname | tr A-Z a-z`  
   if [ "$fname" != "$n" ]       
   then
     mv $fname $n
   fi
done

exit 0

Кладем этот скрипт в каталог с файлами, названия которых нужно исправить и запускаем его.
FILE.BIN, IMAGE.JPG, TEXT.TXT и т.д. переименуются в file.bin, image.jpg и text.txt соответственно.

10

Re: Маленькие хитрости в Linux

xxblx пишет

for filename in *

в общем случае тут нужен find

xxblx пишет

n=`echo $fname | tr A-Z a-z`

а это лучше cделать средствами bash:
n=${fname,,}

11

Re: Маленькие хитрости в Linux

Чтобы перейти в директорию, в которой вы были до выполнения команды

$ cd

, можно использовать

$ cd -

12

Re: Маленькие хитрости в Linux

Э-э-э.. Похоже, я не вовремя. ab

13

Re: Маленькие хитрости в Linux

Fat-Zer, я из тех, кого принято называть "быдло кодер" в подобных вопросах. так что: работает, да и ладно.

14

Re: Маленькие хитрости в Linux

Копипаста средним колёсиком мыши))) По-сути, одна из самых полезных вещей, которые вообще делаю мышью.

15

Re: Маленькие хитрости в Linux

Ко всему перечисленному, добавляю простенький скрипт конвертации от сканированных изображений, в формате JPEG, в один файл pdf.
Главное что бы названия файлов в каталоге с изображениями, были такими что бы поддавались сортировке(что бы не потерять порядок страниц).

Скрипт выполняется в каталоге с изображениями:

#!/bin/bash
ls|grep .jpeg|while read file
do
jpeg2ps $file >`echo $file|sed 's/.jpeg/.ps/'`
done
ls|grep .ps|while read file
do
ps2pdf $file
done
rm *.ps

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=book.tes $(ls |grep .pdf|sort)
rm *.pdf
mv book.tes book.pdf

16 (14.06.2012 16:54:47 отредактировано zenon)

Re: Маленькие хитрости в Linux

ormorph затеряется пост, жаль, лучше сюда - Sysadmins tips and tricks

17

Re: Маленькие хитрости в Linux

newzenon пишет

ormorph затеряется пост, жаль, лучше сюда - Sysadmins tips and tricks

Да вроде решения до админских не доросли ab

18

Re: Маленькие хитрости в Linux

полезная штучка для новичков.
при удалении файлов, оболочка будет запрашивать подтверждение

echo 'alias rm="rm -i"' >> ~/.bashrc

19 (26.06.2012 16:53:12 отредактировано zenon)

Re: Маленькие хитрости в Linux

moshell загляни в этот .zshrc

20

Re: Маленькие хитрости в Linux

moshell пишет

при удалении файлов, оболочка будет запрашивать подтверждение

echo 'alias rm="rm -i"' >> ~/.bashrc

Ну а в скриптах тоже будет запрашивать? Проще, имхо, запомнить, что по умолчанию подтверждение не запрашивается.

21

Re: Маленькие хитрости в Linux

Ярс, тема называется маленькие хитрости, а не как писать скрипты

22

Re: Маленькие хитрости в Linux

Ньюзенон, осталось звезду прикрутить и получится новогодняя елка )

23

Re: Маленькие хитрости в Linux

moshell пишет

Ярс, тема называется маленькие хитрости, а не как писать скрипты

Я в курсе. Вот и спрашиваю - не будет ли мешать ваша маленькая хитрость работе скриптов

24

Re: Маленькие хитрости в Linux

yars пишет

Вот и спрашиваю - не будет ли мешать ваша маленькая хитрость работе скриптов

Не будет:

Консоль

[lupoalberto@localhost tmp]$ touch test_{01,02}.txt
[lupoalberto@localhost tmp]$ ls -l test_*
-rw-r--r-- 1 lupoalberto lupoalberto 0 июня  26 19:38 test_01.txt
-rw-r--r-- 1 lupoalberto lupoalberto 0 июня  26 19:38 test_02.txt
[lupoalberto@localhost tmp]$ rm test_01.txt
rm: удалить пустой обычный файл «test_01.txt»? yes
[lupoalberto@localhost tmp]$ cat test.sh
#!/bin/bash
rm $1
[lupoalberto@localhost tmp]$ ./test.sh test_02.txt
[lupoalberto@localhost tmp]$ ls -l test_*
ls: невозможно получить доступ к test_*: Нет такого файла или каталога
[lupoalberto@localhost tmp]$

25

Re: Маленькие хитрости в Linux

Те, кто пишут скрипты, думаю, знакомы с флагом -i, и с алиасами.
Совет был новичкам, представляете ситуацию - начинающий юзер удалил  фильм любимой актриссы (Claudia Ricci к примеру, или Sasha Grey), что делать? Как дальше жить? Назад в окна, где по дефолту предупреждающее окошко..?

26

Re: Маленькие хитрости в Linux

Lupo Alberto, спасибо. Плоховато я с этим знаком, получается.

27 (26.06.2012 21:41:38 отредактировано bormant)

Re: Маленькие хитрости в Linux

yars,
"man bash" расскажет, что bash читает ~/.bashrc только при запуске в интерактивном режиме, а в неинтерактивном режиме (а скрипты исполняются в неинтерактивном режиме) игнорирует.

28

Re: Маленькие хитрости в Linux

moshell пишет

Ньюзенон, осталось звезду прикрутить и получится новогодняя елка )

При чем тут елка? Просто хооший и удобный конфиг для zsh.

29

Re: Маленькие хитрости в Linux

newzenon пишет
moshell пишет

Ньюзенон, осталось звезду прикрутить и получится новогодняя елка )

При чем тут елка? Просто хооший и удобный конфиг для zsh.

не в обиду было сказано. шутки ради.
красивая консоль. но меня сбивает с толку куча вкусностей.
подскажи плз мне бы только приглашение разукрасить чтоб ориентироваться было проще между командами

30

Re: Маленькие хитрости в Linux

yars
Тут все просто, файл .bashrc влияет, только на текущую оболочку bash скрипт же запускается в новой оболочке, на которую этот файл уже не действует, за это как раз и отвечает первая строчка #!/bin/bash.

Можно создать файл с содержимым rm $1 без строчки #!/bin/bash и дать права на выполнение, тогда файл .bashrc будет уже влиять.

Другими запуск скрипта, аналогичен команде bash -c "rm file"