├── README.md ├── docker └── commands.md ├── php └── changes.md ├── git └── commands.md └── linux └── commands.md /README.md: -------------------------------------------------------------------------------- 1 | # Zbiór przydatnych komend 2 | 3 | -------------------------------------------------------------------------------- /docker/commands.md: -------------------------------------------------------------------------------- 1 | ### Docker commands 2 | 3 | * **docker start {name}** - Start docker container 4 | * **docker start -i {name}** - Start docker container with execute information 5 | * **docker stop {name}** - Stop docker container 6 | * **docker restart {name}** - Restart docker container 7 | * **docker exec -it {name} {command}** - Execute command inside of container (/bin/bash | bash, phpunit, /usr/sbin/nginx, redis-cli) 8 | * **docker images** - Display all created images 9 | * **docker ps -a** - Display all containers (also exited) 10 | * **docker system df** - Show docker disk usage 11 | * **docker system info** - Display docker environment information 12 | * **docker system df --format "{{.Type}} {{.Size}}"** - Docker disk usage with filters (show type and size) 13 | * **docker build -t {image name} {docker conf file}** - Build image from docker configuration file 14 | * **docker rm {name/hash}** - Remove container (must be killed before) 15 | * **docker rmi {name/hash}** - Remove image (firs must be killed or removed container) 16 | * **docker run -id --name {container} {image}** - Create container from image 17 | * **docker history {image}** - Show image history 18 | * **docker run -id -v local/file:/container/file -p 3307:3306 --name {container} {image}** - Create container with file link and port forwarding 19 | * **docker network inspect {network name}** - Display information about docker internal network 20 | * **docker network inspect $(docker network ls -q)** - Information about all docker networks 21 | * **docker network ls** - List of docker networks 22 | * **docker logs {container}** - Display docker container logs (with `-f` live like tail -f) 23 | * **docker kill {container}** - Kill working container 24 | * **docker search {name}** - Search existing images on docker community 25 | * **docker stats** - Docker containers system resource usage (docker stats --no-stream - display only once) 26 | * **docker top {name}** - List of launched process inside of container 27 | * **docker inspect {name}** - Container details 28 | * **docker update {name} --restart always** - aktualizuje kontener i ustawia uruchamiania po każdym restarcie (`no` - wyłącza restart) 29 | * **docker run -it --name {nazwa kontenera} --rm --entrypoint /bin/bash {skrypt}** - ustawiamy własny entrypoint 30 | * **docker exec -i {nazwa kontenera} mysql -u {login} -p{hasło} {tabela} <<< "polecenie sql"** - bezpośrednie podanie polecenia sql do kontenera 31 | * **nohup docker exec -i {kontener} {polecenie} > {log} 2>&1 & echo $! > {pid}** - uruchamia proces w kontenerze, tak aby działał w tle i zapisuje id procesu do pliku 32 | * **docker volume ls** - lista volumenów 33 | * **docker volume rm {nazwa}** - kasowanie volumenów 34 | * **docker system prune** - 35 | 36 | ### Docker compose commands 37 | 38 | * **docker-compose top** - Display details of docker containers launched by docker compose (inside of docker env directory) 39 | * **docker-compose -f {config.yml} up -d** - Start docker containers defined in compose 40 | * **docker-compose build --verbose** - Build or rebuild containers 41 | * **docker-compose ps** - List of started by docker compose containers 42 | * **docker-compose -f {config.yml} up -d --build redis** - Build single container from docker compose 43 | 44 | ### Some useful commands usage 45 | 46 | * **docker cp {plik} {kontener}:{docelowa ścierzka}** - kopiuje plik do kontenera 47 | * **docker cp {kontener}:{plik} {docelowa ścierzka}** - kopiuje plik z kontenera 48 | * **-a** - zachowuje atrybuty 49 | * **docker rmi -f $(docker images | grep "" | awk "{print \$3}")** - remove broken images 50 | * **docker rmi $(docker images --filter "dangling=true" -q --no-trunc)** - remove unused images 51 | * __docker exec -it {container} mysql -u root --password=* -e "CREATE USER '{user_name}'@'%' IDENTIFIED BY '{pass};"__ 52 | * __docker exec -it {container} mysql -u root --password=* -e "GRANT ALL PRIVILEGES ON *.* TO '{user_name}'@'%' IDENTIFIED BY '{pass}' WITH GRANT OPTION;";__ 53 | 54 | ### Other 55 | 56 | * **screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty** - dostęp do virtualki z dockerem na macku 57 | * **Ctrl+a d** - wyjście 58 | * **docker rm $(docker ps -a -q)** - kasuje wszystkie kontenery 59 | * **docker volume rm $(docker volume list -q)** - kasuje wszystkie volumeny -------------------------------------------------------------------------------- /php/changes.md: -------------------------------------------------------------------------------- 1 | ## 5.4 2 | * **traits** 3 | * **short array syntax** - `$ar = []` 4 | * **function array dereferencing** - `foo()[0]` 5 | * **Closures support $this** - 6 | * **bar()` 8 | * **binary number format** - `0b001001101` 9 | * **file upload progress** 10 | * **CLI web server** - `php -S localhost:8000`, `php -S 0.0.0.0:8000` 11 | * **callable as typehint** - `foo(callable $var)` 12 | * **static function from expression** - `static function foo(){}; Class::{'foo'}()` 13 | 14 | ## 5.5 15 | * **Generators (yield)** - Generators provide an easy way to implement simple iterators without the overhead or complexity of implementing a class that implements the Iterator interface. 16 | * **finally** - `try{} catch {} finally {}` 17 | * **password_hash** - `password_hash($pass, $algorithm)` `hash_algos` - return list of available algorithms 18 | * **list in foreach** - `foreach ($array as list($a, $b)) {` 19 | * **empty() supports arbitrary expressions** - `empty(some_function())` 20 | * **array and string literal dereferencing** - `[1, 2, 3][0] -> 1`, `'PHP'[0] -> P` 21 | * **::class** - get class name `Namespace\SomeClass::class` 22 | * **OPcache** 23 | * **foreach now supports non-scalar keys** 24 | 25 | ## 5.6 26 | * **Constant expressions:** `const ONE = 1; const TWO = ONE * 2; const ARR = ['a', 'b'];` 27 | * **Variadic functions via ...:** function f($req, $opt = null, ...$params) { 28 | * **Argument unpacking via ...:** $operators = [2, 3]; echo add(1, ...$operators); 29 | * **Exponentiation via:** `printf("2 ** 3 == %d\n", 2 ** 3);` 30 | * **use function and use const:** namespace {use const Name\Space\FOO; use function Name\Space\f; 31 | * **phpdbg:** https://phpdbg.room11.org/introduction.html 32 | * **__debugInfo():** used on var_dump(). 33 | * **gost-crypto hash algorithm** 34 | * **pgsql async support** 35 | * **hash_equals() for timing attack safe string comparison:** 36 | ``` 37 | $expected = crypt('12345', '$2a$07$usesomesillystringforsalt$'); 38 | $correct = crypt('12345', '$2a$07$usesomesillystringforsalt$'); 39 | $incorrect = crypt('1234', '$2a$07$usesomesillystringforsalt$'); 40 | 41 | var_dump(hash_equals($expected, $correct)); 42 | var_dump(hash_equals($expected, $incorrect)); 43 | ``` 44 | 45 | ## 7.0 46 | * `declare(strict_types=1)` 47 | * `random_bytes(10);` 48 | * `random_int(2,10)` 49 | * **Scalar type hints:** `function add(int $a, int $b) {` 50 | * **Return type declarations:** `function add(int $a, int $b): int {` 51 | * **Anonymous classes:** `$foo = new class {` 52 | * **The Closure::call() method:** `$binding = $getFooCallback->bindTo(new Foo,'Foo');` 5 -> 7 `$getFooCallback->call(new Foo).PHP_EOL;` 53 | * **Generator delegation:** `yield from gen2();` 54 | * **Generator return expressions:** `$gen->getReturn()` 55 | * **The null coalesce operator:** `$message = $array['foo'] ?? 'not set';` 56 | * **The space ship operator:** `1 <=> 1` _(0 when both values are equal; -1 when the left value is less than the right value; 1 if the left value is greater than the right value)_ 57 | * **Throwables (errors as exceptions):** `ArithmeticError`, `AssertionError`, `DivisionByZeroError`, `ParseError`, `TypeError` 58 | * **Level support for the dirname() function:** `echo dirname('/usr/local/bin',3).PHP_EOL;` 59 | * **The Integer division function:** `(10/3)` 5 -> 7 `intdiv(10, 3)` 60 | * **Uniform variable syntax:** `${$foo['bar']['baz']}` 5 -> 7 `($$foo)['bar']['baz]`; `$foo->{$bar['baz']}` 5 -> 7`($foo->$bar)['baz']`; `$foo->{$bar['baz']}()` 5 -> 7 `($foo->$bar)['baz']()`; `Foo::{$bar['baz']}()` 5 -> 7 `(Foo::$bar)['baz']()` 61 | * **Constant arrays using define():** `define('ANIMALS', [])` 62 | * **Unicode codepoint escape syntax:** `echo "\u{9999}"` => `香` 63 | * **Filtered unserialize():** `unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]]);` 64 | * **IntlChar:** `echo IntlChar::charName('@')` => `COMMERCIAL AT`; `var_dump(IntlChar::ispunct('!'))` => `true`; `printf('%x', IntlChar::CODEPOINT_MAX)` => `10ffff` 65 | * **Expectations:** `ini_set('assert.exception', 1); assert(false, new CustomError('Some error message'))` 66 | * **Group use declarations:** `use some\namespace\{ClassA, ClassB, ClassC as C};` 67 | * **Session options:** `session_start(['cache_limiter' => 'private', 'read_and_close' => true,]);` 68 | * `preg_replace_callback_array()` 69 | * **list() can always unpack objects implementing ArrayAccess** 70 | * `(clone $foo)->bar()` 71 | 72 | ## 7.1 73 | * **Nullable types:** `function testReturn(): ?string` `function test(?string $name)` 74 | * **Void functions:** `function swap(&$left, &$right): void` 75 | * **Symmetric array destructuring:** `list($id1, $name1) = $data[0]` 5 -> 7 `[$id1, $name1] = $data[0]`; `foreach ($data as list($id, $name))` 5 -> 7 `foreach ($data as [$id, $name])` 76 | * **Class constant visibility:** `public const PUBLIC_CONST_B = 2;` 77 | * **iterable pseudo-type:** `function iterator(iterable $iter)` 78 | * **Multi catch exception handling:** `catch (FirstException | SecondException $e)` 79 | * **Support for keys in list():** `list("id" => $id1, "name" => $name1) = $data[0]` `["id" => $id1, "name" => $name1] = $data[0]` 80 | * **Support for negative string offsets:** `var_dump("abcdef"[-2]);` `var_dump(strpos("aabbcc", "b", -3));` 81 | * **Support for AEAD in ext/openssl** 82 | * **Convert callables to Closures with Closure::fromCallable():** `return Closure::fromCallable([$this, 'privateFunction']);` 83 | * **Asynchronous signal handling:** `pcntl_async_signals(true); pcntl_signal(SIGHUP, function($sig) {echo "SIGHUP\n";}); posix_kill(posix_getpid(), SIGHUP);` 84 | * **HTTP/2 server push support in ext/curl** 85 | * **Too few arguments exception:** `Fatal error: Uncaught ArgumentCountError: Too few arguments to function sayHello()` 86 | 87 | ## 7.2 88 | * **Object type:** `function test(object $obj) : object` 89 | * **Extension loading by name:** Shared extensions no longer require their file extension (.so for Unix or .dll for Windows) 90 | * **Abstract method overriding:** `abstract class A;` `abstract class B extends A` 91 | * **Password hashing with Argon2:** http://php.net/manual/en/ref.password.php; `password_hash('password', PASSWORD_ARGON2I);` 92 | * **Extended string types for PDO:** `$db->quote('über', PDO::PARAM_STR | PDO::PARAM_STR_NATL);` _ATTR_DEFAULT_STR_PARAM_ _PARAM_STR_CHAR_ 93 | * **Additional emulated prepares debugging information for PDO** 94 | * **Support for extended operations in LDAP** 95 | * **Address Information additions to the Sockets extension** 96 | * **Parameter type widening:** Parameter types from overridden methods and from interface implementations may now be omitted 97 | * **Allow a trailing comma for grouped namespaces:** `use Foo\Bar\{Foo, Bar, Baz,};` 98 | * **pack() and unpack() endian support** 99 | * **Enhancements to the EXIF extension** 100 | * **SQLite3 allows writing BLOBs** 101 | * **Oracle OCI8 Transparent Application Failover Callbacks** 102 | * **Enhancements to the ZIP extension:** The ZipArchive class now implements the Countable interface 103 | * **Casting array to object change:** `$array = ['foo','bar','sample_key' => 'baz']; $object = (object) $array; echo $object->0;` object to array `($object = new stdClass(); $object->{0} = 'foo';)` 104 | * **Output of json_decode for object as array:** `var_dump(json_decode($string, null, 512, JSON_OBJECT_AS_ARRAY));` 105 | 106 | ## 7.3 107 | * **Flexible Heredoc** - Allow to indent for end of herodoc 108 | * **Allow a trailing comma in function calls** - `function($param, $param2,)` 109 | * **JSON_THROW_ON_ERROR** - When passed to `json_decode/json_encode` allow to throw `JsonException` 110 | * **PCRE2 Migration** 111 | * **list() Reference Assignment** - `list($a, &$b) = $array;` 112 | * **is_countable** - Check is value will be acceptable by `count` function 113 | * **array_key_first(), array_key_last()** - Return first & last key of array 114 | * **Make compact function reports undefined passed variables** - $baz = compact('foz'); // Notice: compact(): Undefined variable: foz 115 | * **Argon2 Password Hash Enhancements** 116 | * **Deprecate and Remove image2wbmp()** 117 | * **Deprecate and Remove Case-Insensitive Constants** - all const must be upper case 118 | * **Same Site Cookie** 119 | 120 | ## 7.4 121 | * **Deprecate alternate access to array elements and chars in string** - unable to use `{}` to access char on string, or array element 122 | * **E_WARNING for invalid containers** - show warning when try to access not existing array key `$a=[1];var_dump($a[1])` 123 | * **Base Convert improvements** - Error on ignored characters & Allow negative arguments 124 | * **Numeric Literal Separator** - Allow to add separator into int val `$i=1_000_000_000`, `$i=135_00`, available for float, int, octal, hex, bin 125 | * **Allow throwing exceptions from __toString()** 126 | * **Spread Operator in Array Expression** - `$parts = ['apple', 'pear'];$fruits = ['banana', 'orange', ...$parts, 'watermelon'];` 127 | * **Deprecate left-associative ternary operator** 128 | * **Arrow Functions** - `function ($x) use ($arr) { return $arr[$x]; }` -> `fn($x) => $arr[$x]` 129 | * **Weak References** 130 | * **FFI - Foreign Function Interface** - allow to execute C language as script 131 | * **Typed Properties 2.0** - `class User { public int $id;}` 132 | * **Null Coalescing Assignment Operator** - `??=` operator, `$this->request->data['comments']['user_id'] ??= 'value';` 133 | * **Preloading (opcache.preload)** - Allow to preload PHP file to OPcache, before it execution 134 | * **Hash extension is always available** 135 | * **Password Hashing Registry** 136 | * **mb_str_split** 137 | * **Reflection for references** 138 | * **New custom object serialization mechanism** - `__serialize()` & `__unserialize(array $data)` methods 139 | * **Escape PDO "?" parameter placeholder** - `$pdo->prepare('SELECT * FROM tbl WHERE json_col ?? ?');` will be convert into `SELECT * FROM tbl WHERE json_col ? 'foo'` 140 | * **Covariant Returns and Contravariant Parameters** - Allow to override defined type in child by similar type 141 | ``` 142 | interface Factory { 143 | function make(): object; 144 | } 145 | 146 | class UserFactory implements Factory { 147 | function make(): User; 148 | } 149 | 150 | interface Concatable { 151 | function concat(Iterator $input); 152 | } 153 | 154 | class Collection implements Concatable { 155 | // accepts all iterables, not just Iterator 156 | function concat(iterable $input) {/* . . . */} 157 | } 158 | ``` 159 | -------------------------------------------------------------------------------- /git/commands.md: -------------------------------------------------------------------------------- 1 | # Przydatne polecenia GIT 2 | 3 | ## basics 4 | 5 | * **git init** - inicjalizuje repozytorium GIT w katalogu 6 | * **git clone {adres repozytorium}** - klonuje repozytorium do katalogu 7 | * **git status** - pokazuje status repozytorium (pokazuje informację o zmodyfikowanych, nowych, usuniętych oraz nie należące do repozytorium plikach) 8 | * **git add {ścierzka do pliku}** - dodaje plik do repozytorium (np. `git add folder/plik.php`) 9 | * **git add -A** - dodaje wszystkie nie należące do repozytorium pliki 10 | * **git config --global color.ui auto** - włącza koloryzowanie wyników w konsoli 11 | * **git config --global core.pager '{nazwa}'** - ustawia program do przeglądania logów (brak w konsoli) 12 | 13 | ## repo 14 | 15 | * **git fetch -p** - kasuje branche już nie istniejąca na głównym repo 16 | * **git fetch {nazwa remota}** - pobiera listę zmian z innego repozytorium (w tym pokazuje nowe gałęzie) 17 | * **git remote -v** - lista repo 18 | * **git remote remove {repo}** - usuwa wskazane repo 19 | * **git remote set-url {nazwa repo} {url}** - zmienia adres dla podanego repo 20 | * **git remote add {jakaś nazwa} {adres repozytorium}** - dodaje repozytorium innego użytkownika (`git remote add upstream https://github.com/bluetree-service/idylla.git`) 21 | * **git remote -v** lista wszystkich zewnetrznych repozytoriów 22 | * **git remote rm {nazwa dla remota}** - usuwa zewnętrzne repozytorium 23 | * **git pull** - pobiera zmiany z aktualnej gałęzi 24 | * **git pull {nazwa gałęzi}** - pobiera zmiany z wybranej gałęzi 25 | * **git pull {nazwa remota} {nazwa gałęzi}** - pobiera zmiany z wybranej gałęzi wybranego zewnętrznego repozytorium 26 | * **git pull --all --prune** - ściąga zmiany z repo + kasuje nieużywane branche 27 | * **git pull --tags** - ściąga tagi 28 | * **git push** - wypycha zmiany na aktualnie wybraną gałąź 29 | * **git push {nazwa gałęzi}** - wypycha zmiany na wskazaną gałąź 30 | * **git push {nazwa remota} {nazwa gałęzi}** - wypycha zmiany na gałąź wskazanego repozytorium 31 | * **git push --tags** - wysyła tagi na repo 32 | * **git revert -- {plik}** - revert pojedyńczego pliku 33 | * **git reset --soft HEAD^** - cofa zmiany bez usuwania dodanych plików 34 | * **git reset --soft {numer commita}** - cofa zmiany bez usuwania dodanych plików do wskazanego commita (`git reset --soft b87dcea`) 35 | * **git reset --hard {numer commita}** - cofa zmiany włącznie z usunięciem plików do wskazanego commita (`git reset --hard b87dced`) 36 | * **git reset --merge ORIG_HEAD** - resetuje zmiany z ostatniego merg-a 37 | * **git checkout -- {plik}** - przywraca oryginalny plik 38 | * **git checkout {commit} -- {plik}** - przywraca stan pliku ze wskazanego commita 39 | * **git ls-files** - lista plików z ich ścierzkami w repo (-md + zmodyfikowane i usunięte) 40 | * **git rm {plik}** - kasuje z repo plik 41 | * **git rm --cached (plik/katalog)** - usuwa plik/katalog z repozytorium, pozostawiając go na dysku 42 | **-r** - dla całych katalogów 43 | 44 | ## commit 45 | 46 | * **git commit** - tworzy commita z aktualnie zmienionych plików 47 | * **git commit -m "wiadomosc"** - tworzy commmita z podaną w cudzysłowach wiadomością 48 | * **git commit --amend -m "{wiadomość}"** - umożliwia zmianę ostatniego commita 49 | * **git commit --amend -m "dsfsdf"** - modyfikuje komentarz ostatniego commita 50 | * **git commit --date="2017-08-18T13:23:41" -m ""** - comit ze wskazaną datą 51 | * **git commit -n** - pomija git hooks 52 | * **git revert {numer commita}** - tworzy nowego commita z cofnięciem zmian ze wskazanego commita 53 | * **git amend** - zmienia poprzedniego commita 54 | * **git shortlog -sn** - ile commitów zrobionych przez userów 55 | 56 | ## log 57 | 58 | * **git log** - wyświetla listę commitów (od najnowszego) 59 | * **git log -{numer}** wyświetla podaną liczbę ostatnich commitów 60 | * **git log --oneline** - wyświetla commity w postaci skróconej 61 | * **git log -{numer} --oneline** wyświetla podaną liczbę ostatnich commitów w postaci skróconej 62 | * **git log --graph --decorate --oneline** - pokazuje graficzny obraz zmian 63 | * **git log --author={nazwa użytkownika}** - pokazuje commity danego użytkownika 64 | * **git shortlog** - lista commitów użytkowników 65 | * **git shortlog -s -n** - lista użytkowników repozytorium 66 | * **git llog --after=2016-08-16 --before=2016-08-30** - commity z podanego zakresu (--until starsze od podanej daty, --since z pred podanej daty) 67 | * **git log --name-status** - podaje statuz zmian przy nazwie pliku (add, mod, delete) 68 | * **git log --stat** - + statystyki zmian w plikach (--shortstat bez ++++---) 69 | * **git log {commit1}..{commit} --no-merges** - pokazuje zmiany pomiędzy 2 commitami bez info o mergach 70 | * **git log -- {plik/katalog}** - log dla pojedyńczego pliku lub wszystkich plików z katalogu 71 | * **git log -5 --pretty=tformat: --numstat** - satystyki zmian w 5 commitach 72 | * **git log --no-merges --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=iso** - 73 | * __git log --pretty=format:'* %s (%an)' -n 10__ - pokazuje tylko nazwy commitów 74 | * **git log --pretty=oneline -15 | awk '{print $2}' | sort | uniq | grep -i {ticket} | sed 's/\[\(.*\)\]/\1/g'** - pokaże tylko nazwy ticketów (gdy message zgody z formatem [NAME-111] some message) 75 | * **git log --grep {nazwa}** - szuka commita zawierającego podany tekst 76 | * **git log --author={autor} --name-only** - pokazuje commity wykonane przez autora wraz ze zmodyfikowanymi plikami 77 | * **git log master..develop** - pokazuje różnicę między branchami 78 | * **git log --pretty=format:'%Cred%h%Creset %C(bold blue)<%an>%Creset%C(yellow)%d%Creset %Cgreen(%cr)%Creset%n%w(80,8,8)%s' --graph** - drzewko logów 79 | * **git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=iso** - pokazuje logi (hash, data+czas, autor, opis) 80 | * **log --pretty=format:'%C(yellow)%p..%h %C(white dim)%cd %<|(49,trunc)%an %C(reset)%s' --date=short --abbrev=8 --no-merges** - logi z zakresem branchy 81 | * **git log --oneline {branch1} --not {branch2}** - pokazuje różnice w commitach między branchami (branche których brakuje w branch2 a są w branch1) 82 | * **git log --oneline --grep {branch} --name-only | grep -v {branch} | sort | uniq** - pokazuje tylko zmienione pliki dla podanego brancha 83 | 84 | ## merge 85 | 86 | * **git merge {nazwa gałęzi}** - dołączenie zmian ze wskazanej gałęzi 87 | * **git merge {nazwa remota}/{nazwa gałęzi}** - dołączenie zmian ze wskazanego remota i gałęzi 88 | * **git merge --abort** - przerywa łączenie (możliwe, gdy wystąpią konflikty) 89 | * **git merge --continue** - po rozwiązaniu konfliktów zapisuje zmiany 90 | * **git merge --revert** - cofa wszystkie wprowadzone zmiany 91 | 92 | ## rebase 93 | 94 | * **git rebase {nazwa gałęzi}** - dołączenie zmian ze wskazanej gałęzi z zachowaniem kolejności wprowadzania zmian 95 | * **git rebase {nazwa remota}/{nazwa gałęzi}** - dołączenie zmian ze wskazanego repozytorium i gałęzi z zachowaniem kolejności wprowadzania zmian 96 | * **git rebase --abort** - przerywa łączenie (możliwe, gdy wystąpią konflikty) 97 | * **git rebase --continue** - po rozwiązaniu konflitów zapisuje zmiany 98 | * **git rebase --interactive {commit}** - pozwala wybrać commity które zostaną dołączone (lub modyfikować) 99 | * **git rebase --interactive '{hash}^'** - umożliwia edycję commitów do podanego hasha 100 | 101 | ## diff 102 | 103 | * **git diff --name-only {gałąź 1} {gałąź 2}** - porównanie dwóch gałęzi 104 | * **git diff --cached** - pokazuje wszystkie gotowe do commitu zmiany 105 | * **git diff --cached | grep -wi {fraza}** - szuka podanej frazy w commicie 106 | * **git diff --cached | grep -wiHn -C 10 {fraza}** - jw ale pokazuje 10 lini przed i po znalezieniu + numery linni i nazwę pliku 107 | * **git diff --name-only HEAD HEAD~14** - pokazuje zmieniony pliki z 14 ostatnich commitów 108 | * **git diff {commit1}..{commit2}** - pokazuje różnicę między 2 commitami 109 | * **git diff {commit1}..{commit2} {plik}** - pokazuje różnicę między 2 commitami dla podanego pliku 110 | * **git diff {commit} -- plik** - pokazuje zmiany w pliku od podanego commita 111 | * **git diff-index --name-only --cached --diff-filter=ACMR HEAD** 112 | * **git diff {commit}** - różnica od podanego commita 113 | * **git diff {gałąź 1} {gałąź 2} -- {plik}** - dif dla pojedynczego pliku między gałęziami 114 | * **git diff {plik}** - pokazuje zmiany dokonane na pliku (nie zacommitowane) 115 | * **git diff .** - pokazuje zmiany dokonane na wszystkich zmienionych plikach 116 | * **--color-words** - pokaże bez +/- 117 | * **git diff -p -R --no-color | grep -E "^(diff|(old|new) mode)" --color=never | git apply** - resetuje zmiany w atrybutach plików 118 | 119 | ## show 120 | 121 | * **git show {commit}** - szczegóły podanego commita 122 | * **git show --name-only {commit}** - nazwy zmodyfikowanych plików w commicie 123 | * **git show --name-only {commit}** - pokazuje tylko listę zmodyfikowanych plików z commita 124 | * **git show {commit}** - pokazuje zmiany w commicie 125 | * **git show HEAD:{plik}** - pokazuje zmiany tylko w konkretnym pliku 126 | * **git show {commit} --name-only -p -5** - pokazuje 5 poprzednich comitów od podanego 127 | * **--color-words** - pokaże bez +/- 128 | 129 | ## branch 130 | 131 | * **git branch** - lista gałęzi w repozytorium 132 | * **git branch -a** - pokazuje listę wszystkich gałęzi (łącznie z tymi z repo, same z repo `-r`) 133 | * **-r** - tylko gałęzie zdalne 134 | * **git branch -d {nazwa gałęzi}** - usuwa wskazaną gałąź 135 | * **git branch --merged** - lista zmergowanych branchy 136 | * **git branch --merged | git branch -d** - kasuje wszystkie zmergowane branche 137 | * **git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d** - kasuje wszystkie nie używane/ nie istniejące branche 138 | * **git branch rename {1} {2}** - zmiana nazwy brancha 139 | * **git branch | grep -v "master" | xargs git branch -D** - kasuje wszystkie branche z wyjątkiem mastera 140 | * **git checkout {nazwa gałęzi}** - przełącza na podaną gałąź 141 | * **git checkout -b {nazwa gałęzi}** - tworzy nową gałąź o podanej nazwie i automatycznie przełącza się na niego 142 | * **git checkout -b {nazwa gałęzi} {nazwa remota}/{nazwa gałęzi}** - tworzy nową gałąź o podanej nazwie, pobiera zmiany ze wskazanego repozytorium i gałęzi i automatycznie przełącza się na niego 143 | * **git checkout {nazwa pliku}** - cofa zmiany na podanym pliku 144 | * **git branch rename {stara nazwa} {nowa nazwa}** - zmiana nazwy brancha 145 | * **git branch -m {stara nazwa} {nowa nazwa}** - zmiana nazwy brancha 146 | 147 | ## stash 148 | 149 | * **git stash** - zapisuje nowe i zmodyfikowane pliki do pamięci podręcznej 150 | * **git stash pop** - przywraca zapisane pliki z pamięci podręcznej 151 | * **git stash pop --index 1** 152 | * **git stash pop --index 454aa619** 153 | * **git stash pop --index stash@{1}** 154 | * **git stash pop 1** 155 | * **git stash pop 454aa619** 156 | * **git stash pop stash@{1}** 157 | * **git stash save "{tekst komentarza}"** - zapisuje stash z komentarzem 158 | * **git stash show stash@{1}**- pokazuje zachowane zmiany 159 | * **git stash list** - lista zachowanych zmian 160 | * **git stash branch {name}** - stworzy nową gałąź, pobierze ostatnią wersję plików 161 | * **git stash push -m {message} {plik}** - stashuje z komentarzem wskazany plik 162 | 163 | ## tag 164 | 165 | * **git tag -l** - lista tagów 166 | * **git tag -a {} -m '{}'** - 167 | * **git tag --sort=v:refname | tail -2 | xargs printf \"%s..%s\" | xargs git log --no-merges --pretty=format:%s** - wyświetla wszystkie commity między 2 ostatnimi tagami (| grep -o "SOC-[0-9]*" | sort --unique** - tickety) 168 | * **git tag -l "{pattern}"** - lista tagów pasująca do wzorca 169 | * **git tag -d {tag} && git push origin :refs/tags/{tag}** - kasuje taga lokalnie + repo 170 | * **git lasttag** - pokazuje ostatniego taga 171 | 172 | ## Inne 173 | 174 | * **git reset --soft HEAD~3**; __git commit -m__ - pozwala na cofnięcie się 3 commity do tyłu, i połączenie ich w jeden (git commit --amend) 175 | * **git rebase -i {commit}** - j/w ale commity wybierane ręcznie 176 | * **git log -i -1 --pretty="format::%an <%ae>\n" --author="$1"** - info o userze 177 | * **git show -s --pretty='tformat::%h (%s, %ad)' --date=short** - info o branchu 178 | * **git log -a --pretty=oneline | wc -l** - ilość commitów 179 | * **git fetch && git log --oneline HEAD..origin/$1** - ostatnie zmiany na podanym branchu 180 | * **git shortlog HEAD..origin/$0** - kto ostatnio robił zmiany i jakie 181 | * **for branch in `git branch -r | grep -v HEAD`;do echo `git show -s --format=\"%Cred%ci %C(green)%h %C(yellow)%cr %C(magenta)%an %C(blue)\" $branch | head -n 1` \\\t$branch; done | sort -r** - jakie branche sa na orginie, jak dawno i kto je tworzył 182 | 183 | ### Extra 184 | 185 | [wiele przydatnych aliasów](https://github.com/jakubnabrdalik/gitkurwa) 186 | -------------------------------------------------------------------------------- /linux/commands.md: -------------------------------------------------------------------------------- 1 | # Polecenia konsoli Linux 2 | 3 | ## Operacje na plikach i katalogach 4 | * **pwd** - aktualny katalog 5 | * **ls -la** - listuje wszystkie dostępne pliki 6 | * **ls -lat** - listuje wszystkie dostępne pliki posortowane według czasu modyfikacji 7 | * **cp -r {nazwa pliku/katalogu} {miejsce docelowe}** - kopiuje plik lub cały katalog z zawartością we wskazane miejsce 8 | * **mv {nazwa pliku/katalogu} {miejsce docelowe}** - przenosi plik lub cały katalog z zawartością we wskazane miejsce (jeśli lokalizacja pliku docelowego jest taka sama jak pliku do przeniesienia, zmienia nazwę) 9 | * **du -sh** - pokazuje zajętość całego katalogu 10 | * __du -sh *__ - pokazuje rozmiar poszczególnych plików i katalogów 11 | * __du -sh \`ls -A\`__ - pokazuje rozmiar wszystkich (w tym ukrytych) plików i katalogów (można też użyć `$(ls -A)`) 12 | * __du -sh .[!.]*__ - jak powyżej 13 | * __du -hs .[^.]*__ - pokazuje rozmiar wszystkich ukrytych plików 14 | * **du -ah** - pokazuje zajętość wszystkich plików w katalogu 15 | * **-c** - podsumowanie na końcu 16 | * **--max-depth=1** - maksymalne zagnieżdżenie 17 | * **-d1** - maksymalne zagnieżdżenie 18 | * **--exclude="{nazwa}"** - bez 19 | * __ls -ld .*__ - wyświetla wszystkie ukryte pliki i katalogi 20 | * **ls -li /etc | sort -n** - sortuje listę plików względem ich węzłów 21 | * **df -h** - pokazuje zajętość wszystkich dysków 22 | * **df -a** - pokazuje zajętość wszystkich urządzeń 23 | * **df -hT** - pokazuje zajętość punktu montowania wraz z systemem plików 24 | * **df -hi** - pokazuje informacje o inodach dla punktów montowania 25 | * **-k -m -g** - pokazuje rozmiary w odpowiednim formacie (kilobajty, megabajty, gigabajty) 26 | * **pydf** - pythonowa wersja _df_ 27 | * **chmod 0755 {nazwa pliku/katalogu}** - zmiana praw dostępu (4-read, 2-write, 1-execute) 28 | * **chmod ugo-x {nazwa pliku/katalogu}** - odbiera prawa wykonywania wszystkim użytkownikom (user, group, other) 29 | * **chmod g=-w;o=-w {plik}** 30 | * **chmod go=-w {plik}** 31 | * **chmod u+x {plik}** 32 | * **u+s** - ustawia setuid _(lub chmod 4755 -> rwsr-xr-x)_ 33 | * **g+s** - ustawia setgid _(lub chmod 2644 -> rw-r-s-r--)_ 34 | * **o+t** - ustawia sticky _(lub chmod 1777 -> rwxrwxrwt)_ 35 | * **chown user:group {nazwa pliku/katalogu}** - właściciela i grupy 36 | * **ls | wc -l** - liczba plików i katalogów w aktualnym katalogu 37 | * **tree** - drzewo katalogów i plików 38 | * **tree -ugphD** - drzewo katalogów i plików wraz z informacjami o plikach i katalogach 39 | * **find {ścieżka} -iname {nazwa pliku}** - szuka podanego pliku bez uwzględnienia wielkości liter 40 | * **find {ścieżka} -regex {regex}** - szuka podanego pliku używając wyrażeń regularnych 41 | * **-regex {regex}** - sprawdza ścieżkę pod względem regex 42 | * **-iregex {regex}** - to samo ale bez uwzględniania wielkości liter 43 | * **find -E {ścieżka} -regex {regex}** - szuka podanego pliku używając rozszerzonych wyrażeń regularnych 44 | * **find -size +100M** - szuka plików powyżej 100mb 45 | * **find / {pattern}** - wyszukuja podanego wzorca w głównym katalogu i podkatalogach 46 | * __find . -maxdepth 1 -name '*.json' -delete__ - usuwa dużą ilość plików z rozszerzeniem `*.json` 47 | * **find . -name "_*" -mtime +14 -exec /bin/rm -f {}** - kasuje pliki starsze niż 14 dni 48 | * **find . -type f -ctime -2 -print0** - pokazuje pliki utworzone w ciągu 2 dni i wyświetla jako linia (+1 starsze niz 2 dni) 49 | * **f** - plik 50 | * **d** - katalog 51 | * **c** - specjalny plik znakowy 52 | * **p** - plik fifo (named pipe) 53 | * **l** - link 54 | * **s** - socket 55 | * **L** - sprawdza plik a nie link 56 | * **-user** - użytkownik (-group) 57 | * **-atime -mtime -ctime** - czasy modyfikacjo, dostępu etc 58 | * **find {dir} -type f -mtime +10 -exec rm {} \;** - kasuje pliki starsze niż 10 dni (rm {} - nawiasy zastępowane nazwą pliku) 59 | * **find . -cmin -5** - znajduje pliki utworzone w przeciągu 5 min 60 | * **find {katalog}/ -size +1G -exec bash -c "ls -lh '{}'" \;** - wyszukuje pliki większe niż 1GB i listuje je w outpucie 61 | * **find {dir} -type d -exec sh -c '{program} $0/*' {} \; - wykonuje program dla wszystkich plików w katalogu 62 | * **-ok rm {} \;** - pyta czy usunąć plik 63 | * **find . -inum {węzeł} -ok rm {} \;** - kasowanie pliku z uszkodzoną nazwą (`ls -i` - zwróci numer węzła pliku) 64 | * **find / –perm –4000** - znajduje pliki z ustawionym _setuid_ 65 | * **find . -type l ! -exec test -e {} \; -print** - wyszukuje zepsute symlinki 66 | * **find . -type l ! -exec test -e {} \; -print0 | xargs -0 rm** - wyszukuje i automatycznie kasuje zepsute symlinki 67 | * **cksum {nazwa pliku}** - pokazuje sumę kontrolną CRC i rozmiar pliku 68 | * **ln -s {cel} {nazwa}** - tworzy link do pliku lub katalogu 69 | * **"$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")"** - zwraca ścieżkę w której znajduje się uruchomiony skrypt 70 | * **ls -R | sort -R | tail -1** - wybiera losowy katalog lub plik z drzewa katalogu 71 | * **rename -v 's/\.pdf$/\.doc/' *.pdf** - zmienia nazwy wszystkich plików *.pdf 72 | * **(cd /{some}/{dir}/ && ls -l)** - zmienia katalog, wykonuje komendę i powraca do aktualnego katalogu 73 | * **chgrp** - zmienia grupę dla plików/katalogów 74 | * **echo {pliki/katalogi} | xargs -n 1 cp -vr {katalog}** - kopiuje pliki/katalogi do katalogu (-n ile przyjmuje argumentów, 1-każdy element z echo) 75 | * **lsattr {plik/katalog}** - lista rozszerzonych atrybutów (tylko partycje ext) (chattr - ustawia atrybut) 76 | * **chattr {plik/katalog}** - ustawia rozszerzone atrybuty 77 | * **+i** - plik jest zablokowany przed zamianami (-i zdejmuje blokadę) 78 | * **-R** - rekursywnie dla katalogu 79 | * **find . -maxdepth 1 -type d \( ! -name . \) -exec bash -c "cd '{}' && {polecenie}" \;** - wykonuje polecenie w każdym podkatalogu obecnej lokalizacji 80 | * **ls -1 | grep -Z -v '{regex}' | while read f; do mv "$f" {katalog docelowy}; done** - przenosi znalezione pliki do katalogu docelowego 81 | * **exa -1** 82 | * **basename {pełna ścieżka do pliku}** - zwraca nazwę pliku z podanej ścieżki 83 | * **{ścieżka} {rozszerzenie}** - zwraca tylko nazwę pliku bez rozszerzenia 84 | * **dirname {plik}** - zwraca ścieżkę do pliku 85 | * **umask xxx** - ustawia domyślne uprawnienia dla nowych plików 86 | 87 | ### Pliki 88 | * **cat {plik 1} {plik 2} {plik n} >> {plik docelowy}** - dodaje content z plików 1, 2 i 3 do pliku docelowego 89 | * __cat {prefix}* >> {plik docelowy}__ - łączy pliki z podanym prefixem w jeden (np `cat baza_*.sql >> baza.sql`) 90 | * **split -v 5M {plik} {prefix}** - dzieli podany plik na części po 5MB i dodaje prefix 91 | * **split -l 1000** - dzieli po 1000 linii 92 | * **split -b 1000** - dzieli po 1000 bajtw (b|k|m) 93 | * **split -`expr \`wc -l {plik} | awk '{print $1}'\` /$k` {plik} {prefix}** - dzieli plik na $k równych części 94 | * **csplit -k {plik} 100 {99}** - dzieli plik na części po 100 linii (ostatnia może być dłuższa) 95 | * **nl {nazwa pliku}** - pokazuje zawartość pliku wraz numerami linii 96 | * **dd** - kopiowanie pliku wraz z konwersją typu (dd if=/home/user/Downloads/debian.iso of=/dev/sdb1 bs=512M; sync) 97 | * **dd id=/dev/device of=~/device.img** - kopiuje każdy bajt z urządzenia device do pliku 98 | * **conv=noerror,syn** - uszkodzone dane zastępuje nullem 99 | * **rm {nazwa pliku}** - kasuje plik 100 | * **touch {nazwa pliku}** - tworzy pusty plik 101 | * **ls -la | grep ^- | wc -l** - pokazuje liczbę plików w katalogu (-lar - + podkatalogi) 102 | * **mv \`ls | head -n 2000\` test/** - przenosi 2000 plików do katalogu test 103 | * **less** - wyświetla zawartość pliku (podobne: `more`) 104 | * **less {plik} | grep "wyrażenie regularne"** - szuka w wybranym pliku podanej wartości 105 | * **tail -f {nazwa pliku}** - pokazuje zmiany na żywo w podanym pliku 106 | * **tail -2 {plik}** - wyświetla 2 ostatnie linie w pliku 107 | * **-c5** - 5 ostatnich bajtów 108 | * **stat {nawza pliku}** - rozszerzone informacje o pliku 109 | * **-f** - status systemowy 110 | * **--printf='%U\n%G\n%C\n%z\n'** - zmiana formatu (%U – user name of owner %G – group name of owner %C – SELinux security context string %z – time of last status change, human-readable %n – shows the file name %a – print free blocks available to non-superuser %b – outputs total data blocks in file system) 111 | * **file {nazwa pliku}** - pokazuje typ pliku i kodowanie 112 | * **-i** - uproszczona informacja 113 | * **-f {plik źródłowy}** - informacje o plikach z pliku źródłowego 114 | * **-z {plik}** - ze skompresowanego pliku 115 | * **head -2 {plik}** - pokazuje 2 wiersze z podanego pliku 116 | * **head -c5 {plik}** - wyświetli 5 pierwszych bajtów 117 | * **md5sum {plik}** - oblicza sumę md5 118 | * **sha1sum {plik}** oblicza sumę sha1 119 | * **wc -l {plik}** - liczba linii w pliku 120 | * **find . -type f | wc -l** - liczba samych plików w katalogu 121 | * __grep -ri "{pattern}" /jakiś/katalog/*__ - wyszukuje podany pattern we wszystkich plikach w katalogu i podkatalogach, bez względu na wielkość liter 122 | * **grep –color -rw "{pattern}" .** - szuka tylko całych słów, zwraca pokolorowany otput 123 | * **grep -c "{pattern}" .** - zwraca ilość znalezionych wzorców w plikach 124 | * **grep -v "{pattern}" .** - zwraca wszystko z pominięciem wzorca 125 | * **grep -v "^git\|docker"** 126 | * **grep -C 2 {pattern}** - zwraca 2 linie otaczające znaleziony fragment (2 z góry i 2 z dołu) 127 | * **grep --include={plik} -A 1 -rn {ścieżka} -e {wzorzec}** - szuka wzorca w ścieżce i podanym pliku, wyświetla ścieżkę, numer linii + linia poniżej znalezionej 128 | * **grep -o {wzorzec} {plik} | sort --unique | wc -l** - ilość unikalnych wystąpień wzorca 129 | * **grep -o {wzorzec} {plik} | sort | uniq -c** - pokazuje posortowane wzorce + ilość ich wystąpień 130 | * **grep -o -P '.{0,3}string.{0,4}'** - 131 | * **grep -rcw** - szuka rekursywnie wzorca w postaci całych słów i wyświetla tylko ilość znalezionych 132 | * **-E** - rozszerzony regexp 133 | * **-h** - bez nazw plików 134 | * **-l** - pokazuje tylko nazwy plików z wzorcem 135 | * **-L** - pokazuje tylko nazwy plików bez wzorca 136 | * **-i** - bez sprawdzania wielkości liter 137 | * **-o** - tylko dopasowany wzorzec 138 | * **-P** - perl regexp 139 | * **diff {plik1} {plik2}** - porównuje ze sobą 2 pliki 140 | * **-y** - pokazuje w kolumnach (2 pliki, 2 kolumny) 141 | * **-a** - traktuja jako tekst 142 | * **-n** - format rcs 143 | * **-w** - ignoruje biale spacje 144 | * **diff <(sed -n '1p' {plik}) <(sed -n '1p' {plik})** 145 | * **diff -Nyrw dir1 dir2** - pokazuje różnice w plikach między dwoma katalogami 146 | * **--color** - koloryzuje output 147 | * **-s** - podaje tylko info czy pliki się różnią 148 | * **-i** - nie rozróżnia wielkości znaków 149 | * **-u** - output podobny do git-a 150 | * **find {pattern} | xargs rm** - szuka plików i kasuje wszystkie znalezione 151 | * **ls -laR | grep ^- | wc -l** - zlicza ilość plików w katalogu i podkatalogach 152 | * **find . -type f | sort -R | tail -1** - wyszukuje losowy plik 153 | * **locate {file}** - znajduje wszystkie pliki o podanej nazwie 154 | * **-i** - ignoruje wielkość znaków 155 | * **-r {expression}** - szuka używając regex 156 | * **cmp {plik1} {plik2}** - pokazuje różnicę między plikami 157 | * **cmp --verbose {pliki}** - pokazuje kody różnic (bajt różnicy, kod znaku 1, kod znaku 2) 158 | * **cmp -bl <(sed -n '1p' {plik}) <(sed -n '1p' {plik})** - porównuje pierwsze linie z plików 159 | * **lsof** - pokazuje wszystkie otwarte pliki 160 | * **lsof -p {pid}** - pliki otwarte przez podany proces 161 | * **fdupes -rnS {dir} >> duplicated** - znajduje i zapisuje do pliku listę zduplikowanych plików 162 | * **qemu-img convert -f raw -O qcow2 image.img image.qcow2** - konwertuje pliki obrazów (np VM) 163 | * **foremost -v -i {image} -o {out}** - odzyskiwanie skasowanych plików z obrazu do katalogu out 164 | * **flock -xn {test.lock} -c "{script}"** - uruchamia skrypt i ustawia locka na pliku {test.lock}, do zakończenia nie da się ponownie uruchomić 165 | * **echo '{string}' | cat - {plik} > temp && mv temp {plik}** - dodaje string na początek pliku 166 | * **cat << EOF > {plik}** - uruchamia wpisywanie danych do pliku, linie oddzielone enterem 167 | * **EOF** - kończy wpisywanie do pliku 168 | * **uuencode {plik} > {plik ze stringiem}** - konwertuje blik binarny na wartość tekstową (`uudecode` - proces odwrotny) 169 | * **find {katalog} -type f -exec du -sh {} + | sort -rh | head -n 5** - znajduje 5 największych plików w katalogu 170 | * **... -type f -printf "%s %p\n" ...** 171 | * **expand -t 4 {input} > {output}** - zmienia taby na 4 spacje w pliku input i zapisuje do output (-i - tylko początkowe taby) 172 | * **bat** - rozszerzona wersja cat-a 173 | * **A** - pokazuje niedrukowane znaki 174 | * **** - 175 | 176 | ### Media 177 | * **identify -format '%Q' {plik}** - zwraca informacje na temat kompresji 178 | * **convert -quality 70 {źródło} {cel}** - zmienia stopień kompresji pliku np jpg 179 | * **identify -verbose {img}** - odczytuje metadane z obrazu 180 | * **exiftool {img}** - jw 181 | 182 | ### Katalogi 183 | * **rm -fr {nazwa katalogu lub pliku}** - umożliwia kasowanie katalogu i zawartości wraz z wymuszeniem 184 | * **mkdir {nazwa pliku}** - tworzy katalog (`mkdir {katalog} && cd {katalog}` - po utworzeniu od razu otwiera katalog) 185 | * **touch {nazwa pliku}** - tworzy pusty plik 186 | * **ls -la | grep ^- | wc -l** - pokazuje liczbę plików w katalogu 187 | * **mv \`ls | head -n 2000\` test/** 188 | * **du -sckx * | sort -nr** - sortuje katalogi według rozmiaru 189 | * **cd -** - powraca do poprzedniego katalogu (przed wykonaniem polecenia `cd {katalog}`) 190 | * **watch "ls -lrt | tail -10"** - obserwowanie zmian na katalogu 191 | * **mkdir -p ~/katalog/{bin,src,pkg}** - tworzy katalog i w nim bin, src, pkg na tym samym poziomie 192 | * **take ~/katalog/{bin,src,pkg}** - j/w 193 | 194 | ### Archiwa 195 | * **tar -xvzf {nazwa pliku}** - rozpakowuje archiwum `*.tar.gz` 196 | * **tar -cvzf {nazwa archiwum} {nazwa pliku/katalogu}** - archiwizuje wskazany plik/katalog do podanego pliku jako `tar.gz` 197 | * **tar -tvf {nazwa archiwum}** - lista zarchiwizowanych elementów 198 | * **-cvf** - bez kompresji 199 | * **gzip {nazwa}** - kompresuje pliki jako `.gz` 200 | * **gunzip {nazwa}** - rozpakowuje archiwum `*.gz` 201 | * **zip -r0 {plik.zip} {katalog}** - zapisuje zawartość katalogu do pliku `zip` bez kompresji 202 | 203 | --- 204 | 205 | ## Użytkownicy 206 | * **last** - pokazuje listę ostatnich logowań użytkowników (-n {liczba}) 207 | * **whoami** - podaje nazwę aktualnego użytkownika 208 | * **users** - zalogowani użytkownicy 209 | * **users | wc -w** - liczba zalogowanych użytkowników 210 | * **id** - pokazuje id użytkownika, grupy, oraz do jakich grup należy 211 | * **-u** - id usera 212 | * **-g** - id grupy 213 | * **-G** - wszystkie grupy usera 214 | * **sudo su - {nazwa użytkownika}** - przełącza na konto innego użytkownika 215 | * **groups** - pokazuje grupy do których należy użytkownik 216 | * **groups {user}** - pokazuje grupy do których należy podany użytkownik 217 | * **w** - pokazuje kto jest zalogowany i co robi 218 | * **who** - pokazuje kto jest zalogowany 219 | * **wall {wiadomość}** - wysyła wiadomość do użytkowników 220 | * **mesg** - status wyświetlania wiadomości w terminalu (mesg y - włącza, mesg n - wyłącza) 221 | * **write {użytkownik}** - włącza tryb pisania wiadomości do użytkownika 222 | * **passwd** - zmiana własnego hasła 223 | * **-l** - blokuje użytkownika 224 | * **-u** - odblokowuje użytkownika 225 | * **adduser {user} {grupa}** - dodaje nowego użytkownika 226 | * **useradd {user}** - dodaje nowego użytkownika 227 | * **useradd -g {grupa} -G {dodanie do grupy} -u {id} {nazwa}** - dodaje usera i grupę, ze wskazanym id usera 228 | * **userdel {nazwa}** - usuwa użytkownika 229 | * **addgroup {nazwa}** - dodaje grupę 230 | * **groupadd {nazwa}** - dodaje grupę 231 | * **groupdel {nazwa}** - usuwa grupę 232 | * **sudo runuser -l {nazwa użytkownika} -c '{polecenie}'** - uruchamia poprzez innego użytkownika {polecenie} 233 | * **sudo su - {nazwa użytkownika} -c "{polecenie}"** - jak powyżej 234 | * **su - {user}** - przełącza usera 235 | * **usermod** - modyfikuje ustawienia użytkownika 236 | * **-u {id} {user}** - zmienia id usera 237 | * **-aG {grupa} {user}** - dodaje usera do grupy 238 | * **-L** - blokuje użytkownika 239 | * **-U** - odblokowuje użytkownika 240 | * **--expiredate 1970-01-02** - data wygaśnięcia hasła 241 | * **-d {dir}** - ustawia katalog dla użytkownika 242 | * **gpasswd -a {user} {grupa}** - dodaje usera do grupy 243 | * **htpasswd {user} {pass}** - tworzy plik htpasswd (-c nowy plik o wskazanej nazwie)*-+++++++++++++++++++++++++++++++++ 244 | * **groupmod -g {id} {grupa}** - zmienia id grupy 245 | * **find / -group {id} -exec chgrp -h {user} {} \ || true** - szuka plikw z podanym id usera i zmienia im usera; 246 | * **find / -user {id} -exec chown -h {grupa} {} \ || true** - szuka plikw z podanym id grupy i zmienia im grupę; 247 | * **usermod --shell /usr/bin/zsh {user}** - zmiana shella 248 | * **chsh -s /usr/bin/zsh** 249 | * **chsh --shell /bin/sh** 250 | 251 | --- 252 | ## Data i czas 253 | * **cal** - pokazuje kalendarz aktualnego miesiąca 254 | * **date** - pokazuje aktualną datę 255 | * **date +"%T : %Y"** - pokazuje datę w formacie *HH:MM:SS : YYYY* 256 | * **date --date="2 days ago"** 257 | * **date "+%Y-%m-%d"** 258 | * **date "+%H:%M:%S"** 259 | * **date +"%D %T"** - 05/18/18 12:16:46 260 | * **date +%N** - 563339704 261 | * **date +%s** - 1526638758 262 | * **date -R** - Fri, 18 May 2018 12:20:07 +0200 263 | * **date -jnu** - Fri May 18 10:21:13 UTC 2018 264 | * **date -v -1d '+%m-%d-%y'** - 05-17-18 265 | * **date -d @{timestamp}** - konwertuje timestamp na datę 266 | * **sleep {sec} && {polecenie}** - uruchamia polecenie po określonej liczbie sekund (45m - minuty) 267 | 268 | --- 269 | ## System 270 | * **uname -a** - pokazuje informację o systemie Linux 271 | * **uname -snrvm** - j/w tylko bardziej szczegółowo 272 | * **reboot** - urucahmia ponownie 273 | * **shutdown -h {now | liczba minut | godzina:minuta}** - zamyka system natychmiast lub po podanej liczbie minut, lub czasie 274 | * **init 0** - zabija cały system 275 | * **uptime -p && uptime -s** - pokazuje czas pracy systemu, oraz datę uruchomienia 276 | * **getconf LONG_BIT** lub **arch** pokazuje architekturę systemu 277 | * **dstat** - lista statystyk systemowych 278 | * **free** pokazuje ilość dostępnej pamięci 279 | * **hostname** - pokazuje nazwę komputera w sieci 280 | * **who -r** - pokazuje czas uruchomienia systemu oraz jego poziom 281 | * **runlevel** - pokazuje poziom na którym zainicjalizowano system 282 | * **top -bn1 | grep -i "%Cpu" | head -1 | sed "s/.*, *\([0-9]*,.\)%* \(id\|be\).*/\1/;s/,/./" | awk '{print 100 - $1}'** - pokazuje zużycie procesora 283 | * **free | grep Mem | awk '{print $4/$2 * 100.0}'** - ilość wolnej pamięci w procentach 284 | * **free | grep Mem | awk '{print $3/$2 * 100.0}'** - ilość zajętej pamięci w procentach 285 | * **iostat -d /dev/sda | sed -n "4p"** - pokazuje zużycie dysku (/dev/sda) 286 | * **cat /proc/loadavg | awk '{print $1,$2,$3}'** - pokazuje load systemowy 287 | * **printenv** - pokazuje wszystkie zmienne środowiskowe i ich wartości 288 | * **sudo dmidecode -t system** - informacje o systemie (w tym o urządzeniu) 289 | * **top -l 1 -s 0 | grep PhysMem** - ilość zużytej i wolnej pamięci 290 | * **lsmod** - pokazuje status modułów w jądrze linuxa 291 | * **lsb_release -a** - informacje o dystrybucji (-s skrócone) 292 | * **cat /proc/version** - j/w 293 | * **cat /etc/*-release** - j/w 294 | * **cat /etc/system-release** - j/w 295 | * **lslk** - lista locków 296 | * **modprobe -a {modul1} {modul2}** - ładuje podane moduły które pasują do wzorca 297 | * **-c** - lista załadowanych modułów 298 | * **crontab -e** - edycja crontaba 299 | * **crontab -l** - lista wpisów w contab 300 | * **crontab -l -u {user}** - lista cronów dla podanego usera 301 | * **vim /etc/crontab** - systemowy crontab (/etc/cron.hourly/) 302 | * **for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l 2>/dev/null | grep -v '^#; done** - lista wpisów dla wszystkich userów 303 | * **smem -t -P {proces}** - podaje zużycie pamięci wszystkich procesów pasujących do wzorca 304 | * **smem -t -k -c pss -P {proces} | tail -n 1** - jw ale podsumowanie dla bardziej realnych danych (pamięć tylko procesu, nie współdzielona) 305 | * **ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head** - zwraca procesy zużywające najwięcej ram-u i cpu 306 | * **cat /proc/meminfo** - szczegóły na temat pamięci 307 | * **vmstat** - informacje o pamięci virtualnej 308 | * **dmidecode** - DMI table decoder 309 | 310 | ### Urządzenia 311 | * **mount {urządzenie} {ścieżka docelowa}** - montuje urządzenie 312 | * **unmount {urządzenie**} - odmontowuje urządzenie 313 | * **mount -l** - lista podłączonych urządzeń 314 | * **lsblk** - lista urządzeń blokowych ( -l) 315 | * **sudo mount -r -o loop {obraz.iso} {/katalog}** - montuje obraz.iso do katalogu /katalog (-r tylko do odczytu) 316 | * **sudo mount -t auto -o loop {name}.img {dir}** - montuje obraz (-t automatycznie wybiera system plików) 317 | * **blkid** - id urządzeń blokowych 318 | * **hwinfo --short --block** - informacje o urządzeniach blokowych 319 | * **sudo fsck -Cyv {/dev/sdx}** - skanuje i naprawia system plików na dysku 320 | * **lsusb** - lista urządzeń usb 321 | * **sudo lshw** - pełna lista urządzeń systemowych 322 | * **-short** - jak wyżej, wersja skrócona (`-html` zapisuje w wersji html) 323 | * **-class disk** - informacje o dyskach 324 | * **lscpu** - szczegółowe informacje na temat procesora 325 | * **lsblk** - szczegółowe informacje na temat urządzeń blokowych 326 | * **lspci** - urządzenia podpięte pod szynę PCI 327 | * **watch "dmesg | tail -20"** - podgląd na żywo logów systemowych 328 | * **hciconfig -a** - Bluetooth info 329 | * **awk '/sd/ {print $3"\t"$10 / 2 / 1024}' /proc/diskstats** - pokazuje statystyki dysków zaczynających sie na `sd` 330 | * **udevadm info -q all -n /dev/sda1** - szczegółowe informacje na temat dysku 331 | * **udevadm monitor** - monitoruje urządzenia 332 | * **lsinput** - lista urządzeń wejściowych 333 | * **lshal** - informacja o urządzeniach HAL 334 | * **lpq** - status podłączonych drukarek i drukowania 335 | * **lpq -P {nazwa drukarki} {nazwa pliku}** - drukuje plik na wskazanej drukarce 336 | * **lpstat** - j/w (-d domyślna drukarka) 337 | * **lp {plik}** - dodaje plik do kolejki drukowania 338 | * **lprm {id}** - usuwa z kolejki do druku 339 | * **sudo service bluetooth status** - status bluetooth na maszynie 340 | * **hciconfig scan** - skanuje bluetooth 341 | * **hcitool dev** - informacje o urządzeniu bluetooth na maszynie 342 | * **hcitool inq** - znalezione i nie podłączone urządzenia 343 | * **sudo hcitool info {mac}** - informacje o urządzeniu 344 | * **hcitool con** - podłączone urządzenia bluetooth 345 | * **inxi -Fxz** - szczegółowe/iso informacje na temat systemu 346 | * **file -sL {/dev/...}** - zwraca szczegółowe informacje o dysku (np typ plików) 347 | * **sudo parted -l** - jw, ale dla wszystkich dysków 348 | * **sudo lsblk -f** - jw 349 | * **rfkill** - zarządzanie urządzeniami radiowymi 350 | * **list** - lista urządzeń 351 | * **-J** - output jako json 352 | * **sudo hdparm -r 0 /dev/{device}** - usuwa flagę tylko do odczytu 353 | * **sudo dd if=/dev/zero of=/dev/{device} status=progress** - niszczy dane na nośniku 354 | * **sudo dd if=/dev/zero of={plik}.img bs=1M count=1200 status=progress** - tworzy pusty obraz (1.2GB) (*.iso*, *.image*, */dev/urandom*) 355 | * **dd if=/dev/mem | hexdump -C | less** - przeglądanie pamięci 356 | * **dcfldd** - bardziej rozbudowana wersja **dd** [github](https://github.com/adulau/dcfldd) 357 | * **sudo mkfs -t ext4 {name}.img** - tworzy partycję na podanym obrazie 358 | * **fdisk -l** - wyświetlenie partycji i informacji na ich temat 359 | * **sfdisk -l** - bardziej zaawansowany fdisk 360 | * **lsblk -o NAME,FSTYPE,MOUNTPOINT,PARTLABEL,SIZE,RO** - lista urządzeń blokowych z listą informacji (nazwa, system plików, punkt montowania, label, rozmiar, tylko do odczytu) 361 | * **sudo fdisk /dev/sdg** - operacje na dysku 362 | 363 | ### Procesy 364 | * **pstree** - pokazuje drzewo procesów 365 | * **kill -9 {numer procesu}** - zabija wskazany proces (kill) 366 | * **kill -3 {numer procesu}** - zakończenie procesu (quit) 367 | * **kill -15 {numer procesu}** - zakończenie procesu (terminate) 368 | * **killall {nazwa}** - zabija wszystkie procesy o podanej nazwie 369 | * **pidof {nazwa}** - znajduje id podanego procesu 370 | * **sudo update-rc.d {skrypt w init.d} defaults** - dodaje skrypt do autostartu na domyślnym poziomie 371 | * **sudo lsof** - pokazuje otwarte pliki i procesy ich używające 372 | * **ps -Af --no-headers | wc -l** - liczba uruchomionych procesów 373 | * **-ef --forest** - pokazuje drzewo zależności 374 | * **ps u** - pokazuje polecenia uruchomione w konsolach 375 | * **ps aux | head -1 && ps aux | grep {program}** - szuka podanego programu, wraz z opisem kolumn z wyniku 376 | * **ps aux | grep {nazwa}** - szuka procesów o podanym wyrażeniu 377 | * **ps -LF -u {nazwa użytkownika}** - pokazuje procesy użytkownika 378 | * **ps -p {id} -o %cpu,%mem** - pokazuje zużycie ramu i procesora dla podanego procesu 379 | * **watch -n 1 -d "ps -p {id} -o %cpu,%mem"** 380 | * **nohup ./{nazwa}.sh > {nazwa}.log &** - uruchamia proces ze skryptu z zapisem do logu, tak aby działał dalej po wyjściu z konsoli 381 | * **nohup docker exec -i {kontener} {polecenie} > {log} 2>&1 & echo $! > {pid}** - uruchamia proces w kontenerze, tak aby działał w tle i zapisuje id procesu do pliku 382 | * **bg** - pokazuje procesy w tle 383 | * **fg {nazwa}** - przywraca podany proces 384 | * **fg {proces}** - przenosi podany proces w tło 385 | * **pidof {program}** - zwraca id procesu o podanej nazwie 386 | * **watch -n 1 -d "{polecenie}"** - uruchamia polecenie i obserwuje wynik co sekundę z zaznaczeniem zmian 387 | * **iotop** - pokazuje operacje i/o 388 | * **jobs** - pokazuje polecenia uruchomione w terminalu i przeniesione w tło 389 | * **kill %1** - zabija proces w tle 390 | * **fg %2** - przywraca proces z tła (bez % ostatni) 391 | * **bg** - przenosi proces w tło, po zatrzymaniu przez `CTRL-Z` 392 | * **top -U {user} -o cpu -p {id}** - statystyki zużycia procesu przez użytkownika o id (na żywo) 393 | * **pgrep {program}** - zwraca id procesu dla podanej nazwy programu 394 | * **renice {numer} {pid}** - zmienia priorytet procesu o podanym id, im niższy tym wyższy priorytet (np -19, default: 0) 395 | * **pkill {program}** - zabija podany program 396 | * **pkill {program}** - zabija podany program 397 | * **-p $(pgrep {program})** - dla podanego programu 398 | * **xkill** - umożliwia zabijanie okienkowych procesów, należy wskazać kursorem proces do zabicia 399 | * **pidstat -hruvp {pid1}{pid2} 5** - monitoruje 2 procesy i pokazuje co 5s 400 | * **pmap -x {proces id}** - podaje szczegółowe informacje na temat zużycia pamięci przez proces i jego zależności 401 | * **ps --no-headers -o "rss,cmd" -C {nazwa procesu} | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"Mb") }'** - sumaryczne zużycie pamięci dla procesu 402 | * **timeout 5s {command}** - odpala komendę przez 5 sekund (s, m, h, d) (SIGTERM) 403 | * **timeout 8s tail -f {plik}** - tail na pliku przez 8 sekund 404 | * **-s SIGKILL 3 {command}** - 405 | * **-s 9 3 {command}** - 406 | * **-k** - wymusza zabicie procesu po określonym czasie 407 | * **-k 3 5 {command}** - 408 | * **timelimit -t10 tail -f {plik}** - j/w ale przez 10 sekund 409 | 410 | --- 411 | 412 | ## Internet i sieć 413 | * **curl ifconfig.me** - pokazuje zewnętrzne ip komputera 414 | * **wget http://ipinfo.io/ip -qO -** - pokazuje zewnętrzne ip komputera 415 | * **ifconfig** - pokazuje ustawienia sieci 416 | * **ifconfig {nazwa sieci}** - pokazuje informacje o wskazanej sieci 417 | * **ifconfig {nazwa sieci} | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'** - zwraca adres lokalny komputera 418 | * **ifconfig {nazwa sieci} {down|up}** - wyłącza lub włącza sieć 419 | * **ifconfig {nazwa sieci} {ip} netmask {maska}** - ustawia ip i maskę dla sieci, po restarcie ustawienia znikają 420 | * **ifup {nazwa sieci}** - uruchamia sieć (ifdown - wyłącza) 421 | * **ssh-keygen** - generuje nowy klucz ssh 422 | * **ssh-keygen -l -v -f ~/.ssh/id_rsa.pub** - zwraca skrót (sha256) klucza publicznego 423 | * **mtr {ip lub domena}** - połączenie ping i traceroute 424 | * **traceroute {ip}** - pokazuje listę punktów przez które idzie połączenie 425 | * **route** - pokazuje tablicę routingu 426 | * **route add -net {ip/zakres} gw {brama}** - dodaje wpis do tablicy routingu (del - kasuje) 427 | * **scp -r {źródło} {cel}** - kopiuje plik poprzez ssh (user@192.128.0.1:/some/path/file) razem z podkatalogami 428 | * **-l {val}** - limit transferu w Kbit/s (8000 -> 1MB) 429 | * **curl ipinfo.io** - bardziej szczegółowe informacje o komputerze 430 | * **netstat** - wyświetla listę aktywnych połączeń TCP i UDP 431 | * **netstat -at** - lista portów TCP 432 | * **netstat -ai** - statystyki interfejsów sieciowych 433 | * **netstat -ant** - pokazuje połączenia sieciowe 434 | * **netstat -nr | awk '{ if ($1 ~/default/) { print $6} }'** - nazwa aktualnie używanej sieci 435 | * **netstat -anp tcp | grep -i "listen"** - pokazuje nasłuchiwane połączenia tcp 436 | * **netstat -nr** - pokazuje tablicę routingu 437 | * **netstat -tuln** - lista otwartych połączeń 438 | * **netstat -tulnp tcp** - tylko tcp 439 | * **sudo adduse -i -P -n | grep LISTEN** - lista otwartych portów i procesów ich nasłuchujących 440 | * **sudo lsof -i -nP** - pokazuje używane porty oraz powiązane z nimi procesy 441 | * **nethogs"** - pokazuje zużycie sieci i transfery do konkretnych hostów 442 | * **ip route get 8.8.8.8 | awk '{print $NF; exit}'** - pokazuje ip komputera wewnątrz sieci 443 | * **hostname --ip-address** - lokalne ip komputera 444 | * **nmap -sn {ip}/24** - skanuje adresy w poszukiwaniu działających ip (/24,16,8 - mask adresu np /16 -> 127.0.x.x, 24 -> 127.0.0.x) 445 | * **nmap {hostname}** - pokazuje otwarte porty i serwisy na podanym hoście 446 | * **nmap -p 1-1000 {hostname}** - pokazuje otwarte porty i serwisy na podanym hoście od 1 do 1000 447 | * **arp-scan 192.168.0.0/24** - j/w 448 | * **hostname -I** - pokazuje lokalne ip komputera 449 | * **hostname -f** - nazwa hosta (długa, -s - krótka) 450 | * **cat /etc/services | less** - podgląd wszystkich portów i programów je wykorzystujących 451 | * **tcpdump -i any port {port}** - pokazuje całą komunikację na wskazanym porcie 452 | * **tcpdump -i {nazwa sieci}** - pokazuje całą komunikację na wskazanej sieci (np z ifconfig) 453 | * **tcpdump -A -vvvv -s 9999 -i eth1 port 80 > /tmp/headers** - zapisuje headery 454 | * **curl -D {plik dla nagłówków} {url} > /dev/null** - zapisuje nagłówki do pliku (nie generuje outputu) 455 | * **curl -o- {url}.sh | bash** - pobiera skrypt i wykonuje go na komputerze 456 | * **curl -si -H "Host: host.com" "http://server-name/"** - testowanie serwera za load balancerem (host - główna strona, server-name - docelowy serwer za load balancerem) 457 | * **curl -sS -d key=val {url}** - wysyła dane POST, -sS pokazuje tylko błędy jeśli krytyczne (-G - GET) 458 | * **-d {key=val}** - post data 459 | * **-G -d {key=val} -d {key2=val2}** - get data 460 | * **-H {Name: value}** - header data 461 | * **-i** - pokazuje headery w output 462 | * **-I** - pokazuje tylko headery w output 463 | * **-L** - podążaj za relokacją ze strony 464 | * **-N** - bez bufora, pokazuje na bieżąco dane przychodzące 465 | * **-o** - zapisuje output do pliku (-o- - force) 466 | * **-O | --remote-name** - nazywa plik tak samo jak ten z serwera 467 | * **-s** - nie pokazuje błędów i progresu 468 | * **-S** - pokazuje błędy 469 | * **-sS** - pokazuje błędy tylko jeśli zapytanie się nie udało 470 | * **-v --ipv4 -I** - pokazuje krok po kroku co dzieje się z zapytaniem 471 | * **-k** - pozwala na połączenie jeśli są problemy z certyfikatem ssl 472 | * **-w {format}** - formatuje wyjście względem ustawionego formatu 473 | * **-u {username:password}** - logowanie przez basic http authorization 474 | * **-C - -O** - wznawia przerwane pobieranie 475 | * **-x {adres serwera proxy}** - łączy przez proxy 476 | * **-f** - wycisza błąd HTTP 477 | * **--user-agent {nazwa}** - ustawia user agenta (no opera zamiast curl) 478 | * **--cookie-jar {plik dla cookie} {adres} -O** - zapisuje ciasteczka pobrane ze strony 479 | * **--cookie {plik cookie} {adres}** - wysyła cookie 480 | * **--limit-rate 100K** - ogranicza transfer do 100kB 481 | * **xargs -n 1 curl -O < {lista plików}** - pobiera pliki z listy 482 | * **for ((i=0;i<=30;i++)); do curl -I "{url}/$i"; done;** - odpala 30 url-i z dopiskiem numeru na końcu i zwraca tylko headery 483 | * **curl -s -o /dev/null -w "%{http_code}\\n"** - pokaże tylko kody odpowiedzi http 484 | * **whois {domena}** - podaje informacje o domenie internetowej 485 | * **dig {domena}** - informacje o DNS 486 | * **dig {domena} MX +short** - pokazuje wpisy MX, short - wersja skrócona 487 | * **nslookup {domena}** - jw 488 | * **wget -r {url}** - pobiera rekursywnie z podanego url-a 489 | * **-O {plik}** - zapisuje output do pliku 490 | * **-c** - wznawia ściąganie częściowo ściągniętego pliku 491 | * **lsof -n -i:80 | grep LISTEN** - lista programów nasłuchujących port 80 (-iTCP:80 - tylko TCP) 492 | * **dsh -vMm {serwer, ...} -c {polecenie}** - uruchamia polecenia na zewnętrznych maszynach 493 | * **if=`netstat -nr | awk '{ if ($1 ~/default/) { print $6} }'` && ifconfig ${if}** - szczegóły aktualnie używanej sieci 494 | * **if=`netstat -nr | awk '{ if ($1 ~/default/) { print $6} }'` && ifconfig ${if} | awk '{ if ($1 ~/inet$/) { print $2} }'** - zwraca ip 495 | * **ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}'** - j/w 496 | * __ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'__ - j/w 497 | * __ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'__ - j/w 498 | * **nc {ip} {port}** - ustawia połączenie tcp & udp z serwerem 499 | * **nc -z -v 127.0.0.1 1-1000** - skanowanie portów od 1 do 1000 500 | * **nc -z 127.0.0.1 1-100** - tylko te z którymi udało się połączyć 501 | * **nc -z -n -v 127.0.0.1 1-1000 2>&1 | grep succeeded** - j/w 502 | * **nc -l {port}** - nasłuchuje na porcie 503 | * **nc -l {port}| tar xzvf -** - zapisuje output do spakowanego pliku 504 | * **tar -czf - * | nc {ip} {port}** - wysyła spakowane pliki przez netcata 505 | * **while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | nc -l {port}; done** - tworzy prosty serwer pokazujący plik index.html (while - żeby działało cały czas) 506 | * **iptables -I INPUT -p tcp -m tcp --dport {port} -j ACCEPT** - dodaje port do wpisu w+ iptables 507 | * **iptables -A INPUT -s {ip} -j DROP** - blokuje adres IP 508 | * **iptables -D INPUT -s {ip} -j DROP** - usuwa z listy blokowanych 509 | * **iptables --list** - lista wpisów 510 | * **iptables-save** - zapisuje ustawienia 511 | * **iptables -A INPUT -s {ip} -p tcp --destination-port {port} -j DROP** - blokuje wskazany port 512 | * **swaks --to {mail docelowy} --server {serwer mailingowy}:{port} --body "{treść}" --header "{temat}"** - wysyła prostego maila 513 | * **host {domena}** - podaje IP domeny 514 | * **host -t CNAME {domena}** podaje wpisy CNAME domeny (CNAME, NS, MX, SOA) 515 | * **arp -e** - zwraca tablicę ARP (Address Resolution Protocol) 516 | * **iwconfig** - ustawia sieć wifi 517 | * **iptraf** - monitoring sieci LAN 518 | * **iftop** - monitoring sieci 519 | * **ab -n 500 http://...** - test wydajnościowy, 500 requestów 520 | 521 | --- 522 | 523 | ## Inne 524 | * **reset** - inicjalizuje ponownie konsolę 525 | * **clear** - czyści wpisy w konsoli 526 | * **which {nazwa polecenia}** - podaje ścieżkę do polecenia 527 | * **-a** - pokazuje wszystkie znalezione ścieżki 528 | * **whereis {nazwa polecenia}** - podaje ścieżkę do polecenia, źródeł binarnych, bibliotek i pakietów 529 | * **alias fuck='sudo $(history -p \!\!)'** - fuck command 530 | * **alias fuck='sudo $(fc -ln -1)'** - fuck command 2 531 | * **history** - pokazuje historię poleceń konsoli 532 | * **{polecenie} | column -t** - formatuje wynik polecenia w kolumny 533 | * **expr {wyrażenie matematyczne}** - rozwiązuje wyrażenia matematyczne 534 | * **expr {arg1} = {arg2}** - czy oba argumenty są identyczne (|, &, \<, \>, <=, >=, \!=, +, -, *, /, %) 535 | * **expr {string} : {regexp}** - sprawdza czy string pasuje do wzorca 536 | * **expr substr {string} {start} {długoś}** - wycina cześć stringa 537 | * **expr index {string} {chars}** - zwraca index znaku w stringu 538 | * **expr length {string}** - długość tekstu 539 | * **disown -a && exit {polecenie}** - uruchamia polecenie w tle nawet po zamknięciu konsoli 540 | * **bind -p** - pokazuje skróty dostępne w bash 541 | * **time {polecenie}** - mierzy czas podanego polecenia 542 | * **while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &** - pokazuje datę i czas w prawym górnym rogu terminala 543 | * **{polecenie} | tee {plik}** - wyświetla wyjście oraz zapisuje do pliku wyjście polecenia 544 | * **tail -f jakaś/ścieżka/\`ls --format=single-column -t /jakaś/ścieżka | head -1\`** - uruchamia taila na najnowszym pliku w podanym katalogu 545 | * **{polecenie} | awk '{ print $1 }** - wyświetla pierwszy wyraz z wyniku polecenia 546 | * **{polecenie} | tr '\ ' '\n'** - wyświetla wynik polecenia w pojedynczych liniach (zamienia spacje na nowy wiersz) 547 | * **echo $PATH | tr ':' '\n'** - pokazuje ścieżki ze zmiennej `$PATH` w osobnych liniach 548 | * **{polecenie} | xargs -n1** - działa jak powyżej 549 | * **xxd -c 1 {plik}** - wyświetla wartości hex dla każdego znaku linia po linii 550 | * **rsync -vrpogthl --progress {katalog} {katalog backupu}** - wykonuje backup katalogu, aktualizuje jedynie to co się zmieniło (opcje zapewniają backup praw, własności, czasów modyfikacji plików i symlinki jako symlinki) 551 | * **-e 'ssh -p {port}'** - połączenie na innym niż domyślny port 552 | * **-L** - Podąża za symlinkami 553 | * **-a** - pomija symlinki 554 | * **-z** - kompresuje pliki do przesyłania 555 | * **-P** - --progress and --partial 556 | * **-v** - zwiększa ilość informacji 557 | * **-r** - rekursywnie 558 | * **-p** - zachowuje uprawnienia 559 | * **-o** - zachowuje właściciela 560 | * **-g** - zachowuje grupę 561 | * **-t** - zachowuje czas modyfikacji 562 | * **-h** - numery w formacie łatwym do odczytania 563 | * **-l** - kopiuje symlinki jako symlinki 564 | * **-q** - nie pokazuje wiadomości (tylko błędy) 565 | * **--del** - (--delete-during) operacja usuwania podczas synchronizacji 566 | * **--delete-after** - operacja usuwania po synchronizacji 567 | * **--log-file** - zapisuje informacje do loga 568 | * **--exclude '{dir}'** - pomija katalog 569 | * **for i in {1..10}; do {polecenie}; done** - uruchamia {polecenie} 10x 570 | * **look {wyraz}** - podpowiada składnię wyrazu 571 | * **md5sum {plik}** - oblicza skrót md5 572 | * **mkpasswd -l 10** - generuje hasło 10 znakowe trudne do złamania 573 | * **makepasswd --cahrs 10** - generuje hasło 10 znakowe trudne do złamania 574 | * **while true; do {polecenie lub skrypt do wykonania} ; sleep 100 ; done** - wykonuje skrypt co określony czas 575 | * **mplayer -vo caca {film}** - odtwarzanie filmów w konsoli 576 | * **multitail -l 'ssh user@host "tail -f /var/log/log.log"' -l 'ssh user@host2 "tail -f /var/log/log.log"'** - podgląd logów z 2 serwerów na raz 577 | * **echo -n "Hello" | od -A n -t x1** - wyświetla tekst jako wartości hex 578 | * **echo -n "Hello" | hd** - wyświetla tekst jako wartości hex + oryginalny string (hd, xxd) 579 | * **echo -e "text"** - interpretuje sekwencje ucieczki (np \n jako nową linię, \t jako tabulator) 580 | * **-n** - do not print the trailing newline. 581 | * **\b** - backspace 582 | * **\\** - backslash 583 | * **\n** - new line 584 | * **\r** - carriage return 585 | * **\t** - horizontal tab 586 | * **\v** - vertical tab 587 | * **od {opcja} {plik}** - wyświetla zawartość pliku jako wartości danego znaku 588 | * **-c** - pokazuje znaki niedrukowane 589 | * **-x** - jako wartości hex 590 | * **-b** - jako wartości octalne 591 | * **history | cut -c 8- | grep -Eo "^{name}.*" | sort --uniq** - wyszukuje w historii unikalne komendy zaczynające się od wyrażenia 592 | * **history | cut -c 8- | grep -v "^{name}\|{name2}.*" | sort --uniq** - wyszukuje w historii unikalne komendy nie zaczynające się od wyrażenia name lub name2 593 | * **history | awk '{ $1=""; print }'** - wyświetla tylko komendy z historii (print substr($0,2) - bez spacji na początku) 594 | * **history | fc -ln** - j/w 595 | * **for ((i=32;i<=127;i++)); do printf '%03o\t' "$i"; done;echo "\n""** - liczby od 32-127 przedstawione w notacji ósemkowej 596 | * **mysqldump --host -u -p --no-create-info --single-transaction -d {db_name} > sb.sql** - eksport danych bez info 597 | * **--no-create-db --where="date_time>'2015-08-01'"** 598 | * **mysqluc -e "help utilities"** 599 | * **tig** **grv** - wizualna reprezentacja git-a 600 | * **curl -N tty.zone/\[0-2\]\?auto\&cols=$((COLUMNS))** - demo narzędzi graficznych pod terminal 601 | * **wget -O- -q wttr.in/Poland+{miasto}** - pogoda 602 | * **type {alias}** - pokazuje komendę powiązaną z podanym aliasem 603 | * **alias {alias}** - j/w 604 | * **xfd -fa "{czcionka}"** - pokazuje pełną listę znaków dla podanej czcionki 605 | * **sudo sshfs -p {port} -o allow_other,IdentityFile={id_rsa} {domena}:{katalog} /mnt/{punk montowania}** - montuje jako dysk katalog na zewnętrznym serwerze 606 | * **htpasswd -nb -B {user} {pass} | cut -d ":" -f** - generuje i zwraca hash hasła 607 | * **grep -r -P '[^\x00-\x7f]' {plik}** - wyszukuje znaki unicode w pliku 608 | * **openssl passwd -apr1** - generuje hash hasła 609 | * **openssl rand -hex {długość}** - generuje hasło o podanej długości (*2) 610 | * **mytop** - pokazuje operacje na bazie mysql 611 | 612 | --- 613 | 614 | ## Stream 615 | * **awk '{print $4/$2}'** - wyświetla parameter 4 i 2 z wejścia podzielone przez siebie (oddzielone spacja) ($NF - liczba pol, $NR - liczba rekordów) 616 | * **awk 'BEGIN{for(i=32;i<128;i++)printf "%c",i}'** - wyświetla listę znaków (32-128) 617 | * **awk -F'/' '{print $3}'** - dzieli input względem znaku `/` i wyświetla 3 element 618 | * **awk '{s+=$1} END {print s}** - 619 | * **awk '{gsub(/{pattern}/,"{replace}")}' {plik}** - Szuka i zastępuje wszystkie wzorce znalezione w pliku 620 | * **awk '{gsub(/[0-9]+\.216\.104\.10/,"10.216.104.1")}' php.ini** 621 | * **sed -n '44,92p' {plik}** - pokazuje linie 44-92 z pliku (samo 92p - 92 linia) 622 | * **sed -i -- 's/{pattern}/{replace}/g' {plik}** - zastępuje znaleziony wzorzec w pliku 623 | * **'2!d'** - druga linia z pliku 624 | * **cut -c {początek}-{koniec}, {początek}-{koniec} {plik}** - tnie plik po zakresie podanych znaków 625 | * **-b** - tnie po zakresie podanych bajtów 626 | * **... | cut -d' ' -f1** - tnie po spacji i podaje pierwszy element (-f 2- - od 2 i dalej; -2 do 2) 627 | * **-s** - tnie od tyłu 628 | * **--output-delimiter="--"** - ustawiam symbol do rozdzielenia 629 | * **sed -i '1s/^/{string}\n/' {plik}** - dodaje string na początek pliku 630 | * **sed '1702,1730d' {plik 2} > {plik 1}** - kasuje podane linie z pliku 631 | * **tr ':' '\n'** - zamienia podany znak na inny, tu : na nową linię 632 | * **tr 'a-z' 'A-Z'** - zamienia litery na duże 633 | * **tr -d ‘is’** - kasuje wyrażenie 634 | ** **tr -s " "** - zastępuje wiele spacji pojedynczą 635 | * **tr -cd** - kasuje nieliczbowe znaki 636 | * **hexdump -C** - pokazuje dane w postaci hex 637 | * **fold -w 80 -s {plik wejściowy} > {plik wyjściowy}** - dodaje przełamanie linii w pliku w 80 kolumnie 638 | * **uniq {plik1} {plik2}** - zbiera unikalne wpisy z pliku1 i zapisuje do pliku2 639 | * **-c** - podaje liczbę powtórzeń 640 | * **-d** - pokazuje tylko zduplikowane linie 641 | * **-u** - pokazuje tylko nie zduplikowane linie 642 | * **-w {liczba}** - porównuje podaną liczbę znaków 643 | 644 | --- 645 | 646 | ## Terminal 647 | * **{command} 1> {file|program}** - Redirect stdout to file or program 648 | * **{command} 1>> {file|program}** - Redirect and append stdout to file or program 649 | * **{command} 2> {file|program}** - Redirect stderr to file or program 650 | * **{command} 2>> {file|program}** - Redirect and append stderr to file or program (to samo co {command} >> {plik} 2>&1) 651 | * **{command} &>> {file|program}** - Redirect both stdout and stderr to file or program 652 | * **{command} >> {file|program} 2>&1** - Redirect both stdout and stderr to file or program 653 | * **{command} 2>&1** - Redirect stderr to stdout 654 | * **{command} > /dev/null 2>&1** - Redirect whole output to /dev/null 655 | * **{command} &> /dev/null** - Redirect whole output to /dev/null 656 | * **echo -n "{tekst}"** - wyświetla tekst bez znaku nowej linii 657 | * **echo "\u9c93"** - 鲓 658 | * **echo "\ue0b0 \u00b1 \ue0a0 \u27a6 \u2718 \u26a1 \u2699"** -  ±  ➦ ✘ ⚡ ⚙ 659 | * **echo "\xe2\x9c\x93"** - ✓ 660 | * **tty** - zwraca nazwę terminala 661 | * **ttylog -d /dev/pts/{numer}** - wyświetla informacje z innego terminala 662 | * **script -f /dev/tty3** - zapisuje wszystkie informacje z terminala (np zapis wszystkich działań w terminalu) do innego terminala, lub pliku (-f {plik}) 663 | * **retty $({id procesu})** - przełącza proces z innego terminala na obecny 664 | * **... | bash -s {param}** - uruchamia skrypt w bash i podaje na standardowe wejście parametr 665 | * **fc** - history manager 666 | * **echo $(( 2#101011 ))** - zamienia binary na decimal (101011 -> 43) 667 | * **echo "obase=2; {liczba}" | bc** - decimal do binary 668 | * **echo "obase=8; {liczba}" | bc** - decimal do octal 669 | * **printf "%on" {octal}** 670 | * **echo "obase=16; {liczba}" | bc** - decimal do hex 671 | * **printf "%xn" {liczba}** 672 | * **echo "ibase=2; {liczba}" | bc** - binary do decimal 673 | * **echo "ibase=8; {liczba}" | bc** - octal do decimal 674 | * **echo "ibase=16; {liczba}" | bc** - hex do decimal 675 | * **echo $((0x{hex}))** 676 | * **echo "ibase=2;obase=8; {liczba}" | bc** - binary do octal 677 | 678 | --- 679 | 680 | ## Skróty 681 | * **ctrl+c** - zatrzymuje aktualny proces 682 | * **ctrl+z** - przenosi proces w tło 683 | * **ctrl+u** - kasuje wpisaną linię 684 | * **ctrl+w** - kasuje jedno słowo z linii 685 | * **ctrl+r** - szuka poprzedniej komendy 686 | * **ctrl+d** - wylogowuje z obecnej sesji 687 | * **!!** - powtarza poprzednie polecenie 688 | * **!-6** - uruchamia komendę uruchomioną 6 kroków wcześniej 689 | * **!$** - argumenty poprzednio uruchomionej komendy 690 | * **!^** - pierwszy argument poprzednio uruchomionej komendy 691 | * **!{komenda}:2** - drugi argument ostatnio uruchomionej komendy podanej w nawiasach 692 | 693 | --- 694 | 695 | ## Ubuntu 696 | * **sudo dpkg -i --force-overwrite {*.deb}** - wymusza uruchomienie pakietu 697 | * **sudo apt -f --fix-broken install** - naprawia zależności 698 | * **apt install ubuntu-restricted-extras laptop-mode-tools** - kodeki i drivery dla laptopa 699 | 700 | ## Suse 701 | * **cat /var/log/boot.log** - 2 702 | * **tail -30 /var/log/messages** - 703 | * **tail -30 /var/log/messages | awk '{print $3,$5,$6,$7,$8,$9,$10}'** - 704 | * **zypper search -s {openssh}** - szuka pakietu z poprzednimi wersjami 705 | * **sudo zypper install --oldpackage {openssh-7.6p1-lp150.7.4}** - zainstalowanie starszej wersji pakietu 706 | * **zypper list-updates** - lista dostępnych updatów 707 | * **zypper dup** - pełen upgrade 708 | * **zypper info {pakiet}** - informacje o pakiecie 709 | * **zypper al {pakiet}** - blokuje pakiet przed zmianami 710 | * **rl** - usuwa blokadę 711 | * **zypper ll** - lista pakietów 712 | * **zypper lr** - lista repozytoriów 713 | * **zypper shell** - konsola zypper 714 | * **zypper ... --xmlout** - pokazuje output w xml 715 | * **zypper clean** - czyści cache 716 | * **cat /var/log/zypp/history** - logi zyppera 717 | * **zypper dist-upgrade** - upgrade całej dystrybucji 718 | 719 | ## MacOS 720 | * **diskutil list** - lista urządzeń blokowych 721 | sudo diskutil unmountDisk 722 | sudo diskutil unmount 723 | sudo diskutil eject 724 | sudo diskutil unmount force /Users/chajr/mount 725 | * **sudo launchctl** - zarządzanie demonami 726 | * **stop {nazwa}** - zatrzymuje 727 | * **remove {nazwa}** - zatrzymuje 728 | * **disable {nazwa}** - zatrzymuje 729 | * **stop {nazwa}** - zatrzymuje 730 | * **limit maxfiles 65536 unlimited** 731 | * **load -w /Library/LaunchDaemons/limit.maxfiles.plist** - (unload) 732 | * **list** - pełna lista demonów systemowych 733 | * **restart {nazwa}** - 734 | * **runstatus {nazwa}** - 735 | 736 | 737 | --- 738 | 739 | 740 | 741 | --------------------------------------------------------------------------------