По основам Unix/Linux?

вопросы строения молекул и квантовой химии
Аватара пользователя
Гесс
Сообщения: 13067
Зарегистрирован: Ср фев 15, 2012 11:19 pm

По основам Unix/Linux?

Сообщение Гесс » Вт дек 02, 2014 9:32 pm

alien308 писал(а):
Гесс писал(а):
alien308 писал(а):Может выделить отдельную тему по основам Unix/Linux?
Я за.
Правда быстро закидается вопросами "а как...?"
Отвечать и систематизировать!
Ну я не знаю как это должно выглядеть, но я попробую для начала накидать некоторые комманды которые я использую чаще других либо которые сильно экономят время либо еще как то примечательно отразились на моей ж*пе.
Я предлагаю в первых постах сформулировать как вы бы хотели это структурировать а я переделаю данный пост.

Осмотр того что творится на нодах сервера. Встречено как минимум 4 принципиально разных конструкции (на разных серверах):
listnodes - весь список
listnodes | grep legion - выдергивает только строки с этим именем пользователя (ну разве что ктото впихнул задачу с таким именем)
qstat -a
llq -u legion - все задачи этого usera
squeue --clusters=AAA -u legion - все задачи этого пользователя на ААА кластере

Стартовать работу
./codename - тупо выполнить скрипт codename который находится в той же папке где и вы и является исполнительным.
qsub pbs.pbs - посылает в очередь pbs.pbs скрипт
llsubmit pbs.pbs - аналогично
sbatch pbs.pbs - аналогично
"Аналогично" не означает взаимозаменяемости. Это означает что на каждом сервере работает только одна из этих команд.

Для убивания работы обычно требуется ее ID номер, который указывается после llcancel, scancel или чего то подобного.

Следующее далее относительно одинаково везде (примечание себе, надо не забыть прописать setenv-export)
chmod +x - это вы написали скрипт и решили сделать его исполнительным. Смотреть также http://bash.im/quote/405659, http://bash.im/quote/397722 и https://ru.wikipedia.org/wiki/Chmod

history - ой а че я вчера по пьяни делал?
history | tail -10 - ненадо таких подробностей, просто скажи мне что я делал последние 10 команд
history > lol.txt - в мемориз файл lol.txt

du -hs - посмотреть размер папки в которой находитесь в удобном формате.
du -hs * - посмотреть размер каждого в папке

grep -A5 "Converged" nameofgaussian.log - ну и че гауссиан так хреново конвержится?

sed -e 's/Pridurok/Durak/g' Predvaritelnyydiagnoz > Okonchatelnyydiagnoz - заменяет в файле Predvaritelnyydiagnoz слово Pridurok словом Durak и сохраняет результат в файл Okonchatelnyydiagnoz
sed -e '4s/Pridurok/Durak/g' Predvaritelnyydiagnoz > Okonchatelnyydiagnoz - делает то же самое но только в 4ой строке
sed 's .\{10\} ' P21.com > P2.1.com - удаляет первые 10 символов в каждой строке, сохраняет в новый файл

ldd /home/legion/Prog/orca_2_9_1_linux_x86-64/orca_scf_mpi – Проверяет какие библиотеки нужны программе. Вывод not a dynamic executable указывает на то что библиотеки этому модулю ненужны.

find / -name TEMP > results.txt 2>&1 Записывает результаты поиска (включая ограничения по доступу) в файл. Причем поиск делается по всему серверу (/) а файл создается там откуда запускалась команда
grep -v 'Permission' results.txt Выдает все строки из файла, кроме содержащей. Комбинация двух команд позволяет быстро искать файлы когда все в округе заблокировано.

grep -iE "(RELAXED SURFACE SCAN STEP|FINAL SINGLE POINT ENERGY)" ScanTriBS.out | grep -B1 "RELAXED SURFACE SCAN STEP" Первая часть делает поиск по двум разным ключевым словам, а вторая выбирает из получившегося списка последнее значение энергии перед переходом к новой точке. Позволяет анализировать файлы сканирования.

grep "S\*\*2" *.33.log Найти строки содержащие выражение «S**2» во всех документах заканчивающихся на .33.log

