NB: Это пересказ того, что было на паре, а на паре был очень краткий ликбез. Для полноты ощущений знаний рекомендуется пройти какой-нибудь более полный ликбез. Например, такой на двух языках висит в ссылках на вики в разделе «лекции».
Обычное соглашение про вызов команд в bash:
<команда> -<флаг> [значение] --<опция> [значение] <аргумент1> <аргумент2> ... <aргументN>
Во многих случаях порядок флагов, опций ти аргументов неважен.
Примеры см. ниже.
-
pwd
(от «print working directory») — печатает полный путь к папке, в которой вы находитесь. -
ls
(от «list») — перечисляет файлы в текущей папкеПолезные флаги:
ls -a
печатает и скрытые файлы тоже. Скрытым считается любой файл, чьё имя начинается с точки (.
).ls -l
печатает много полезной информации (размеры файлов, дату последнего изменения, владельца, права доступа, etc).ls -al
делает и-a
, и-l
.
-
cd
(от «change directory») — перейти в другую папку.Примеры:
cd my_directory
— перейти в папкуmy_directory
, находящуюся в папке, в которой вы сейчас находитесьcd dir1/dir2
— перейти в папкуdir2
, находящуюся в папкеdir1
, находящуюся в папке, в которой вы сейчас находитесьcd /path/to/dir
— перейти в папку по пути/path/to/dir
cd
— перейти в свою домашнюю папкуcd ~
— то же самоеcd ..
— перейти в папку на уровень выше
-
mkdir
(от «make directory») — создать папку.Полезный флаг:
-p
— создать также все папки, в которых будет лежать итоговая папка, если их ещё нет.
Примеры:
mkdir my_directory
— создать папкуmy_directory
в текущей папкеmkdir dir1/dir2
— в папкеdir1
создать папкуdir2
mkdir -p dir1/dir2
— то же, что и выше, только ещё и создатьdir1
, если такой ещё нет.mkdir /path/to/dir
— создать папку по абсолютному пути
-
cp <file1> <file2>
(от «copy») — скопироватьfile1
вfile2
.Полезный флаг:
-R
— рекурсивно копировать содержимое папки
Примеры:
cp file file2
— скопировать файлcp file dir/
— скопировать файл в папкуdir
cp file1 file2 dir/
— скопировать файлыfile1
иfile2
вdir
cp -R dir1/ dir2/
— скопироватьdir1/
со всеми файлами и подпапками вdir2/
-
mv <file1> <file2>
(от «move») — переименовать (переместить)file1
вfile2
Полезный флаг:
-R
— то же, что и вcp
.
Примеры:
mv file file2
— переименовать файлmv file dir/
— переместить файл в другую папку
-
rm
(от «remove») — удалить файлNB: файлы удаляются не в корзину, а вообще. Действие этой команды отменить нельзя (на самом деле можно, но сложно и без какой-либо гарантии, что получится).
Полезный флаг:
-R
— guess what-f
— игнорировать несуществующие файлы
Примеры:
-
rm file
— удалить файл -
rm -Rf dir/
— удалить папку со всем содержимым
gcc
(от «GNU Compiler Collection») — популярный открытый компилятор для C (и далеко не только).
В качестве аргументов принимает входные файлы, на выходе выдаёт либо объектные, либо исполняемые файлы.
Разобранные флаги:
-c
— собрать объектный файл (*.o
). Без этого флага соберётся исполняемый.-o <file>
— задаёт имя выходного файла. Без этого флага для исполняемых флагов имя становитсяa.out
.
В случае, если входные файлы — объектные, gcc
их слинкует вместе. Если при этом указан флаг -c
, на выходе получится объектный файл, объединяющий объекты из всех входных файлов. Если не указан, на выходе будет исполняемый файл.
Вообще, линковку можно осуществлять с помощью предназначенной для этого команды ld
. Но ей нужно указывать все требуемые библиотеки, в том числе стандартную библиотеку языка программирования. Если это делать через gcc
, зависимости такого рода подтянутся сами собой.
На паре мы собирали файл hello
из двух исходников file.c
и hello.c
с помощью такой последовательности команд:
Собираем объектные файлы
gcc file.c -c -o file.o
gcc hello.c -c -o hello.o
Теперь ликуем в исполняемый файл hello
:
gcc file.o hello.o -o hello
Запускаем исполняемый файл:
./hello
Почему так: по умолчанию, команды ищутся в системных путях (/bin
, /usr/bin
, и всё другое, что указано в переменной $PATH
). Мы же хотим запустить нашу программу, не лежащую в системной папке. Для этого мы указываем путь к нашей программе явно. Здесь .
— ссылка на текущую папку (как и ..
— ссылка на папку уровнем выше).