Laboratorium Komputerowe Progmar
Marcin Załęczny

Na stronie używamy cookies. Korzystając z witryny wyrażasz zgodę na ich wykorzystywanie.      Zamknij

Polecenia dla developerów w systemie Ubuntu

Zliczenie wystąpień poszczególnych wywołań systemowych i wyświetlenie czasu wykonania tych wywołań: strace -c dd if=/dev/urandom of=/dev/null count=1000

Wykonanie programu ./program i zapisanie do pliku strace.out wszystkich wywołań systemowych, których użył ten program: strace -o strace.out -f ./program

Utworzenie pliku o rozmiarze 4MB, sformatowanie go jako pliku wymiany i podłączenie w systemie jako dodatkowej przestrzeni wymiany: dd if=/dev/zero of=/tmp/swap.dat bs=1k count=4096
mkswap /tmp/swap.dat
swapon /tmp/swap.dat

Włącza zrzucanie rdzenia do pliku: ulimit -c unlimited

Wyświetla PID polecenia cmd: pgrep -n cmd

Wyświetla aktualny katalog roboczy z zastąpieniem symlinków katalogami do których one prowadzą: pwd -P

Wymuszenie na gcc pozostawienia pliku asemblera do którego jest tłumaczony kod w c. Plik ten znajduje się w katalogu /tmp (np. /tmp/ccQrSAQZ.s): gcc -v -c main.c Skompilowanie kodu w asemblerze do pliku obiektowego: as -V -Qy -o main.o /tmp/ccQrSAQZ.s

Listuje otwarte pliki w systemie: lsof

Listuje otwarte przez proces o podanym PID-zie pliki: lsof -p 1234

Wypisuje procesy, które mają otworzony podany plik: fuser jakis_plik.txt

Ubija wszystkie procesy, które mają otworzony podany plik: fuser -k -KILL jakis_plik.txt

Wypisuje wszystkie procesy, które mają otworzone jakieś pliki należące do podanego systemu plików: fuser -m /media/flash

Wypisuje nazwy podanych plików oraz ich uprawnienia w formacie symbolicznym i liczbowym: stat --format="%-15n %A,%a" /dev/log dev/sda /dev/zero

Wypisuje czas ostatniego dostępu do pliku w sekundach od 1970-01-01 00:00:00: stat -c %X plik.txt

Wyświetla wszystkie co najmniej czteroznakowe ciągi tekstowe występujące w podanym pliku: strings filename.dat

Wyświetla wszystkie co najmniej czteroznakowe (w bajtach) ciągi tekstowe wraz z ciągami zakodowanymi binarnie w UTF-8 występujące w podanym pliku: strings -eS filename.dat

Wypisuje dane w formacie binarnym, każde słowo ma 16-bitów, wyświetla w prawej kolumnie znaki ascii: xxd filename.dat

Wypisuje dane w formacie binarnym, każde słowo ma 32-bity: xxd -g4 filename.dat

Wypisuje dane w formacie binarnym, każde słowo ma 16-bitów, nie wyświetla w prawej kolumnie znaków ascii: hexdump filename.dat

Wypisuje dane w formacie binarnym, każde słowo ma 32-bity, nie wyświetla w lewej kolumnie offsetów ani w prawej kolumnie znaków ascii: hexdump -e '6/4 "%8x "' -e '"\n"' filename.dat

Wypisanie obiektów pamięci współdzielonej: ipcs -m -m

Wypisanie obiektów pamięci współdzielonej oraz informacji o tym, który proces (PID) dany obiekt utworzył oraz który proces jako ostatni związał się z tym obiektem lub usunął dowiązanie do niego: ipcs -p

Sprawdzenie, które procesy korzystają z danego obiektu pamięci współdzielonej ([shmid] jest wybranym identyfikatorem danego obiektu): ipcs -m
ipcs -m -p
lsof | head -1 ; lsof | grep [shmid]

Wyświetlenie dodatkowych infrmacji na temat wybranego obiektu pamięci współdzielonej: ipcs -m -i [shmid]

Wypisanie listy istniejących w systemie kolejek komunikatów standardu System V: ipcs -q

Wypisanie szczegółowych danych na temat kolejki o podanym identyfikatorze msqid (wartość liczbowa): ipcs -q -i msqid

Usuniecie kolejki o podanym identyfikatorze msqid (wartość liczbowa): ipcrm -q msqid

