0. Работа с переменными окружения
a=1 # установка переменной
echo $a # чтение переменной и её вывод
echo ${a} # более аккуратное чтение переменной, необходимое в случае проблем у интерпретатора и её вывод
echo $(( (a+1)*2 )) # вычисление арифметического выражения
1. Работа с дополнительными дескрипторами. (Связать, записать, закрыть).
exec 3<>filename
echo "Hello" >&3 exec 3>&-
2. Рекурсивное выкачивание документов с урла, без ограничения хождения по ссылками, с конвертацией ссылок для локального просмотра, запрещено подниматься выше чем главный урл
wget -r -l0 -np -k http://testurl.ru/
Максимальный уровень вложенности равен 10
wget -r -l 10 -np -k http://testurl.ru/
3. Послать SIGTERM родителю приложения calc и послать SIGTERM приложению calc
kill -s TERM $(ps -p `pidof сalc` -o ppid=)
kill -s TERM `pidof calc`
4. Память потребляемая процессами.
VSZ - сколько виртуальной памяти выделено под процесс
RSS - сколько страниц физической(оперативной) памяти выделено под процесс.
Оба значения показываются в килобайтах.
http://virtualthreads.blogspot.ru/2006/02/understanding-memory-usage-on-linux.html
ps aux | head
5. Отсылка данных из stdin через curl POST-ом
gzip --stdout --fast |\
curl --data-binary @- -v --header "Content-Type: application/octet-stream"\ --header "Content-Encoding: gzip"\ --header "Transfer-Encoding: chunked"\ "http://${URL_NAME}"
6. grep символа TAB. Взято из ответа http://stackoverflow.com/questions/1825552/grep-a-tab-in-unix
grep $'\t' sample.txt
7. md5 файлов в текущей директории
md5 `find . -type f -maxdepth 1`
8. Поиск только по директориям
find . -name "my_dir" -type d
9. Поискать файлы для cmake, и в них погрепать myvar
find ./ -name "CMakeLists.txt" -exec grep myvar '{}' ';'
10. Поиск по содержимому рекурсивно по директории (-r),
вывод имён файлов в котором было найдено совпадение (-l),
искать без учёта регистра (-i)
grep -lir "helo" /path/to/dir
Поиск по содержимому рекурсивно по директории (-r), с печатью строк где было найден шаблон,
искать без учёта регистра (-i)
grep -ir "helo" /path/to/dir
Пример - поискать define которые заканчиваются на _H. Использовать нормальный вывод (отсутствие -l), рекурсивно по директории (-r), искать без учёта регистра (-i). Показывать в цветном терминале.
grep -E -ir --color "#define (.)*_H$" .
11. Пример перенаправления ввода
ls 123 1>stdout.txt 2>stderr.txt
2>&1 -- append stderr to stdout
ls 123 &> stdout_and_stderr.txt
Перенаправление ввода <<<word - на входной поток подаётся слово. Некоторые сведение про перенаправления каналов доступны здесь http://citforum.ru/operating_systems/linux/user/gl-05/gl_05_05.shtml
12. Рекурсивный ls по директориям с текущей
ls -R
13. curl. Загрузка данных из stdin куда-то. доп. описание
http://curl.haxx.se/docs/manpage.html
curl -T - -v -u "name:" --key ~/.ssh/id_rsa --pubkey ~/.ssh/id_rsa.pub protocol://ip:port
14. Исполнение команды через ssh
ssh machine 'rm -rf /home/bruzzo/test'
15. Эмуляция выполнения скрипта на машинке machine
ssh machine 'bash -s' < test_script.sh
16. Посмотреть список символов из динамической библиотеки
objdump -T /lib/libc.so.7
Описание формата для ELF файлов взятое с
https://docs.oracle.com/cd/E88353_01/html/E37839/objdump-1g.html
1st column - the symbol's value, sometimes refered to as its address.
2nd column - flags. Some of them: 'l' means symbols visible only within a particular file being linked (local scope) 'g' mean symbols that can be referenced from within functions located in other files (global scope) 'd' debugging symbol 'D' dynamic symbol 'F' symbols is name of function 'O' symbol is the name of object file 3rd column - name of section in which symbol is defined or *ABS* if the section is absolute (ie not connected with any section) *UND* if the section is referenced in the file being dumped, but not defined there. 4th column - alignment or something like this last column - symbol's name is displayed
17. Посмотреть список импортируемых символов бинарником/динамической библиотекой. В отличие от PE формат, ELF не содержит привязку имени к конкретной библиотеки
objdump -T <file>|grep "\*UND\*"
18. Посмотреть версию gcc из секции comment
objdump -s --section .comment mybin
19. Посмотреть сводку по доступным секциям в ELF файле mybin
objdump -h mybin
Информация по разным секциям ELF файла -- https://www.cs.stevens.edu/~jschauma/810/elf.html
20. Посмотреть имя платформы для которой собраны объектники из статической бибилиотеки
objdump -f liberm.a | grep "file format"
21. Посмотреть собраны ли объектники с опцией -fPIC:
objdump -r liberm.a | grep "RELOCATION RECORDS"
22. Список дескрипторов которым владеет процесс
lsof
23. Открытые сетевые соединения в вашей системе
lsof -i
24. Трассировка событий
ktrace/kdump
25. Найти g++ по predefined путям
locate g++
26. Путь до бинарника который будет запущен в данном окружении. Виндовый аналог команда where
which g++
27. Создать alias
alias testc="gcc -o /dev/ -c "
28. Посмотреть список алиасов
alias
29. Удалить все алиасы
unalias -a
30. Cоздание мягкой ссылки. Для создания жёсткой ссылки требуется опустить флажок -s
ln -s исходный [куда]
31. Показать размеры разделов диска (display free disk space). При указании файла или директории будет показан раздел на котором находится файл. "-h" означает human readable.
df -h
32. Показать размер использования диска папками и файлами (display disk usage statistic)
du -ch .
33. Показать список файлов с размерами в человеко-читаемом виде.
ls -lh
34. Показать pid запущенных работ
jobs -p
35. POSIX extended regexp ввод без экранирования символов фигурных и круглых скобок в рег.выражении
grep -E
36. Не захватывать мышь midnight commander - ом
alias mc="mc -d"
37. tar compression.
-z: Compress archive using gzip program
-c: Create archive
-v: Verbose i.e display progress while creating archive
-f: Archive File name
tar -zcvf prog-1-jan-2005.tar.gz /home/jerry/prog
38. tar uncompress
-x: Extract files
Extract files in particular directory, for example in /tmp.
tar -zxvf prog-1-jan-2005.tar.gz -C /tmp
39. another compression utils:
gzip, gzip -d,gunzip
zip, unzip
arc,unarc
40. Показать N-у строчку файла, во FreeBsd не поддерживается строка формата для more
more +N file | head -n 1
41. Хорошо переносимый sha-bang. К примеру #!/bin/bash является менее переносимым.
#!/usr/bin/env python
42. Копирования файлов/каталогов с локальной тачки на удаленную
scp SORCE targetHost:~/DEST
43. Использование sftp. Заходим по sftp. Далее все команды начинающиеся с l - local command, нет буквы l - not local (remote) сcommand.
К примеру
cd source
lcd taget_folder
get * - забирть файлики
put * - положить файлики
sftp bruzzo@target_host
44. Перевод linux epoch time seconds в человеко-читаемый вид.
date -r 1374139975 (Под freebsd)
date -d @1372846750 (Под linux)
45. Перевод даты в linux epoch time seconds
date -d "2014-03-22 10:00" +%s
46. Получение linux epoch time в секундах
date +%s
MC/MCEDIT
http://linuxgazette.net/issue23/wkndmech_dec97/mc_article.html
http://unixmemo.org.ua/2010/05/hot-keys-in-mc-midnight-commander
47. Посмотреть символы в объектниках статической библиотеки. В соответствии с документацией U обозначает "внешний, пока неопределенный" символ.
nm -A *.a | grep ***
46. Bash comands
48. посмотреть время работы системы с момента последней перезагрузки
sysctl kern.boottime или uptime
49. Команда stat
stat
Показывает атрибуты файла/директории.
There are 3 kind of "timestamps":
Access - the last time the file was read
Modify - the last time the file was modified (content has been modified)
Change - the last time meta data of the file was changed (e.g. permissions)
stat will show you also some more information like the device, inodes, links, etc.
Remember that this sort of information depends highly on the filesystem and mount options.
For example if you mount a partition with the noatime option, no access information will be written.
50. Пределы размеров по командной строке и размер занимаемый переменными окружения.
xargs --show-limits
51. Запуск make-файла в многопоточном режиме
make [ -f make-файл ] [ -j <число потоков> ] [ цель ]
52. Моделирование установки собранных бинарников без фактической записи на файловую систему. Пример показывает использование опции "-n". Этим примером можно пользоваться и в других задачах для моделирования выполнения команд, без фактического выполнения.
make -n install
53. Посмотреть цели из мейкфайла. Взято от сюда
make -qp | awk -F':' '/^[a-zA-Z0-9][^$#\/\t=]*:([^=]|$)/ {split($1,A,/ /); for(i in A)print A[i]}'
54. Хак для сортировка значений из строки, разделенных пробелами
echo 'joe abbey john anirudh steph'|tr " " "\n"|sort|tr "\n" " "
55. Проверить что переменная установлена в bash. Взято от сюда
${parameter:-[word]}
56. Удалить директорию со всем содержимым и ничего не спрашивать
rm -rf dir
57. Команда patch
patch
58. Sed
Программа, которая циклически преобразует входные строки в выходные.
Начало строки в представляется в стиле /string/, либо номер строки 2, либо диапазон строк 2, 4
Команды
cmd | sed '/string/ c text' заменяет строки содержащие /string/ на значение text
s/reg_expr/rpl/flags Заменяет регулярное выражение "reg_expr" на "rpl" с учетом флагов "flags":
g глобально (по всей строке)
p выводить замены
w wfile сохранять заменяемое в "wfile".
Флаги самого бинарника sed на примерах:
sed -r #использовать расширенные регулярные выражения
cmd | sed = #выдает номера строк
Примеры запуска
cat 1.txt | sed = # выводить номера строк
cat 1.txt | sed '/123/ c text' # замена строк
cat 1.txt | sed '/123/ d' #удаление строк, если 123 есть подстрока текущей строки
cat 1.txt | sed '2 d' # удаление строки по номеру
cat 1.txt | sed -r "s/12(.)*1/AAA/g" # замена строк на новые. Новая состоит из замен регулярных выражений
59. Awk
Команда контекстного поиска и преобразования текста. Она - фильтр.
awk '{print}' f-awk # выдает весь текст;
awk '/до/ {print}' f-awk # выдает строки, где есть "до".
awk '/до/ {print("Привет!")}' f-awk # заменят найденные строки на Привет!
awk '{print $2}' f-awk # печатать второе таб-сепарейтид поле в строке
awk '{ if ($2 == "") print $0"\t"; else print $0}' # если отсутствует второй таб-сепарейтид аргумент то добавить к выводу знак табуляции
awk '{print $1 "\t" "CLUSTER_NUMBER="'${CLUSTERNUM}'}' # первый агумент<tab>зачение переменной кружения $CLUSTERNUM
60. strace
Утилита отладки. Мониторит системные вызовы, и сигналы которые получает процесс
61. readlink
Указывает путь куда ведёт символьная ссылка
62. rev
Выводит все строки файла, переворачивая каждую строку задам наперёд, сохраняя последовательность строк.
Для реверса не самих строк, а просто получения строк в обратном порядке следует использовать команду tac, вместо cat.
63. shopt -s cdspell
Изменяет опечатки команды cd после её выполнения
64. shopt -s huponexit
Отсылать HUP джобам при нормальной окончании сессии
65. hostname
Выводит сетевое имя узла
66. cp -i source dest
Выдать вопрос на подтверждение перетиранием файла
67. split --lines=2 -d a.txt test.txt
Разрезать файл a.txt на кусочки по 2 строки. Имя выходных файлов будут иметь вид test.txt.00
68. gzip --fast
Компрессия входного потока, не требующая знание о размере всего потока.
69. Фишки использования переменных в bash
http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion
70. sysctl -a
Посмотреть параметры ядра, сетевой подсистемы, и параметры безопасности.
71. sysctl net.ipv4.ip_forward
Посмотреть включен ли ip-форвадринг
72. pstree -p
Дерево процессов с pid-ами
73. pidof dbus-daemon
Посмотреть pid процесса по имени
74. /etc/group
Группы которые есть в системе
75./etc/passwd
См. описание здесь username:pswd:uid:gid:uid comments:directory:shell
76. groupadd
Создание группы
77. usermod -a -G group1,group2 username
Добавление пользователя в группы
78. netstat -nap
Cостояние сетевых портов. Другие примеры: http://putty.org.ru/articles/netstat-linux-examples.html
79. service --status-all
Посмотреть статус сервисов
80. script
Начать записывать всё что выводится на терминал в typescript файл. Запись кончается когда происходит выход из shell-а
81. cal
показать календарь на текущий месяц
82. who, who -r
Посмотреть кто залоген в системе, посмотреть текущий уровень выполнения rc.d
83. Раскраска терминала
export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ " export CLICOLOR=1 export LSCOLORS=ExFxBxDxCxegedabagacad
84. Автозагрузка
В /etc/rc.d/ находятся скрипты демонов для различных режимов запуска.
Cсылаются практически всегда на скрипты в /etc/init.d/
Запуск какого-либо скрипта из этой директории без параметров показывает опции для командлайна.
Ссылки запускаются на Start, Kill в порядке десятичных номеров NN указанных в именах символьных ссылок из каталога /etc/rc.d/
Кастомную логику при загрузке системы можно прописать например в следующих трёх местах
1) /etc/rc.local
2) update-rc.d имя_в_initd defaults update-rc.d -f имя_в_initd remove
3) При инициализации оболочки - изменения следует прописывать в ~/.profile
Кроме init.d есть более новая версия работы со демонами(службами) в linux окружении это systemd.
Вся работа с ней ведётся через команду systemctl
https://wiki.archlinux.org/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
85. Размер папок в текущей директории
du -sh *
86. singnal handling.http://www.alexonlinux.com/signal-handling-in-linux
Для игнорирование SIGHUP можно использовать утилиту http://en.wikipedia.org/wiki/Nohup
В случае использования nohup даже если пользователь выйдет из системы процесс продолжит свою работу.
Для передачи сигнала процессу следует использовать команду kill или же если речь идёт о C/C++ коде то системный вызов kill()
SIGHUP - someone has killed the controlling terminal
SIGINT - someone presses CTRL-C
SIGILL - signal, sent to your application by the operating system when it encounters an illegal instruction inside of your program
SIGABRT - you used used abort() API inside of your program
SIGSEGV - Operating system sends a program this signal when it tries to access memory that does not belong to it
SIGCHLD - Tells you that a child process of your program has stopped or terminated
Для установки своего обработчика сигнала для скрипта следует использовать trap:
trap 'echo "Ctrl+C have been pressed"' 2
87. Различные пути в Linux
88. Посмотреть зависимости для разделяемой библиотеки, или исполняемого файла можно через
ldd. Она покажет зависимости от других "lib*.so" динамических библиотек.
Очень часто можно увидеть следующие зависимости:
libc.so.6 - стандартную библиотеку функций языка C++. ld-linux.so.2 - библиотеку динамической линковки программ ELF формата.
89. Отключить, включить swap
$ sudo swapoff /dev/sda2 $ sudo swapon /dev/sda2
90. kill -9
91. Открыть гуёвый файловый менеджер для текущей директории в Ubuntu-е
nautilius .
или
xdg-open .
92.
lsb_release -a print LSB (Linux Standard Base) and Distribution information.
uname -m print machine architecture
uname -a print all information about system
uname -r print version of the OS kernel
93. Инструменты Linux для мониторинга происходящего в разных частях операционной системы
94. Работа с пакетами
apt-get moo -- пасхальное яйцо с коровой.
dpkg --print-foreign-architectures - печать всех поддерживаемых архитектур
dpkg --print-architecture - печать текущей архитектуры для которой будут загружаться пакеты
dpkg --add-architecture - добавить архитектуру
dpkg --remove-architecture - удалить архитектуру
dpkg-query -L <package_name> -- посмотреть какие файлы установленный пакет сделал на файловой системе
https://wiki.debian.org/ru/Multiarch/HOWTO
https://help.ubuntu.com/community/AptGet/Howto
95. Установка nvidia-prime
http://help.ubuntu.ru/wiki/nvidia-prime
sudo apt-get install nvidia-361 nvidia-settings nvidia-prime
96. Установка правильных прав на папку с ключами.
Только пользователь папки ~/.ssh должке иметь права доступа к ней.
Если что-то не так выполните - "chmod -R "go-rwx" ~/.ssh"
97. Поиск всех исполняемых файлов начиная с текущей директории
find ./ -executable -type f
98. lcov
lcov --capture --directory ./ --output-file coverage_all.info
lcov --remove coverage_all.info "/usr/include/*" --output-file coverage.info
genhtml coverage.info --output-directory "./"
http://ltp.sourceforge.net/coverage/lcov.php
LCOV is a graphical front-end for GCC's coverage testing tool gcov. It collects gcov data for multiple source files and creates HTML pages containing the source code annotated with coverage information. It also adds overview pages for easy navigation within the file structure. LCOV supports statement, function and branch coverage measurement.
99. Configure Grub2
# Update grub2
sudo update-grub
# Config file for grub2
/etc/default/grub
100.
sync # Сброс всех буферов для записи на жётский диск. Придаёт уверенности перед перезагрузкой системы
101. Работа с модулями ядра
lsmod -- выводит список загруженных модулей
insmod/modprobe -- принудительная загрузка модуля ядра
rmmod -- выгрузка модуля ядра
depmod -- создания файла, содержащего зависимости между модулям
102. Списка команд
cmd1 && cmd2 && cmd3
cmd2 выполняется только в случае успеха cmd1
cmd3 выполняется только в случае успеха cmd2 и cmd1
103. If statement
if [[ 2 < 1 ]]; then echo "If statement"; else echo "Else statement"; fi
104. Install vmware tools in Ubuntu Virtual machine
linux.iso contains vmware-tools-distrib in which there is a perl script "vmware-install.pl" which should be launched.
105.
cd ~user_name
Swtich to home catalog of specific user