find . -mtime -1 | grep "log" Найти все лог-файлы измененные за последний день
find . -name "*.com" -exec sed -i 's/B3LYP/MN12SX/g' {} \; Заменить во всех инпутфайлах слово B3LYP словом MN12SX
find . -type f -name '*.MN12pcvQz.com' | while read filename; do mv -v "${filename}" "`echo "${filename}" | sed -e 's/\.MN12pcvQz.com$/\.MN12spQz.com/'`"; done - переименовывает файлы.

alias без аргумента – посмотреть список и значения команд
alias имя “команда (возможно с аргументом)“ – назначить команду. Без прописывания в собственный профайл команда сотрется после перезагрузки. alias name='command'
unalias имя стереть пседоним команды.

Отдельно планируется допилить два слова про vi и $PATH. Впрочем я только за если кто-то возьмет это на себя.

Аватара пользователя
Shorku
Сообщения: 1075
Зарегистрирован: Вт дек 13, 2011 2:17 pm

Re: По основам Unix/Linux?

Сообщение Shorku » Вт дек 02, 2014 9:42 pm

Гесс писал(а):chmod +x - это вы написали скрипт и решили сделать его исполнительным.
справедливо также если, скажем, программа была под windows разархивирована, скопирована, перенесена, а на сервере потом почему-то не запускается :D

ЗЫ сервера, кластеры и все такое у всех разные)
Make quantum chemistry, not war

Аватара пользователя
uchebnik fiziki
Сообщения: 4265
Зарегистрирован: Пн авг 20, 2012 9:04 pm

Re: По основам Unix/Linux?

Сообщение uchebnik fiziki » Вт дек 02, 2014 10:50 pm

Гесс писал(а):Осмотр того что творится на нодах сервера. Встречено как минимум 4 принципиально разных конструкции (на разных серверах)
Это тупо разные системы управления очередями. И это далеко не самое важное, что нужно знать, впервые сталкиваясь с командной строкой. Тем более что для разных систем, если они не самописные, есть нормальные мануалы опять же со списком команд и разъяснением вывода.

А вот смысл директорий . и .. -- это уже другой коленкор. Или команда cd, например. Хотя это как раз есть во всех книжках для начинающих.

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

Или смерть.

Аватара пользователя
Гесс
Сообщения: 13067
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: По основам Unix/Linux?

Сообщение Гесс » Вт дек 02, 2014 11:29 pm

uchebnik fiziki писал(а):Вообще у вас тут свалка команд без объяснений, как они работают. Это очень плохо.
ну с одной стороны конечно да, а с другой - мануал что ли переписывать? Я попытался обозначить получаемый результат.
http://bash.im/quote/88688

Аватара пользователя
Гесс
Сообщения: 13067
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: По основам Unix/Linux?

Сообщение Гесс » Ср дек 03, 2014 3:35 pm

Ладно попробуем начать с чего то начального
Итак вы попали в шелл
whoami - кто я?
date - какой сейчас год? (также может использоваться в роли "а не пора ли пообедать?")
pwd - где я? - вот это полезная комманда.
ls - что вокруг меня?
cd - а не пойти ли мне...
Пойти можно несколькими вариантами.
Например по полному адресу.
cd /Muhosransk/UlicaPushkina/DomKolotushkina/Kvartira5/
с другой стороны если вы уже находитесь на улицеПушкина то достаточно сказать
cd ./DomKolotushkina/Kvartira5/ либо
cd DomKolotushkina/Kvartira5/
потому как ./ означает всего лишь "прям здесь".
Если вы проснулись в Мухосранске на улицеЛермонтова выходить из мухосранска нет никакой необходимости. Достаточно выйти на центральную площадь Мухосранска откуда начинаются все главные папки.
cd ..
поднимает вас на один уровень вверх.
то есть c улицыЛермонтова вы можете сделать
cd ..
cd UlicaPushkina/DomKolotushkina/Kvartira5/
либо просто ../UlicaPushkina/DomKolotushkina/Kvartira5/
только не пытайтесь сделать чтото в стиле
cd /UlicaPushkina/DomKolotushkina/Kvartira5/ - это будет обозначать попытку войти в некую улицу пушкина находящуюся посреди тайги. Вы сначала должны обозначить город.
Спасибо Shorku за напоминание. Если у вас уже нет сил и вы немеющими губами смогли прошептать только
cd
услужливый шелл унесет ваше тело ДОМОЙ (оно же $HOME, директрия с которой вы стартуете)
если вы хотите пойти куда-то внутри вашего дома, то вам придется найти тильду (честно, только что пару минут рыскал по клаве, она у меня на твердом знаке оказывается и ставится с правым альтом).
vi ~/Gostinnaya/Shkaf/ButylkaVodki откроет ... ну вы поняли что.