Wypisanie listy istniejących w systemie semaforów standardu System V: ipcs -s

Wypisanie szczegółowych danych na temat semafora o podanym identyfikatorze semid (wartość liczbowa): ipcs -s -i semid

Usuniecie semafora o podanym identyfikatorze semid (wartość liczbowa): ipcrm -s semid

Sprawdzenie czy proces działa (jeśli otrzymamy puste wyjście to znaczy, że tak): kill -0 PID

Usunięcie wybranego obiektu pamieci współdzielonej: ipcrm -m [shmid]

Wypisuje pid, efektywny identyfikator użytkownika, rzeczywisty identyfikator użytkownika i komendę dla każdego uruchomionego procesu: ps -eo pid,euser,ruser,comm

Wyświetla funkcję systemową blokującą na semaforze dany proces: ps -o wchan -p PID

Zamontowanie systemu plików kolejek standardu POSIX: sudo mount -t mqueue none /mnt/mqs Wyświetlenie szczegółowych danych wybranej kolejki (pliku) standardu POSIX: cd /mnt/mqs
touch myqueue
cat myqueue

Aby usunąć kolejkę standardu POSIX, należy po prostu skasować jej plik przy pomocy polecenia rm, np: rm myqueue

ls -l /dev Jeśli po wydaniu powyższego polecenia linia reprezentująca kolejny plik zaczyna się od litery: b (block), c (character), p (pipe) lub s (socket), to oznacza, że dany plik jest urządzeniem (b, c) lub plikiem specjalnym (p, s).

Wyświetla szczegółowe informacje na temat podanego urządzenia, w tym jego ścieżkę w katalogu /sys/devices: udevadm info --query=all --name=/dev/sda

Monitorowanie powiadomień uevent (o podłączeniu/usunięciu urządzenia): udevadm monitor

Monitorowanie powiadomień uevent pochodzących z jądra i dotyczących zmian w podsystemie SCSI: udevadm monitor --kernel --subsystem-match=scsi

Wyświetla listę urządzeń scsi (przegląda on system plików sysfs: /sys): lsscsi

Wyświetla listę urządzeń USB: lsusb

Konwencje w nazewnictwie urządzeń w systemie:

