From 9232b8d817d4cd4122947375156fa2fa1e9fba14 Mon Sep 17 00:00:00 2001 From: Jasper Ras Date: Mon, 13 Jan 2025 13:16:06 +0100 Subject: vault backup: 2025-01-13 13:16:06 --- 3 resources/linux/APT.md | 5 ++ 3 resources/linux/Definitions.md | 6 ++ 3 resources/linux/Device drivers.md | 22 +++++++ 3 resources/linux/Device mapper.md | 28 +++++++++ 3 resources/linux/LSOF.md | 69 ++++++++++++++++++++++ 3 resources/linux/Users.md | 22 +++++++ 3 resources/linux/Watch.md | 5 +- 3 resources/linux/apt.md | 2 - 3 resources/linux/bootloader.md | 1 - 3 resources/linux/device-drivers.md | 19 ------ 3 resources/linux/device-mapper.md | 25 -------- 3 resources/linux/filesystems/Tmpfs.md | 16 +++++ 3 resources/linux/filesystems/tmpfs.md | 13 ---- .../linux/filesystems/virtual filesystem.md | 0 3 resources/linux/glibc.md | 1 - 3 resources/linux/lsof.md | 65 -------------------- 3 resources/linux/man pages.md | 2 - 3 resources/linux/networking/DHCP.md | 5 ++ 3 resources/linux/networking/IP masquerade.md | 17 ++++++ 3 resources/linux/networking/PXE.md | 18 ++++++ 3 resources/linux/networking/dhcp.md | 4 -- 3 resources/linux/networking/ip-masquerade-nat.md | 14 ----- 3 resources/linux/networking/nbp.md | 3 - 3 resources/linux/networking/pxe-boot.md | 15 ----- 3 resources/linux/networking/udp.md | 0 3 resources/linux/nic.md | 1 - .../linux/shared anonymous memory mappings.md | 2 - 3 resources/linux/system v shared memory.md | 2 - 3 resources/linux/tftp.md | 2 - 29 files changed, 212 insertions(+), 172 deletions(-) create mode 100644 3 resources/linux/APT.md create mode 100644 3 resources/linux/Definitions.md create mode 100644 3 resources/linux/Device drivers.md create mode 100644 3 resources/linux/Device mapper.md create mode 100644 3 resources/linux/LSOF.md create mode 100644 3 resources/linux/Users.md delete mode 100644 3 resources/linux/apt.md delete mode 100644 3 resources/linux/bootloader.md delete mode 100644 3 resources/linux/device-drivers.md delete mode 100644 3 resources/linux/device-mapper.md create mode 100644 3 resources/linux/filesystems/Tmpfs.md delete mode 100644 3 resources/linux/filesystems/tmpfs.md delete mode 100644 3 resources/linux/filesystems/virtual filesystem.md delete mode 100644 3 resources/linux/glibc.md delete mode 100644 3 resources/linux/lsof.md delete mode 100644 3 resources/linux/man pages.md create mode 100644 3 resources/linux/networking/DHCP.md create mode 100644 3 resources/linux/networking/IP masquerade.md create mode 100644 3 resources/linux/networking/PXE.md delete mode 100644 3 resources/linux/networking/dhcp.md delete mode 100644 3 resources/linux/networking/ip-masquerade-nat.md delete mode 100644 3 resources/linux/networking/nbp.md delete mode 100644 3 resources/linux/networking/pxe-boot.md delete mode 100644 3 resources/linux/networking/udp.md delete mode 100644 3 resources/linux/nic.md delete mode 100644 3 resources/linux/shared anonymous memory mappings.md delete mode 100644 3 resources/linux/system v shared memory.md delete mode 100644 3 resources/linux/tftp.md (limited to '3 resources/linux') diff --git a/3 resources/linux/APT.md b/3 resources/linux/APT.md new file mode 100644 index 0000000..9231d40 --- /dev/null +++ b/3 resources/linux/APT.md @@ -0,0 +1,5 @@ +#linux #packages #how-to + +--- +reinstall packages: +`apt reinstall ` \ No newline at end of file diff --git a/3 resources/linux/Definitions.md b/3 resources/linux/Definitions.md new file mode 100644 index 0000000..c0ca4dd --- /dev/null +++ b/3 resources/linux/Definitions.md @@ -0,0 +1,6 @@ +#linux #definitions + +--- +NBP = Network Bootstrap Program +PXE = Preboot Execution Environment +NIC = Network Interface Card \ No newline at end of file diff --git a/3 resources/linux/Device drivers.md b/3 resources/linux/Device drivers.md new file mode 100644 index 0000000..95f1a75 --- /dev/null +++ b/3 resources/linux/Device drivers.md @@ -0,0 +1,22 @@ +#linux #devices + +--- +major, minor numbers +major = driver (used by kernel when opening device to dispatch to correct driver) +minor = used by driver to differentiate device(s) + +after disk the major, minor numbers are shown: +``` +[jasras@n04.compute.vps2-lej1 ~]$ ls -l /dev/dm-* +brw-rw---- 1 root disk 253, 0 Oct 25 10:10 /dev/dm-0 +brw-rw---- 1 root disk 253, 1 Oct 25 10:11 /dev/dm-1 +brw-rw---- 1 root root 253, 11 Oct 28 19:58 /dev/dm-11 +brw-rw---- 1 root root 253, 12 Oct 28 19:58 /dev/dm-12 +``` + +available devices: `cat /proc/devices` + +character devices vs block devices; what is the difference? + +--- +[oreilly-device-drivers](https://www.oreilly.com/library/view/linux-device-drivers/0596000081/ch03s02.html) \ No newline at end of file diff --git a/3 resources/linux/Device mapper.md b/3 resources/linux/Device mapper.md new file mode 100644 index 0000000..059a0d1 --- /dev/null +++ b/3 resources/linux/Device mapper.md @@ -0,0 +1,28 @@ +#linux #device-mapper + +--- +Device mapper is a kernel driver to map physical block devices to virtual ones; this means that for example we can have many physical devices be represented by a single virtual one (linear mapping). + +How does it work? +[[1 projects/Inwerken Mohammed/TODO]] +What is its function in relation to multipath? + +Logical devices using device-mapper can be managed using `man 8 dmsetup` +``` +[jasras@n04.compute.vps2-lej1 ~]$ sudo dmsetup info 3600a098038314d736724566a67346538 +Name: 3600a098038314d736724566a67346538 +State: ACTIVE +Read Ahead: 256 +Tables present: LIVE +Open count: 1 +Event number: 3 +Major, minor: 253, 12 +Number of targets: 1 +UUID: mpath-3600a098038314d736724566a67346538 +``` + +If dmsetup cannot remove a device because a process still has it open, but lsof does not show any processes that open it, use `-f` which replaces the device with a fake that rejects all I/O. + +--- +[device-mapper](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/logical_volume_manager_administration/device_mapper#device_mapper) +[dmsetup](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/logical_volume_manager_administration/dmsetup#dmsetup) \ No newline at end of file diff --git a/3 resources/linux/LSOF.md b/3 resources/linux/LSOF.md new file mode 100644 index 0000000..5a3aa95 --- /dev/null +++ b/3 resources/linux/LSOF.md @@ -0,0 +1,69 @@ +#linux #how-to + +--- + +``` +lsof -p 1111 # show open files for this PID +lsof /path/to/file # show which process has this open +``` + +A usage in the wild; using lsof to find the qemu process for a specific base image and using that to get instance name and disk path: +``` +lsof -F p {{ item['path'] }} | cut -b 2- | head -1 | xargs ps | grep -oP '(instance\\-[a-z0-9]+)|(\\/var\\/lib\\/nova\\/instances\\/[a-z0-9\\-]+\\/disk)' | uniq +``` + +(man lsof: search "OUTPUT FOR OTHER PROGRAMS") +output for other programs +``` +specify -F +These are the fields that lsof will produce. The single character listed first is the field identifier. + a file access mode + c process command name (all characters from proc or + user structure) + C file structure share count + d file's device character code + D file's major/minor device number (0x) + f file descriptor (always selected) + F file structure address (0x) + G file flaGs (0x; names if +fg follows) + g process group ID + i file's inode number + K tasK ID + k link count + l file's lock status + L process login name + m marker between repeated output + M the task comMand name + n file name, comment, Internet address + N node identifier (ox + o file's offset (decimal) + p process ID (always selected) + P protocol name + r raw device number (0x) + R parent process ID + s file's size (decimal) + S file's stream identification + t file's type + T TCP/TPI information, identified by prefixes (the + `=' is part of the prefix): + QR= + QS= + SO= (not all dialects) + SS= (not all dialects) + ST= + TF= (not all dialects) + WR= (not all dialects) + WW= (not all dialects) + (TCP/TPI information isn't reported for all supported + UNIX dialects. The -h or -? help output for the + -T option will show what TCP/TPI reporting can be + requested.) + u process user ID + z Solaris 10 and higher zone name + Z SELinux security context (inhibited when SELinux is disabled) + 0 use NUL field terminator character in place of NL + 1-9 dialect-specific field identifiers (The output + of -F? identifies the information to be found + in dialect-specific fields.) + +``` \ No newline at end of file diff --git a/3 resources/linux/Users.md b/3 resources/linux/Users.md new file mode 100644 index 0000000..885a7cc --- /dev/null +++ b/3 resources/linux/Users.md @@ -0,0 +1,22 @@ +#linux #user-management + +Change uid/gid of user +`usermod -u newnumber user` +`groupmod -g newnumber user` + +File permissions in homedir will be automatically updated; file perms outside home dir will not be automatically updated. + +Finding files of a specific user, and printing their uid/gid; +`sudo find / -user 4109 -printf '%p %u(%U) %g(%G)\n'` + +To change only the group: `chgrp`. + +Or using find to chmod/chgrp: +`sudo find / -user 4109 -group 4109 -exec chmod 998:998 {} \;` +`sudo find / -group 4109 -exec chgrp 998 {} \;` + +Dirty way to find "system users" (uid < 999) - note that this is not fool-proof, it also lists groups +`getent passwd | grep -oP '\b[0-9]{3}\b' | uniq | sort` + +--- +https://www.cyberciti.biz/faq/linux-change-user-group-uid-gid-for-all-owned-files/ diff --git a/3 resources/linux/Watch.md b/3 resources/linux/Watch.md index dafeb80..0c167b7 100644 --- a/3 resources/linux/Watch.md +++ b/3 resources/linux/Watch.md @@ -1 +1,4 @@ -`watch (1)` periodically executes the executable on argv. It can be used to reload the output of a command, like `sudo watch ovs-dpctl dump-flows` . \ No newline at end of file +#linux #how-to + +--- +`watch (1)` periodically executes the executable on argv. It can be used to reload the output of a command, like `sudo watch ovs-dpctl dump-flows` . diff --git a/3 resources/linux/apt.md b/3 resources/linux/apt.md deleted file mode 100644 index 36a098c..0000000 --- a/3 resources/linux/apt.md +++ /dev/null @@ -1,2 +0,0 @@ -reinstall packages: -`apt reinstall ` \ No newline at end of file diff --git a/3 resources/linux/bootloader.md b/3 resources/linux/bootloader.md deleted file mode 100644 index e9c2fff..0000000 --- a/3 resources/linux/bootloader.md +++ /dev/null @@ -1 +0,0 @@ -[[TODO]] \ No newline at end of file diff --git a/3 resources/linux/device-drivers.md b/3 resources/linux/device-drivers.md deleted file mode 100644 index e4fe9d2..0000000 --- a/3 resources/linux/device-drivers.md +++ /dev/null @@ -1,19 +0,0 @@ -major, minor numbers -major = driver (used by kernel when opening device to dispatch to correct driver) -minor = used by driver to differentiate device(s) - -after disk the major, minor numbers are shown: -``` -[jasras@n04.compute.vps2-lej1 ~]$ ls -l /dev/dm-* -brw-rw---- 1 root disk 253, 0 Oct 25 10:10 /dev/dm-0 -brw-rw---- 1 root disk 253, 1 Oct 25 10:11 /dev/dm-1 -brw-rw---- 1 root root 253, 11 Oct 28 19:58 /dev/dm-11 -brw-rw---- 1 root root 253, 12 Oct 28 19:58 /dev/dm-12 -``` - -available devices: `cat /proc/devices` - -character devices vs block devices; what is the difference? - ---- -[oreilly-device-drivers](https://www.oreilly.com/library/view/linux-device-drivers/0596000081/ch03s02.html) \ No newline at end of file diff --git a/3 resources/linux/device-mapper.md b/3 resources/linux/device-mapper.md deleted file mode 100644 index f862496..0000000 --- a/3 resources/linux/device-mapper.md +++ /dev/null @@ -1,25 +0,0 @@ -Device mapper is a kernel driver to map physical block devices to virtual ones; this means that for example we can have many physical devices be represented by a single virtual one (linear mapping). - -How does it work? -[[TODO]] -What is its function in relation to multipath? - -Logical devices using device-mapper can be managed using `man 8 dmsetup` -``` -[jasras@n04.compute.vps2-lej1 ~]$ sudo dmsetup info 3600a098038314d736724566a67346538 -Name: 3600a098038314d736724566a67346538 -State: ACTIVE -Read Ahead: 256 -Tables present: LIVE -Open count: 1 -Event number: 3 -Major, minor: 253, 12 -Number of targets: 1 -UUID: mpath-3600a098038314d736724566a67346538 -``` - -If dmsetup cannot remove a device because a process still has it open, but lsof does not show any processes that open it, use `-f` which replaces the device with a fake that rejects all I/O. - ---- -[device-mapper](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/logical_volume_manager_administration/device_mapper#device_mapper) -[dmsetup](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/logical_volume_manager_administration/dmsetup#dmsetup) \ No newline at end of file diff --git a/3 resources/linux/filesystems/Tmpfs.md b/3 resources/linux/filesystems/Tmpfs.md new file mode 100644 index 0000000..b8fe839 --- /dev/null +++ b/3 resources/linux/filesystems/Tmpfs.md @@ -0,0 +1,16 @@ +#linux #filesystem + +--- +Is a [[virtual filesystem]] that is stored in memory; it uses both RAM and swap space. +> Kernel option: CONFIG_TMPFS + +`mount -t tmpfs source target` + +A tmpfs can only grow to 50% of RAM avail. unless overridden with size=nbytes mount option. +Only consumes RAM for actual usage. +Data is ephemeral/volatile. + +Mount stacking: mount over existing /tmp, to improve speed of apps using alot of tmp files, then unmount to delete data. + +Kernel uses tmpfs for [[system v shared memory]] and [[shared anonymous memory mappings]]. +`/dev/shm` or `/run/shm`: [[glibc]] of [[POSIX]] shared memory and [[POSIX]] semaphores. \ No newline at end of file diff --git a/3 resources/linux/filesystems/tmpfs.md b/3 resources/linux/filesystems/tmpfs.md deleted file mode 100644 index 624c835..0000000 --- a/3 resources/linux/filesystems/tmpfs.md +++ /dev/null @@ -1,13 +0,0 @@ -Is a [[virtual filesystem]] that is stored in memory; it uses both RAM and swap space. -> Kernel option: CONFIG_TMPFS - -`mount -t tmpfs source target` - -A tmpfs can only grow to 50% of RAM avail. unless overridden with size=nbytes mount option. -Only consumes RAM for actual usage. -Data is ephemeral/volatile. - -Mount stacking: mount over existing /tmp, to improve speed of apps using alot of tmp files, then unmount to delete data. - -Kernel uses tmpfs for [[system v shared memory]] and [[shared anonymous memory mappings]]. -`/dev/shm` or `/run/shm`: [[glibc]] of [[POSIX]] shared memory and [[POSIX]] semaphores. \ No newline at end of file diff --git a/3 resources/linux/filesystems/virtual filesystem.md b/3 resources/linux/filesystems/virtual filesystem.md deleted file mode 100644 index e69de29..0000000 diff --git a/3 resources/linux/glibc.md b/3 resources/linux/glibc.md deleted file mode 100644 index 18d18e1..0000000 --- a/3 resources/linux/glibc.md +++ /dev/null @@ -1 +0,0 @@ -The GNU C standard library. \ No newline at end of file diff --git a/3 resources/linux/lsof.md b/3 resources/linux/lsof.md deleted file mode 100644 index e95b968..0000000 --- a/3 resources/linux/lsof.md +++ /dev/null @@ -1,65 +0,0 @@ -``` -lsof -p 1111 # show open files for this PID -lsof /path/to/file # show which process has this open -``` - -A usage in the wild; using lsof to find the qemu process for a specific base image and using that to get instance name and disk path: -``` -lsof -F p {{ item['path'] }} | cut -b 2- | head -1 | xargs ps | grep -oP '(instance\\-[a-z0-9]+)|(\\/var\\/lib\\/nova\\/instances\\/[a-z0-9\\-]+\\/disk)' | uniq -``` - -(man lsof: search "OUTPUT FOR OTHER PROGRAMS") -output for other programs -``` -specify -F -These are the fields that lsof will produce. The single character listed first is the field identifier. - a file access mode - c process command name (all characters from proc or - user structure) - C file structure share count - d file's device character code - D file's major/minor device number (0x) - f file descriptor (always selected) - F file structure address (0x) - G file flaGs (0x; names if +fg follows) - g process group ID - i file's inode number - K tasK ID - k link count - l file's lock status - L process login name - m marker between repeated output - M the task comMand name - n file name, comment, Internet address - N node identifier (ox - o file's offset (decimal) - p process ID (always selected) - P protocol name - r raw device number (0x) - R parent process ID - s file's size (decimal) - S file's stream identification - t file's type - T TCP/TPI information, identified by prefixes (the - `=' is part of the prefix): - QR= - QS= - SO= (not all dialects) - SS= (not all dialects) - ST= - TF= (not all dialects) - WR= (not all dialects) - WW= (not all dialects) - (TCP/TPI information isn't reported for all supported - UNIX dialects. The -h or -? help output for the - -T option will show what TCP/TPI reporting can be - requested.) - u process user ID - z Solaris 10 and higher zone name - Z SELinux security context (inhibited when SELinux is disabled) - 0 use NUL field terminator character in place of NL - 1-9 dialect-specific field identifiers (The output - of -F? identifies the information to be found - in dialect-specific fields.) - -``` \ No newline at end of file diff --git a/3 resources/linux/man pages.md b/3 resources/linux/man pages.md deleted file mode 100644 index 576d4b8..0000000 --- a/3 resources/linux/man pages.md +++ /dev/null @@ -1,2 +0,0 @@ -I need to more consistently read man pages. Example is `man task` to see how taskwarrior works, after reading it today I found that it is actually quite easy. -They often contain good information on how to use a certain tool. \ No newline at end of file diff --git a/3 resources/linux/networking/DHCP.md b/3 resources/linux/networking/DHCP.md new file mode 100644 index 0000000..e7e8e38 --- /dev/null +++ b/3 resources/linux/networking/DHCP.md @@ -0,0 +1,5 @@ +#networking #linux + +--- +Dynamic Host Configuration Protocol +Allows hosts dynamically receive an IP address. \ No newline at end of file diff --git a/3 resources/linux/networking/IP masquerade.md b/3 resources/linux/networking/IP masquerade.md new file mode 100644 index 0000000..2ccc8e6 --- /dev/null +++ b/3 resources/linux/networking/IP masquerade.md @@ -0,0 +1,17 @@ +#linux #networking + +--- +A function in the kernel that allows guests with internal/private IPs to access the internet by using the hosts' public IP similar to 1 to many NAT. + +Differences with Proxy, IP Masq, NAT: + +**Proxy** +Requires special configuration on internal client side. Can be used for caching. + +**IP Masq** +A form of NAT used primarily in Linux devices. Translates IP address and uses the connection tracking table and ports to map responses back to the internal connection. + +**NAT** +Has different types with different use-cases. +Static NAT: 1-1 mapping of pub/private IP. Dynamic NAT: pool of pub ips to dynamically map private IPs to based on availability. +PAT (Port): similar to IP Masq; 1-many using ports. \ No newline at end of file diff --git a/3 resources/linux/networking/PXE.md b/3 resources/linux/networking/PXE.md new file mode 100644 index 0000000..d5fe4d1 --- /dev/null +++ b/3 resources/linux/networking/PXE.md @@ -0,0 +1,18 @@ +#linux #pxe + +--- +The NBP is a bootloader that is obtained via the network typically via [[TFTP]]. It handles setting up an environment in which an OS can run or install. For example, it displays a boot menu and downloads the kernel images. It sets up hardware, for example the [[NIC]]s. + +PXE boot process: +1. Modified [[DHCP]] request: request to include boot information (PXE boot request). +2. Process DHCP response which includes an IP address of [[TFTP]] server and filename of [[NBP]]. +3. Download NBP over TFTP. +4. NBP executes + 1. Loads additional stuff over network, like kernel images. + 2. Handles the boot menu +5. Kernel takes over boot process and potentially downloads additional files required to complete booting. + +Popular NBP's: +- PXELINUX +- iPXE +- GRUB2 diff --git a/3 resources/linux/networking/dhcp.md b/3 resources/linux/networking/dhcp.md deleted file mode 100644 index e426d6f..0000000 --- a/3 resources/linux/networking/dhcp.md +++ /dev/null @@ -1,4 +0,0 @@ -Dynamic Host Configuration Protocol -Allows hosts dynamically receive an IP address. - -[[TODO]] learn exactly how it works \ No newline at end of file diff --git a/3 resources/linux/networking/ip-masquerade-nat.md b/3 resources/linux/networking/ip-masquerade-nat.md deleted file mode 100644 index 8b722f4..0000000 --- a/3 resources/linux/networking/ip-masquerade-nat.md +++ /dev/null @@ -1,14 +0,0 @@ -A function in the kernel that allows guests with internal/private IPs to access the internet by using the hosts' public IP similar to 1 to many NAT. - -Differences with Proxy, IP Masq, NAT: - -**Proxy** -Requires special configuration on internal client side. Can be used for caching. - -**IP Masq** -A form of NAT used primarily in Linux devices. Translates IP address and uses the connection tracking table and ports to map responses back to the internal connection. - -**NAT** -Has different types with different use-cases. -Static NAT: 1-1 mapping of pub/private IP. Dynamic NAT: pool of pub ips to dynamically map private IPs to based on availability. -PAT (Port): similar to IP Masq; 1-many using ports. \ No newline at end of file diff --git a/3 resources/linux/networking/nbp.md b/3 resources/linux/networking/nbp.md deleted file mode 100644 index 19676ea..0000000 --- a/3 resources/linux/networking/nbp.md +++ /dev/null @@ -1,3 +0,0 @@ -Network Bootstrap Program - -Is a bootloader that is obtained via the network typically via [[TFTP]]. It handles setting up an environment in which an OS can run or install. For example, it displays a boot menu and downloads the kernel images. It sets up hardware, for example the [[NIC]]s. \ No newline at end of file diff --git a/3 resources/linux/networking/pxe-boot.md b/3 resources/linux/networking/pxe-boot.md deleted file mode 100644 index d532ac3..0000000 --- a/3 resources/linux/networking/pxe-boot.md +++ /dev/null @@ -1,15 +0,0 @@ -PXE = Preboot Execution Environment. - -PXE boot process: -1. Modified [[DHCP]] request: request to include boot information (PXE boot request). -2. Process DHCP response which includes an IP address of [[TFTP]] server and filename of [[NBP]]. -3. Download NBP over TFTP. -4. NBP executes - 1. Loads additional stuff over network, like kernel images. - 2. Handles the boot menu -5. Kernel takes over boot process and potentially downloads additional files required to complete booting. - -Popular NBP's: -- PXELINUX -- iPXE -- GRUB2 diff --git a/3 resources/linux/networking/udp.md b/3 resources/linux/networking/udp.md deleted file mode 100644 index e69de29..0000000 diff --git a/3 resources/linux/nic.md b/3 resources/linux/nic.md deleted file mode 100644 index 592ad1c..0000000 --- a/3 resources/linux/nic.md +++ /dev/null @@ -1 +0,0 @@ -Network Interface Card \ No newline at end of file diff --git a/3 resources/linux/shared anonymous memory mappings.md b/3 resources/linux/shared anonymous memory mappings.md deleted file mode 100644 index 71d1cfc..0000000 --- a/3 resources/linux/shared anonymous memory mappings.md +++ /dev/null @@ -1,2 +0,0 @@ -[[TODO]] -Linux API book: chapter 49 \ No newline at end of file diff --git a/3 resources/linux/system v shared memory.md b/3 resources/linux/system v shared memory.md deleted file mode 100644 index d1f690d..0000000 --- a/3 resources/linux/system v shared memory.md +++ /dev/null @@ -1,2 +0,0 @@ -[[TODO]] -Linux API book chapter 48 \ No newline at end of file diff --git a/3 resources/linux/tftp.md b/3 resources/linux/tftp.md deleted file mode 100644 index 259fdec..0000000 --- a/3 resources/linux/tftp.md +++ /dev/null @@ -1,2 +0,0 @@ -Trivial File Transfer Protocol -[[TODO]] \ No newline at end of file -- cgit v1.2.3