Перейдем к экспорту.
Экспорт присваивает переменной некоторое значение.
То есть сказав
export MoyLyubimuyGorod=/Muhosransk
вы сможете попадать в Мухосранск по команде
cd $MoyLyubimuyGorod
а если вы забудете какой именно город ваш любимый вы всегда можете спросить у ясеня эха
echo $MoyLyubimuyGorod
учтите что эхо не отвечает на глупые вопросы не касающиеся переменных:
echo MoyLyubimuyGorod
Вы можете дать переменной несколько значений:
export Turpoezdka=/Muhosransk:/Moskva/Kreml:/Paris/Luvr:/Paris/Eifeltower
перейти туда у вас не получится, но во всяком случае вы всегда можете узнать куда вы хотели сьездить.
echo $Turpoezdka
если после создания этого спика городов вам хочется добавить еще и Берлин и вам платят за число символов в коде то безусловным решением будет
export Turpoezdka=/Muhosransk:/Moskva/Kreml:/Paris/Luvr:/Paris/Eifeltower:/Berlin
А если вам лень писать столько букв, то можно сказать
export Turpoezdka=$Turpoezdka:/Berlin
Учтите, это означает что Берлин добавлен в конец вашего списка.
Если вы хотите видеть его в начале то придется
export Turpoezdka=/Berlin:$Turpoezdka
разница казалось бы не велика, кроме случая когда Ужасный Некто начнет шерстить все обозначенные вами папки в поисках скажем Нео, и использует первого найденного Нео.
То есть если вы хотите чтоб был использован Нео из Мухосранска - постарайтесь чтоб перед Мухосранском не значились другие города в которых могут жить другие Нео.
Все эти производные вы создали сами и как только вы закроете шелл они ичезнут. Просто и навсегда. Как и не было.
Но некоторые переменные загружаются в шелл автоматически при загрузке. Они таятся в страшном месте невидимом ls, тайной комнате гарри поттера о которой мы раскажем позже.
Самая популярная из этих переменных $PATH.
узнать содержимое которого можно спросив у эха
Это очень значимая переменная, поэтому если вы что то присвоили типа
$PATH=LinuxTupayaOS
то все, Шелл на вас обиделся и до перезагрузки будет страдать херней.
Ну вот пока так. Пожелания, предложения?
Последний раз редактировалось Гесс Ср дек 03, 2014 5:38 pm, всего редактировалось 2 раза.

Аватара пользователя
uchebnik fiziki
Сообщения: 4265
Зарегистрирован: Пн авг 20, 2012 9:04 pm

Re: По основам Unix/Linux?

Сообщение uchebnik fiziki » Ср дек 03, 2014 4:23 pm

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

Или смерть.

Аватара пользователя
Гесс
Сообщения: 13067
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: По основам Unix/Linux?

Сообщение Гесс » Ср дек 03, 2014 5:06 pm

Писать о vi у меня нет настроения, поэтому предположим у вас уже есть файл. Да не один. Да побольше, побольше, чтоб их открывать было неудобно.
IloveLinux IhateLinux.out YouAreStupid.out Virus Pörn, причем последний является папкой, а Virus является исполнительным. Легко заметить что они отличаются по цвету
как я уже писал выше ls показывает все содержимое, причем в алфавитном порядке
ls -d покажет вам только папки.
ls -l покажет более подробную информацию, включая размер и права доступа к каждому. (это первая колонка типа -rw-r--r-- что это такое смотреть chmod в википедии).
ls -lrt покажет подробную инфу обо всех да еще и отсортирует по времени
ls I* покажет все файлы начинающиеся с I
ls *out покажет все аутпуты.

grep OS * обыщет все файлы и выведет все строки из всех файлов в которых присутствует буквосочетание OS
grep OS IloveLinux сделает это только с указанным файлом.
grep -c OS IloveLinux только посчитает сколько раз встретилось это буквосочетание и не будет показывать где и как.
Учтите, что будут ловиться и OS и POST и OSCAR.
Если вы заинтересованы только в OS то
grep " OS " *
grep обладает ужасающим количеством опций, переписывать мануал на пальцах мне влом поэтому просто знайте:
можно grepать включая предыдущие или последующие строки, грепать одновременно несколько аргументов, grepать слова с заглавными и прописными в обоих написаниях одновременно (по умолчанию Os ловиться не будет), и прочее. Есть инструкции на русском.
Самая любимые мои grep для гауссиановских аутпутов
grep -A5 "Converged" nameofgaussian.log
grep "\\HF=" *log
grep "NI" *log - ловит Nimag из архивного блока если только N и I не разнесло в разные строки.