/dev/sd* - dyski twarde (np. /dev/sda, /dev/sdb) Partycje główne na dysku /dev/sda reprezentowane są przez następujące pliki /dev/sda1 .. /dev/sda4. Jeśli chcemy utworzyć partycje logiczne, to jedną z tych czterech partycji głównych musi być partycja rozszerzona. Partycje logiczne w obrębie partycji rozszerzonej reprezentowane są przez pliki /dev/sda5, /dev/sda6, ...
/dev/sr* - dyski CD i DVD (np. /dev/sr0, /dev/sr1) Do powyższych plików istnieją dowiązania symboliczne takie jak: /dev/cdrom, /dev/cdrom1, /dev/cdrw, /dev/cdrw1, /dev/dvd, /dev/dvdrw, ...
/dev/hd* - dyski twarde PATA (np. /dev/hda, /dev/hdb, /dev/hdc, /dev/hdd) Jest to starszy sprzęt teraz już rzadko spotykany.
/dev/tty*, /dev/pts/*, /dev/tty - terminale
/dev/tty1 - pierwsza konsola wirtualna
/dev/tty2 - druga konsola wirtualna
...
/dev/tty6 - szósta konsola wirtualna
/dev/pts/0 - pierwsze urządzenie pseudoterminala
/dev/pts/1 - drugie urządzenie pseudoterminala
...
/dev/tty - terminal właściwy dla aktualnego procesu
W systemie Ubuntu przełączenie się z środowiska graficznego do n-tej (n od 1 do 6) konsoli wirtualnej następuje po wciśnięciu klawiszy CTRL+Fn. Następnie możemy się przełączać pomiędzy tymi konsolami za pomocą skrótów Alt+Fn. Powrót do środowiska graficznego następuje po przełączeniu się na siódmą konsolę wirtualną: Alt+F7.
Jeśli jesteśmy już zalogowani do dowolnej konsoli wirtualnej, to możemy się przełączyć do innej konsoli następującym poleceniem: chvt n - gdzie n to numer konsoli docelowej.
/dev/ttyS* - porty szeregowe RS-232 /dev/ttyS0 - odpowiednik windowsowego COM1,
/dev/ttyS1 - odpowiednik windowsowego COM2
...
/dev/ttyUSB* oraz /dev/ttyACM* - porty USB /dev/ttyUSB0, /dev/ttyUSB1, ...,
/dev/ttyACM0, /dev/ttyACM1, ...
/dev/lp0 i /dev/lp1 - jednokierunkowe porty równoległe /dev/lp0 - odpowiednik windowsowego LPT1
/dev/lp1 - odpowiednik windowsowego LPT2
Porty te zostały zastąpione portami USB.
/dev/parport0 i /dev/parport1 - dwukierunkowe porty równoległe
/dev/dsp, /dev/audio, /dev/snd/* - urządzenia audio
Urządzenia ALSA znajdują się w ktalogu /dev/snd.
Urządzenia OSS to /dev/dsp i /dev/audio.

Urządzenia tworzymy przy pomocy polecenia mknod podając plik urządzenia, jego typ oraz numer główny i poboczny, np: sudo mknod /dev/sda1 b 8 2 - pierwsza partycja dysku twardego sda

Wymusza na jądrze ponowne wczytanie tablicy partycji podanego urządzenia: blockdev -rereadpt /dev/sdb

Wyświetla numer bajtu licząc od początku dysku, od którego zaczyna się wskazana partycja (sda2): cat /sys/block/sda/sda2/start

Wyświetla listę partycji dysków twardych z przypisanymi im identyfikatorami UUID oraz ich typami: sudo blkid Dla partycji typu VFAT identyfikatorem UUID jest numer seryjny tego woluminu FAT.

Aby zamontować partycję po numerze UUID, wykonujemy polecenie: mount UUID=..... /mnt/disk

Odmontowuje zamontowany katalog / i ponownie go montuje korzystając z zapisu w pliku /etc/fstab. Przydaje się gdy system plików / był zamontowany w trybie tylko do odczytu i chcemy go zamontować z pełnymi uprawnieniami: mount -n -o remount /

Polecenie służące do sprawdzania systemów plików pod kątem występowania błędów: fsck Jest ono okresowo automatycznie wywoływane przez system operacyjny. W trybie interaktywnym uruchamiamy go podając jako parametr ścieżkę do urządzenia, np.: fsck /dev/sda5 Sprawdzany system plików musi być odmontowany, gdyż w przeciwnym przypadku mogłoby ono spowodować błędy systemu plików i utratę danych. Od tej reguły istnieje jeden wyjątek: jeśli uruchomiliśmy system w trybie jednego użytkownika i podmontowaliśmy główny system plików / w trybie tylko do odczytu, to wtedy możemy bezpiecznie wykonać fsck dla tego systemu plików.

Sprawdzenie systemu plików bez wprowadzania żadnych modyfikacji (prób naprawczych) do systemu plików: fsck -n

Zastąpienie uszkodzonego superbloku jego kopią zapasową znajdującą sie w bloku o podanym numerze: fsck -b numer

Jeśli system plików został utworzony z wartościami domyślnymi, to poniższe polecenie wyświetli listę numerów bloków zawierających kopie zapasowe superbloku: mke2fs -n

Utworzenie i aktywowanie partycj wymiany: mkswap /dev/hda5
swapon /dev/hda5

Wyłączenie podanej partycji wymiany: swapoff /dev/hda5

Przygotowanie i podłączenie pliku jako przestrzeni wymiany: dd if=/dev/zero of=plik_wymiany bs=1m count=liczba_megabajtow
mkswap plik_wymiany
swapon plik_wymiany

Do usunięcia partycji lub pliku z przestrzeni wymiany służy polecenie: swapoff partycja_lub_plik_wymiany

Proces startu systemu:

  1. Sprawdzenie procesora.
  2. Sprawdzenie pamięci.
  3. Rozpoznawanie magistrali urządzeń.
  4. Wykrywanie urządzeń.
  5. Konfigurowanie uzupełniających podsystemów jądra (sieć, itp.)
  6. Montowanie podstawowego systemu plików.
  7. Uruchamianie przestrzeni użytkownika (proces init: init.d lub upstart lub systemd).

Parametry jądra użyte w trakcie rozruchu można znaleźć w pliku /proc/cmdline: cat /proc/cmdline np.:
BOOT_IMAGE=/boot/vmlinuz-3.2.0-90-generic-pae root=UUID=4b43b290-bce6-478e-a245-997995a92c13 ro quiet splash vt.handoff=7
Parametr ro jest użyty po to by w trakcie uruchamiania program fsck mógł bezpiecznie sprawdzić główny system plików. Kiedy ta kontrola zostanie zakończona, proces init przemountuje system plików w trybie pełnego dostępu.

GRUB - wiersz poleceń (uruchamiany klawiszem 'c' w menu rozruchowym):

ls - wypisuje znalezione urządzenia i partycje dyskowe. Słowo kluczowe msdos w nazwie partycji oznacza, że na dysku znajduje się tablica partycji MBR. Słowo kluczowe gpt w nazwie partycji oznacza, że na dysku znajduje się tablica partycji GPT.
ls -l - wypisuje szczegółowe informacje na temat znalezionych urządzeń, np. identyfikatory UUID, typy systemów plików, czas ostatniej modyfikacji, itp.
echo $root - wypisuje nazwę partycji podstawowej
ls ($root)/ lub ls (hd0,msdos1)/ - wypisuje listę plików na partycji podstawowej
ls ($root)/boot - wypisanie zawartości katalogu /boot na partycji podstawowej
set - wyświetla listę zmiennych programu grub. Jedną z najważniejszych zmiennych jest zmienna $prefix przechowująca lokalizację konfiguracji gruba oraz dodatkowych plików z których korzysta.

Polecenie służące do wygenerowania konfiguracji gruba (na standardowe wyjście): grub-mkconfig Zapisanie nowej konfiguracji do podanego pliku: grub-mkconfig -o /boot/grub/grub.cfg

Wyświetla poziom uruchomienia systemu: who -r

Rozpoznanie rodzaju działającego w systemie procesu init:

  1. Jeżeli istnieją katalogi /usr/lib/systemd oraz /etc/systemd, to działa w nim systemd.
  2. Jeżeli istnieje katalog /etc/init zawierający dużo plików *.conf, to mamy do czynienia z programem Upstart
  3. Jeżeli nie zachodzi ani 1 ani 2 a w systemie istnieje plik /etc/inittab, to jest to najprawdopodobniej program init System V.
  4. Do weryfikacji rodzaju procesu init może też posłużyć strona manuala: man 8 init

Wypisuje listę aktywnych jednostek (usług) w systemie: syssystemctl list-units

Zapisanie do logu komunikatu określonego typu: logger -p daemon.info To jest komunikat w logu systemowym

Wypisuje listę grup, do których należy bieżący użytkownik: groups

Wypisanie wszystkich procesów w systemie z uwzględnieniem wątków: ps axm -o pid,tid,command

Monitorowanie podanych procesów: top -p PID_1 -p PID_2 ...

Pomiar czasu procesora wykorzystanego przez dane polecenie: /usr/bin/time polecenie

Wypisuje czas działania systemu oraz średnie obciążenie procesora: uptime

Wyświetla informacje o podstawowych i drugorzędnych błędach stron procesów: ps -o pid,min_flt,maj_flt,command

Monitorowanie zużycia pamięci i procesora w interwale 5-sekundowym: vmstat 5

Wypisuje statystyki użycia urządzeń wejścia/wyjścia i procesora: iostat

Wypisuje statystyki użycia wyłącznie urządzeń wejścia/wyjścia: iostat -d

Wypisuje szczegółowe informacje na temat użycia dysków wraz z wszystkimi partycjami: iostat -p ALL

Wyświetla informacje na temat wykorzystania urządzeń wejścia/wyjścia dla wątków działających w systemie. Wyniki są prezentowane identycznie jak w poleceniu top: iotop

Wyświetlenie statystyk użycia procesora w interwale 1-sekundowym w czterech krokach: sar 1 4

Wyświetlenie statystyk użycia pamięci wirtualnej w interwale 1-sekundowym w czterech krokach: sar -r 1 4

Monitorowanie operacji związanych ze stronicowaniem i działań na pamięci wirtualnej w interwale 1-sekundowym w czterech krokach: sar -B 1 4

Wyświetlenie statystyk użycia urządzeń blokowych w interwale 1-sekundowym w jednym kroku (opcja -p powoduje wyświetlenie nazw tych urządzeń a nie numerów pierwszo i drugorzędnych): sar -d -p 1 1

Wyświetlenie statystyk użycia urządzeń sieci Ethernet w interwale 1-sekundowym w czterech krokach: sar -n DEV 1 4

Wyświetlenie statystyk błędów urządzeń sieci Ethernet w interwale 1-sekundowym w czterech krokach: sar -n EDEV 1 4

Wyświetlenie statystyk klienta systemu plików NFS w interwale 1-sekundowym w czterech krokach: sar -n NFS 1 4

Wyświetlenie statystyk serwera systemu plików NFS w interwale 1-sekundowym w czterech krokach: sar -n NFSD 1 4

Wyświetlenie statystyk gniazd w interwale 1-sekundowym w czterech krokach: sar -n SOCK 1 4

Wyświetlenie wszystkich statystyk DEV, EDEV, NFS, NFSD, SOCK w interwale 1-sekundowym w jednym kroku: sar -n ALL 1 1

Wypisuje szczegółowe informacje o zainstalowanym procesorzez x86 (Intel/AMD): x86info

Wyświetlenie statystyk opisujących efektywność kodu w zakresie korzystania z pamięci podręcznej: valgrind --tool=cachegrind ./a.out params

Wypisanie listy wywołań funkcji bibliotek dynamicznych posortowanych wg czasu oczekiwania na dane wywołanie: ltrace -c polecenie np.: ltrace -c dd if=/dev/urandom of=/dev/null count=1000

Wypisanie szczegółowych informacji (wraz z czasem wykonania danej funkcji, parametr -T) wywołania wybranych (parametr -e) funkcji bibliotek dołączanych dynamicznie: ltrace -T -e read,write dd if=/dev/urandom of=/dev/null count=1

Wypisanie listy wywołań systemowych posortowanych wg czasu oczekiwania na dane wywołanie: strace -c polecenie np.: strace -c dd if=/dev/urandom of=/dev/null count=1000

Podłączenie się programu strace do działającego już procesu: strace -ttt -p PID

Profiluje podany program (program musi być skompilowany z parametrem -pg oraz bez żadnych flag optymalizacyjnych): gprof ./progname

Jak powyżej, ale nie wyświetla opisów poszczególnych pól: gprof -b ./progname

Testowanie ile razy poszczególne wiersze kodu źródłowego programu zostały wykonane: gcc -fprofile-arcs -ftest-coverage test.c
./a.out
gcov test.c
less test.c.gcov
rm test.c.gcov test.gc*

Wypisuje listę procesów używających portów lub prowadzących ich nasłuch (parametr -n wyłącza rozwiązywanie nazw domen i hostów): sudo lsof -i -n

Wypisuje proces korzystający z podanego portu: sudo lsof -n -i:port

Wypisuje wszystkie procesy nasłuchujące na portach TCP: sudo lsof -iTCP -sTCP:LISTEN

Nasłuchuje na podanym porcie: netcat -l -p port

Wyświetla listę gniazd domenowych, które są używane w systemie oraz procesy z nich korzystające: lsof -U

Jeśli jakiś program potrzebuje plików nagłówkowych jądra (pluje błędem: Kernel Headers Not Found), to należy zainstalować następujący pakiet: sudo apt-get install linux-headers-amd64 (dla wersji 64-bitowej systemu)

Wypisuje obiekty oraz funkcje, które występują w podanej bibliotece statycznej: nm nazwa_biblioteki.a

Wypisanie bibliotek dzielonych wykorzystywanych przez podany program: ldd nazwa_programu

Wypisanie tych bibliotek dzielonych, z którymi program został zbudowany, których on nie wykorzystuje: ldd -u nazwa_programu

Skompilowanie i utworzenie obiektu dzielonego: gcc -shared -fpic -o mylib.so mylib1.c mylib2.c

Analiza pamięci wykorzystywanej przez dany program: valgrind --tool=memcheck ./nazwa_programu

Sprawdzenie programu pod kątem wycieków pamięci: valgrind --quiet --leak-check=full ./nazwa_programu

Analiza pamięci wykorzystanej przez poszczególne funkcje programu: valgrind --tool=massif ./nazwa_programu

Wyświetla informacje o wybranym oknie: xwininfo

Wyświetla zdarzenia X serwera: xev

Wyświetla wszystkie urządzenia wejściowe: xinput --list

Wyświetla właściwości urządzenia wejściowego o podanym numerze ID: xinput --list-props ID

Monitorowanie zdarzeń przekazywanych przez usługę D-Bus w trybie systemu: dbus-monitor --system

Monitorowanie zdarzeń przekazywanych przez usługę D-Bus w trybie sesji: dbus-monitor --session

Skanuje podany dysk w poszukiwaniu uszkodzonych sektorów: sudo badblocks -n /dev/sda

Wypisanie wszystkich bibliotek, których dane przechowuje program pkg-config: pkg-config --list-all

Jak sprawdzić podzespoły komputera:

Procesor: cat /proc/cpuinfo
Podzespoły: sudo dmidecode
sudo lshw sudo lshw -c display (tylko karty graficzne)

Przykładowe pliki wykorzystywane poniżej: ------------------------------------------------------------------------
hello.c
------------------------------------------------------------------------

#include <stdlib.h>
#include <stdio.h>

void message(void);

int main(void) {
    printf("Hello world\n");
    message();
    
    return 0;
}
------------------------------------------------------------------------
dynamic_library.c
------------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>

void message(void) {
    printf("Hello world from dynamic_library.so\n");
}
------------------------------------------------------------------------
------------------------------------------------------------------------

Kompilacja z wypisaniem szczegółowych informacji na temat kompilowanego i łączonego programu/biblioteki statycznej: gcc -v -o hello hello.c

Wypisanie zależności (wymaganych bibliotek) dla podanego programu/biblioteki: ldd hello

Wyróżniamy biblioteki statyczne i dynamiczne. Biblioteki statyczne (*.a) są archiwami ar, zawierającymi pliki obiektowe (*.o). Można je utworzyć tak: ar clq libname.a file1.o file2.o file3.o ...

Można je rozpakować poleceniem: ar x libname.a

Kompilator dołącza do programu tylko używane pliki obiektowe z tych bibliotek. Biblioteki dynamiczne (*.so) nie są dołączane do programu, ale są w całości ładowane do pamięci procesu w trakcie jego uruchamiania (jeszcze przed wywołaniem funkcji main). W programie znajdują się tylko informacje o danej bibliotece dynamicznej, po to aby można ją było załadować.
Bibliotekę dynamiczną kompilujemy poleceniem: gcc -shared -fpic -o libdynamic_library.so dynamic_library.c

Program kompilujemy z danymi bibliotekami wymieniając je w wierszu poleceń: gcc -o hello hello.c libname.a libdynamic_library.so lub tak: gcc -o hello hello.c -L ./ -lname -ldynamic_library

Skompilujmy teraz program hello.c z dołączoną biblioteką dynamiczną: gcc -shared -fpic -o libdynamic_library.so dynamic_library.c
gcc -o hello hello.c libdynamic_library.so

Teraz gdy uruchomimy ten program, to dostaniemy komunikat: ./hello: error while loading shared libraries: dynamic_library.so: cannot open shared object file: No such file or directory Aby móc uruchomić program, musimy podać ścieżkę do katalogu zawierającego naszą bibliotekę w zmiennej LD_LIBRARY_PATHstrong>, np.: LD_LIBRARY_PATH=. ./hello Można też przekopiować plik biblioteki do katalogu /usr/lib lub /usr/local/lib.
W systemie Ubuntu można też w katalogu /etc/ld.so.conf.d utworzyć plik mylibraries.conf i zapisać w nim ścieżkę do katalogu/ów zawierającego/zawierających nasze biblioteki (w jednej linii jeden katalog). Następnie żeby odświeżyć cache bibliotek wykonujemy polecenie: sudo ldconfig Uwaga, żeby to zadziałało nazwa pliku z biblioteką musi zaczynać się od przedrostka lib, np. libdynamic_library.

Wyświetlenie informacji o rozmiarach poszczególnych sekcji w pliku wykonywalnym elf, np.: size hello

Wypisanie symboli oraz ich rozmiaru w pliku obiektowym lub wykonalnym: nm -S hello

Wypisanie niezdefiniowanych symboli w podanym pliku obiektowym: nm -u hello.o

Usunięcie symboli z pliku biblioteki: strip --strip-debug libname

Usunięcie symboli z pliku wykonalnego: strip --strip-unneeded program

Wyświetla mapę pamięci podanego procesu: pmap PID

Plik Makefile.in jest odczytywany i przetwarzany przez skrypt configure w celu wygenerowania właściwego pliku Makefile.

Wyświetla kolejne polecenia pliku Makefile bez ich wykonywania: make -n

Włączenie generowania ostrzeżeń przez kompilator: CFLAGS=-Wall ./configure