Аватара пользователя
Shorku
Сообщения: 1075
Зарегистрирован: Вт дек 13, 2011 2:17 pm

Re: По основам Unix/Linux?

Сообщение Shorku » Ср дек 03, 2014 5:26 pm

раз уж пошло такое, окромя . и .. есть еще ~ означающее домашнюю директорию, удобно использовать вместо абсолютного пути.
Make quantum chemistry, not war

Аватара пользователя
uchebnik fiziki
Сообщения: 4265
Зарегистрирован: Пн авг 20, 2012 9:04 pm

Re: По основам Unix/Linux?

Сообщение uchebnik fiziki » Ср дек 03, 2014 5:39 pm

злая автозамена заменяет тут тильду на что-то. тильда вот:
Последний раз редактировалось uchebnik fiziki Ср дек 03, 2014 5:39 pm, всего редактировалось 1 раз.
Свобода, равенство, братство.

Или смерть.

Аватара пользователя
Гесс
Сообщения: 13067
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: По основам Unix/Linux?

Сообщение Гесс » Ср дек 03, 2014 5:39 pm

Shorku писал(а):раз уж пошло такое, окромя . и .. есть еще ~ означающее домашнюю директорию, удобно использовать вместо абсолютного пути.
допилено, хотя сам никогда не пользовался, обычно почти все лежит в $WORK

Аватара пользователя
Гесс
Сообщения: 13067
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: По основам Unix/Linux?

Сообщение Гесс » Ср дек 03, 2014 5:42 pm

uchebnik fiziki писал(а):злая автозамена заменяет тут тильду на что-то. тильда вот:
cd - (всмысле с минусом) посылает в последнюю посещенную папку.

То есть
cd /Berlin
vi BrandnburgerTür
cd /Moscow/Birulevo
vi Shop
cd -

приведет вас опять в Берлин
Последний раз редактировалось Гесс Ср дек 03, 2014 5:44 pm, всего редактировалось 1 раз.

Аватара пользователя
uchebnik fiziki
Сообщения: 4265
Зарегистрирован: Пн авг 20, 2012 9:04 pm

Re: По основам Unix/Linux?

Сообщение uchebnik fiziki » Ср дек 03, 2014 5:44 pm

нет, тильда -- это ваша личная домашняя директория. В большинстве современных десктопных систем это /home/username/
Свобода, равенство, братство.

Или смерть.

Аватара пользователя
Гесс
Сообщения: 13067
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: По основам Unix/Linux?

Сообщение Гесс » Ср дек 03, 2014 5:46 pm

uchebnik fiziki писал(а):нет, тильда -- это ваша личная домашняя директория. В большинстве современных десктопных систем это /home/username/
Ну так с нее юзер и стартует и она же и является $HOME

Аватара пользователя
alien308
Сообщения: 553
Зарегистрирован: Пт окт 23, 2009 8:53 pm

Re: По основам Unix/Linux?

Сообщение alien308 » Ср дек 03, 2014 7:15 pm

Бывает нужно:
env выводит переменные окружения с их значениями
less filename выводит файл на монитор с возможностью пролистывания вперёд-назад стрелками на клавиатуре и клавишами Page Up и Page Down, вместо Page Down можно жать пробел, для выхода нажать "q"
more filename выводит файл на монитор с возможностью пролистывания только вперёд пробелом, для выхода нажать "q". В отличие от less установлен практически всегда по умолчанию.

Многие команды могут принимать вывод других команд как свои входные данные, например можно переслать вывод команды env в less, тогда получится просмотреть вывод занимающий больше одного экрана:
env | less

Символ | служит для создания конвеера из одной программы в другую.

Аватара пользователя
surius
Сообщения: 1489
Зарегистрирован: Пт сен 21, 2007 11:20 am

Re: По основам Unix/Linux?

Сообщение surius » Чт дек 04, 2014 1:24 am

Люди добрые, уж коль скоро пошла такая пьянка, то не подскажет ли кто из умных как забиндить команду (в общем случае набор символов) на одну кнопку (ну или их сочетание, чё уж там) :235:
А то честно говоря иногда хочется вены вскрыть когда чтоб забрать файлики с кластера приходится помногу раз вводить что-нибудь типа scp *.* username@xxx.xxx.xxx: ну или там по нодам ковыряться, тоже частенько прописывать адрес приходиться. муторно, в общем.
"Bite my shiny metal ass"
Bender

Аватара пользователя
Гесс
Сообщения: 13067
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: По основам Unix/Linux?

Сообщение Гесс » Чт дек 04, 2014 1:29 am

surius писал(а):Люди добрые, уж коль скоро пошла такая пьянка, то не подскажет ли кто из умных как забиндить команду (в общем случае набор символов) на одну кнопку (ну или их сочетание, чё уж там) :235:
> grep Roy cowboys
Roy Rogers
> g Roy cowboys
g: Command not found.
> alias g "grep"
> g Roy cowboys
Roy Rogers

разумеется команду имеет смысл внести в дотпрофайл (.bashrc или кто там)

Аватара пользователя
surius
Сообщения: 1489
Зарегистрирован: Пт сен 21, 2007 11:20 am

Re: По основам Unix/Linux?

Сообщение surius » Чт дек 04, 2014 1:45 am

Гесс писал(а):
surius писал(а):Люди добрые, уж коль скоро пошла такая пьянка, то не подскажет ли кто из умных как забиндить команду (в общем случае набор символов) на одну кнопку (ну или их сочетание, чё уж там) :235:
> grep Roy cowboys
Roy Rogers
> g Roy cowboys
g: Command not found.
> alias g "grep"
> g Roy cowboys
Roy Rogers

разумеется команду имеет смысл внести в дотпрофайл (.bashrc или кто там)
ok. попробовал, выглядит мило, спасибо. А это alias действителен до конца сейсии?
"Bite my shiny metal ass"
Bender

Аватара пользователя
Гесс
Сообщения: 13067
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: По основам Unix/Linux?

Сообщение Гесс » Чт дек 04, 2014 1:55 am

да, до конца сессии (если не грузить его автоматически в начале из .bashrc)
у меня так настроены ssh подключения к другим серверам через "родной" - трехбуквенным посылом вместо тридцатибуквенных адресов которые я все равно не запонмню. Пароль правда не обходит но это к лучшему.

Пара слов про alias в конце первого поста, но инет явно лучше.

Аватара пользователя
amge
Сообщения: 2050
Зарегистрирован: Вт июл 31, 2007 11:42 am

Re: По основам Unix/Linux?

Сообщение amge » Чт дек 04, 2014 6:21 am

Гесс писал(а):Если вы заинтересованы только в OS то
grep " OS " *
А если OS в начале/конце строки? :)

Аватара пользователя
amge
Сообщения: 2050
Зарегистрирован: Вт июл 31, 2007 11:42 am

Re: По основам Unix/Linux?

Сообщение amge » Чт дек 04, 2014 7:38 am

surius писал(а):А то честно говоря иногда хочется вены вскрыть когда чтоб забрать файлики с кластера приходится помногу раз вводить что-нибудь типа scp *.* username@xxx.xxx.xxx: ну или там по нодам ковыряться, тоже частенько прописывать адрес приходиться. муторно, в общем.
У меня это реализовано в виде скриптика, названного scp_nusc (nusc - название кластера)

Код: Выделить всё

#!/usr/bin/perl -w 
  
s/^:/username\@xxx.xxx.xxx:/ foreach @ARGV;   
print ("scp -i $ENV{HOME}/.ssh/nusc @ARGV\n");
system ('scp', '-i', "$ENV{HOME}/.ssh/nusc", @ARGV); 
Пользоваться (из текущей директории загрузить инпуты на кластер в папку Raschet и затем выгузить оттуда ауты):
scp_nusc *.inp :Raschet
scp_nusc :Raschet/*.out .

(т.е. перед именами файлов/директорий на кластере ставить двоеточие, и все)
Авторизация у меня организована по ключу ($HOME/.ssh/nusc), но без пароля, поэтому скрипт пароль не спрашивает - очень удобно.

Скрипт нужно поместить в папку из $PATH и сделать исполняемым.

Ответить

Вернуться в «квантовая химия и моделирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей