Skip to content

Instantly share code, notes, and snippets.

@nyxz
Created June 15, 2016 15:32
Show Gist options
  • Save nyxz/3836e2b0ca49196964aada2e4186c969 to your computer and use it in GitHub Desktop.
Save nyxz/3836e2b0ca49196964aada2e4186c969 to your computer and use it in GitHub Desktop.
# Това за записки на Н. Георгиев от курса по
# GNU/Linux system and network administration - A. Velin
# Записките са правени в лекциите по слайдове, затова на места има само нахвърляни някакви точки, именца и т.н.
# Сиреч още много има за четене, което не е записано тук.
# Също така не претендирам, че съм записал точно всичко, така че не разчитайте на 100% на записките.
# Местата с въпросителни ???? значат, че не съм записал нещо от слайдовете най-вероятно.
Unix -многозадачна потребителска ОС- 1969 :Започва като страничен проект след провала на Multix. Съзаден от Ken Thompsom, Denis Ritchie, Brain Kernighan. 1973 Unix е пренаписан на C.
Трите основни правила (леми):
1. Всичко в операционната система е фаил
2. Създават се малки специализирани програмини(не големи)
3. Всичко в конфигурацията е текстов фаил ползващ ASCII (American Standard Code for Information Interchange - Американски стандартен код за обмяна на информация)
Standart streams
Тук намерих картинката от слаидовете:)
Richard Stallman
* GNU (GNU`s Not Unix)(1983) пример за рекурсия
* FSF(Free Software Foundation)(1985)
* GNU GPL(General Public License)
o Guarantees that free software remains free
o All software under the GPL make source available to the end user
o Changes to a GPL`d software package must also be licensed under GPL
o Source code from one GPL`d software package can be incorporated in to other GPL`d software
* Alix / Hurd - това не ми стана много ясно какво е точно само съм записал ,че е разработка на някакъв kernel
Ядрото (kernel) на GNU - Hurd подлежи на дълъг процес на разработка, за това се използва Linux за kernel на GNU.
The Free Software Definitoin - идеята е че free се употребява в смисъл на Свободен, не на Безплатен
- тук триябва да е дефиницията , но :) липсва
Книгата която ни препоръчаха : Free as in Freedom: Richard Stallman`s Crusade for Free Software
Linux Kernel
* Linus Torvalds - създателя на Linux ядрото
* Minix - Unix операционна систем използвана с учебна цел
* Th Linux Kernel
o re-implementation of the UNIX API`s
o GPL license
* GNU/Linux
* GNU/Hurd
* GNU/kFreeBSD
Standards - видове стандарти
* Posix (Portable Operating System Interface for Unix)
* Single Unix Specification - SUS
* Filesystem Hierarchy Standard - FHS
* Linux Standards Base - LSB - включва FHS като я надгражда
Видове дистрибуции ( по-известните)
* Slackware linux - най-старата все още подържана дистрибуция Patrick Volkerding
* Debian
o стреми се да подържа високо ниво на GPL
o няма определена компания която да разработва дистрибуцията
o силно автоматизиран софуер
* Ubuntu - базирана на Debian GNU/Linux ( Ubuntu - humanity towards others)
* mint - базирана на Ubuntu, още по user friendly
* Suse Linux и openSuse - openSuse e отворена дистрибуция на Suse
* Red Hat Enterprise Linux distributions и Fedora - Fedora е отворената дистрибуция на Red Hat
* centOS - взима кода на Red Hat Enterprise Linux distributions и го пуска под GPL
* free BSD - това е Unix не е Linux
Login - процес на достъп до OS
* Serial Terminals - текстово базиран
* Virtual Terminals - текстово базиран
* Network login - текстово базиран
* GUI login (Graphic User Interface)
* UID - user ID
* UID 0 - сервизен потребител (root) privilege user - root , UID0
*
Switching User
* su - change ID user or become super user
* su -, -l, --login - получаване нова login сесия
* sudo - execute a command as another user (само за една команда) , може да се конфигурира чрез допълнителен фаил
Login Session Info
* User ID (UID)
* Group ID (GID)
* pts - pseudo - terminal slave
* tty (Teletypewriter) - пълния път до терминал/сериен порт ,който се използва
* id - shows the current ID
* whoami - извежда user name
System info
* users - списък на логнати потребители
* who - show who is logged on
* w - show who is logged on
* finger - информация за потребител
* uname - a : print all system information
* free - display amount of free and user memory in the system
* hostname -
* ifconfig - config a network interface
Help
* comman --help; -h
* man [section] name
* info (GNU replacement for man)
$MANPATH, whatis and apropos
* man -f , (whatis) - display manual page description
* man -k , (apropos)
File management and manipulation
* FHS
* Linux Standards Base
FHS - The Root (/) Filesystem - стандарт
* /bin - essential user command binaries (минимален набор команди за базова работа с ОС)
* /boot - ядро на ОС, boot lader
* /dev - device файлове, през които ОС осигурява достъп до устройствата
* /etc - Host-specific system configuration (конфигурационни файлове)
* /lib - специални share libraries и kernel modules (fetures) системи
* /media - за монтиране на файлове
* /mnt
* /opt - optinal software
* /sbin - system binaries ( най-важните системни файлове за администратора) има още /usr/sbin и /usr/local/sbin
* /srv - за изграждане на дърво с файлове, които ще предлагат сървиси на други ОС
* /tmp - за временно съхранение на файлове
* /usr - вторична иерархия; в /usr/local - използва се за да се инсталират някаква програма от администратора без да ползва вече инсталирана дистрибуция
* /var - contains variable data file
До тук са задължителни. Ако може някой да ни напише кое за какво беше ще е страхотно
* /home - user home directory
* /lib<qual> - тук беше нещо за 32-bit или 64-bit ...?(ако имаме 64bit ОС може да имаме директория lib32)
* /root - home directory for the root user
а тези са optional directory
Virtual Hierarchies
* /proc - Contains process info directories and other tunables
* /sys - Exposes kernel konject data structurs
* /dev/pts - ?
Navigating the Filesystem
* cd, pwd : changing and displaying directori
* Absolute vs relativ addressing
* cd (without parameters)
* cd ~username
* cd ~ (user home directory)
* cd -
* . (текуща) and .. (по-горна директория)
Determining disk usage
* df - report disk usage per file system (1000 instead of 1024 if --si is not set )
* du - report disk usage per a file and directory
-------------------------------------------------------------------------------------- 15.10.2011
File Ownership
* chown - change the user (UID) ownership
- only root can change ownership to another user
- can also be used to change group at the same time
* chgrp - modify just the group (GID) ownership (-R - recursively)
* touch <name> - creates an empty file with "name"
Default Group Ownership
- Newly created files will usually be given GID ownership based on the current active group of the persho who creates the file
* newgrp <new_group> - log in to a new groupcd
- newly created files will be owned by the new group
- users can only change to their own groups
- root user can change to any group
- exit to switch back
- ex:
maistora@debian:~$ su - root
Password:
root@debian:~# newgrp maistora
root@debian:~# touch gosho
root@debian:~# exit
exit
root@debian:~# ls -l
total 0
-rw-r--r-- 1 root maistora 0 Oct 15 14:19 gosho
File and directory Permissions
* ls -l List file permissions <for the first symbol in drwxr-xr-x (this is directory because the first )>
- - - regular file
- b - block special file
- c - character special file
- d - directory
- i - symbolic link
- p - FIFO (named pipe)
- s - Socket
- Permission sets for:
- user - UID that owns the file (sometimes called owner)
- group - GID that owns the file
- everyone else (sometimes called "other")
- Permissions can be represented in two ways
- symbolic representations (e.g. rwxr-xr-x)
- numeric representation (e.g. 0755)
special flags
s s t | r w x | r w x | r w x |
_________________________________________
4 2 1 | 4 2 1 | 4 2 1 | 4 2 1 |
r-x - 5
rwx - 7
rw- - 6
r-- - 4
unmask
- Default permissions for newly created filesystem objects
- files: 666
- directorie: 777
* umask
- defines what permissions to withhold from the default permissions
- дефинира каква стойност ще се извади от стандартната стойност за да получим правата които искаме
Changing file Permissions
* chmod - Modify the permissions
- -R - recursively modify permissions
- supports both numeric and symbolic notation
- special permissions
- set UID (SUID) - A program is executed with the file owner`s permissions (rather than with the permissions of the user who executes it).
- ex. : password change (only root can write in the file with the passwords but a user can change his pass too)
- set GID (SGID)
- sticky
- Special permissions cause different behavior for files and directories
- user , group , others, all
- chmod u=wrx,g=r-x
- read - the permission to see the file
- execute - to meke this file current file
- write - the permission to change objects in the file
- set special user flag - if it is set, when some other user Pencho executes the file it changes the permissions to one that created the file
and have permissions to execute it.
<set user ID on execution>
-rwsr-xr-x - the "s" is the set flag
-rwSr-xr-x - if it is capital "S" = something is wrong
* passwd - changes the password
* which passwd - shows where the command is stored </usr/bin/passwd>
SGID and Sticky Bit on Directories
- SGID
-
- Sticky bit
- Normally in a directory that is world writable, sers can delete each other`s files. Setting the sticky bit overrides this behavior.
- If I create a file in a dir and somebody else also creates file in the same dir if the sticky bit is set I can delete only my files
and the other guy can delete only his.
User private group scheme
- UPG provides a convenient way to share files working in a group project directory
- UPG scheme implemented by:
- placing each uer in their own private group
- setting the umask to 0002
- setting the group ownership of the project directory to a commonly shared GID
- setting the project directory SGID
Directory and file manipulation
* mkdir - creates directories
- mkdir -p - make parent directories as needed
- mkdir -m - set permission mode
* rmdir - deletes empty directories
* cp - copies files and directories
* mv - moves or renames files and directories
* rm - remove (deletes) files and directories < rm -RF - ATTENTION!!! remove recursively forced>
* touch - creates empty files or pudates mtime and atime on existing files
- mtime - last modification time
- atime - last time accessed
- ctime - creation time
Physical Unix File Structure
- Block and inode based
- blocks hold data
- inodes hold metadata
- permissions on the file
- access, modification and creation times for the file
- owner of the file
- size in bytes of the file
- blocks occupied by the file
- link count (names of the file)
- inode number
- directories (are files that) hold filenames and inodes
- Superblock contains filesystem parameters
- How many inodes, etc...
Filesystem link
- Created with * ln
- ln [OPTION] ... TARGET LINK_NAME
<it is recomended to use absolute path>
- Hard links - a directory entry that references the same inode as another directory entry
- can`t span filesystems (no hard-links between diff filesystems because they have their own pools with inodes)
- can`t create hard links to non-existent file
- can`t reference directories
- do not occupy storage space (i.e. blocks)
- Symbolic links -a file that references another file via path and name (ln -s)
- can reference directories
- can span filesystems
- can reference non-existent files
- occupy space
* ln -i
File extnsions and content <NO SUCH THING>
- The system looks in the header to understand the file type
- File extensions have no special meaning to the kernel
- file extensions are just part of the file name
- the kernel only distinguishes between executable non-executable (data) files
- some application may care about extensions or otherwise use them for user convenience features
- apache,file managers like Midnight Commander, OpenOffice.org/KOffice
- * file - reports the type of file by examining the file contents
Displaying text files
* cat - displays entire file(s) (better for text files)
* more - displays file(s) one screen at a time
* less - more sophisticated and configurable pager
* head - displays first 10 (by default) lines of file
* tail - displays last 10 (by default) lines of file
- tail -f - to watch a file be appended to <continuous file reading>
* -n option -
- pager - cut a text to pages (cat, more, less)
Displaying binary files
- Displaying raw binary data may corrupt the display terminal
* reset - corrects terminal
- [Ctrl-J] reset [Ctrl-J] (if carriage-return fails)
- Why J? - Because in ASCII J = ENTER
* strings - displays ASCII text inside binary files <in binutils - apt-get install binutils> dpkg -S `which strings`
* xxd - displays HEX and ASCII dump of file
* clear - clear the terminal screen
Searching the filesystem
* find - searches a directory structure
- First argument(s) are path(s) to start search from;
- Next arguments specify criteria to search on: file name, size, permissions, type, owner, group, atime, mtime, ctime
Last argumet specifies action to perform.
- *-print - is the default action and displays matches
- *-ls - displays full detail on matches
- *-exec - allows a command to be run against each matching file. The -ok can be used when confirmation prompt is desired.
* lookat - searches in DB which updates every 24 hours. Saves only filenames!!!
Alternate Search Method
* locate - High-speed and low- ????
???????
Manually Installed Shared Libraries
- Check for library dependencies with the "ldd" commnad
* ld-linux.so - locates libraries to link to
- /etc/ld.so.conf
- /etc/ld.so.conf.d/
- /etc/ld.so.cache
- Run ldconfig command after installation of new libraries
Archives with "tar" <tape archivator>
* tar
- manipulates .tar files, also called tarballs
- used for backup and transfer of files
- creates, extracts or lists the contents of tarballs
* c, x, t, f, v <cvf> or <cvfz>
- c - create
- v - verbose
- f - file <uses "file" not a "tape" (лента)>
- always use "f" option to
- GNU tar supports three built-in compression methods
- .tar (tarball)
- records file and directory structure
- includes metadata about the file: date, timestamps, ownership, permissions, etc.
- Comparession options
- compress, gzip, bzip2, lzma
Archives with cpio (трябва му списък от файловете)
- manipulates .cpio files
- used as the basis for RPM packages
- doesn`t recurse sub-directories, must be passed list of directories
- more rebust that tar when media errors encountered
- -i - input mode, used when feeding a cpio archive into the cpio command <input> (разархивиране)
- -o - output mode, used to create cpio archives, which are sent to STDOUT <output> (архивиране)
The gzip compression Utillity
* gzip - popular replacement for compress
- created by the GNU project beacause of patented algorithms in compress
- default action deletes original after creating new compressed file
- standard file extension: .gz
- much higher compression ration than compress
* gunzip or zcat decompresses files compressed with gzip
- gunzip - decompresses the file on disk (removing the original, compressed file);
- zcat - outputs uncompressed data to STDOUT
The bzip2 Compression Utility
* bzip2 typically better compression than the gzip command
- typically better compression ????
- ?????????????????????????????????
The PKZIP Archiving / Compression format
* zip - Compatible with PKZIP files
- default action does NOT delete original file(s) after creating new compressed archive
- standard file extension: .zip
* unzip - expands a .zip file
-------------------------------------------------------------------------- 22.10.2011
Text processing and command line <fundamentals.03>
* cat - Contatenate files
* paste - marges text from multiple files - взема съдържанието на изредените файлове и ги слага на едно разделени с TAB
- -s - merge files serially
- uses tabs as default delimiter
File Statistics
- wc - print line , word, ad byte counts for each file
* -c, --bytes - print the byte counts
* -m, --chars - print the character counts
* -l, --lines - print the newline counts
* -w, --words - print the word counts
- ex:
maistora@maistora:~$ wc -l /etc/passwd
30 /etc/passwd
Extracting Columns of Text
* cut - Extracts selected fields from a line of text
- can specify which fields you want to extract
- uses tabs as default delimiter
* -d - specify a different delimiter
- most useful on structured input (text with columns)
- ex 1: 5-12 <показва от 5-тия до 12-тия символ на всеки ред във файла>
maistora@maistora:~$ cut -c 5-12 /etc/passwd
:x:0:0:r
on:x:1:1
x:2:2:bi
x:3:3:sy
...
- ex 2: < указваме delimiter ':' чрез -d ':' и чрез -f 1 <filename> указваме да ни изкара до 1вия delimiter на всеки ред във файл „filename“>
maistora@maistora:~$ cut -d ':' -f 1 /etc/passwd
root
daemon
bin
sys
...
- ex 3: <Изкарваме 1-ва, 3-та и 5-та колона от /etc/passwd с делимитър ':'>
maistora@maistora:~$ cut -d ':' -f 1,3,5 /etc/passwd
root:0:root
daemon:1:daemon
bin:2:bin
sys:3:sys
sync:4:sync
games:5:games
Searching inside Files
* grep - searches for patterns within files
- -n - shows line numbers
- -A NUM - prints match and NUM lines after match
- -B NUM - prints match and preceding NUM lines
- -C NUM - prints match and NUM lines before and after
- -i - preforms case insensitive match
- -v - inverts match; prints what doesn`t match
- --color - highlight matched string in color
- ex:
maistora@maistora:~$ grep -i --color SYSTEM /etc/passwd
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
hplip:x:109:7:HPLIP system user,,,:/var/run/hplip:/bin/false
- ex: < търсим повече от един pattern >
maistora@maistora:~$ grep -e false -e bash --color /etc/passwd
root:x:0:0:root:/root:/bin/bash
messagebus:x:101:103::/var/run/dbus:/bin/false
Debian-exim:x:102:104::/var/spool/exim4:/bin/false
The streaming editor
* sed - stream editor for filtering and transforming text
- usually the output of another program
- ofter used to automate edits on many files quickly
- small and very efficient
* -i - option for in place edits with modern versions
Text processing with awk
* awk - pattern scanning and processing language
- turning complete programming languate
- splits lines into fields (like cut)
- regex pattern matching (like grep)
- math operations, control statemets, variables, IO...
- ex: (показва първия и втория стринг от командата)
maistora@maistora:~$ ps -ef | awk '{print $1,$2}'
UID PID
root 1
root 2
root 3
...
File redirection
- file or I/O redirection allows you to redirect STDIN, STDOUT, and STDERR to files
- Requeres special notation on the command line
- redirect standard input with <
* $ sort < /etc/passwd
- redirect standard output with >
* $ echo 10000 > /proc/sys/fs/file-max - don`t do this
- redirect standard error with 2>
* $ ls - a1R /proc/ 2> /dev/null
- redirect both STDOUT and STDERR to the same file:
* $ ls -R /proc/ > output 2>&1
* $ ls -R /proc/ &> output
- /dev/null - черна дупка. каквото и да запишем всичко изчезва :D
- /dev/zero - можем само да четем без нищо да прочитаме ?!?!
- /dev/urandom - матрицата. връща безкрайна информация до безкрай
- ex: <от командата "ls -a1R /proc/" всички грешки се записват в errlist и на изхода излизат само данни които не хвърлят грешка>
maistora@maistora:~$ ls -a1R /proc/ 2> /home/maistora/Desktop/errlist
File redirection
- < - redirects STDIN from a file
- > - redirects STDOUT to a file (overwrite)
- >> - redirects STDOUT to a file (append)
- 2> - redirects STDERR to a file (overwrite)
- 2>> - redirects STDERR to a file (append)
- &> redirets both STDOUT and STDERR
Text sorting
* sort - sorts text
- can sort on different columns
- by default sorts in lexicographical order < 1, 2, 234, 256, 29, 3, 4, 5>
- can te told to sort numerically (by using the -n option) <1,2,3,4,5,29,234,256>
- can merge and sort multiple files simultaneously
- can sort in reverse order
- often used to prepare input for the "uniq" command
Piping Commands together
- piping allows the STDOUT from one program (on the left of the pipe) to becom the STDIN of another (on the right of the pipe) ("The Unix way")
* ls -al | less
* cut -d: -f6 /etc/passwd | sort |uniq -c |sort -rn
- Redirection and piping can be combined:
- usually used for feeding STDERR into the pipeling along with STDOUT
* ls /proc/ 2>&1 | grep kernel
- ex: ( изкарваме колоните от командата за процеси "ps -ef" от 3-та до 5-та колона като слагаме делимитър ' ' и изкарваме последните 10 реда
чрез 'tail' и изкарваме HEX кода на резултата )
maistora@maistora:~$ ps -ef | cut -d ' ' -f 3-5 | tail | xxd
0000000: 3335 3138 2020 3335 3038 0a33 3635 3620 3518 3508.3656
0000010: 2032 3432 360a 3336 3737 2020 3234 3236 2426.3677 2426
0000020: 0a33 3638 3520 2032 3432 360a 3336 3937 .3685 2426.3697
... < 7 more rows >
Replacing text characters
* tr - translates, squeezes & deletes characters
- translates one set of characters into another
- commonly used to convert lower case in to upper case
* tr a-z A-z
- squeeze collapses duplicate characters
- commonly used to merge multiple blank lines into one
* tr -s '\n'
- deletes a set of characters
- commonly used to delete special characters
* tr -d '\000'
- ex:
maistora@maistora:~$ ps -ef | tail -1 | tr -s ' ' | cut -d ' ' -f 1-3
maistora 3800 2426
Duplicate removal utility
* uniq - removes duplicate adjacent lines from sorted text
- cleanly combines lists of overlapping but not identical information
* -c - refifixes each line of output with a number indicating number of occurrences
- taking this output and performing a reverse ort produces a sorted list based on number of occurrences
- ex: ( от passwd извеждаме 7ма колона, като сортираме за да извадим броя на последователните повтарящи се редове
и след това ги сортираме по число чрез sort -n)
maistora@maistora:~$ cat /etc/passwd | cut -d ':' -f 7 |sort| uniq -c | sort -n
1 /bin/sync
2 /bin/bash
10 /bin/false
17 /bin/sh
Filename Matching
- many commands take a list
File globbing and wildcard patterns
- a wildcard pattern is a string that contains one of the characters:
- ? - matches any single character
- * - matches anything (any number of characters)
- [...] - character classes - първия знак попадащ в множеството примерно [abcd]
- the - character denotes a range
- ex: [abcd2345] [a-d2-5] [a-gA-Z0-5]
- ex: maistora@maistora:~$ ls -l /bin [bd] ash
- ex: maistora@maistora:~$ ls -l /bin/*ash ash
Brace Expansion
- allows generation of arbitrary strings
- similar to wildcards, but target files or directories don`t need to exist
- can have optional preamble and/or postamble
- {m,n,o.on} expands to: m , n , o and on
- d{m,n,o,on}t ????????????
????????????????????????????
- ex:
maistora@maistora:/tmp$ touch a{1,2}b
maistora@maistora:/tmp$ ls -l
total 28
-rw-r--r-- 1 maistora maistora 0 Oct 22 16:50 a1b
-rw-r--r-- 1 maistora maistora 0 Oct 22 16:50 a2b
General Quoting rules
- metacharacters: \ ? ( ) $ ... * % { } [ ] - escaped with \ <backslash>
- Backslash: \
- Double Quotes: " " - if environmet var is taken with "var" it takes the actual value of the "var"
- Single Quotes: ' ' - this escapes everything in it
Nesting commnads
- command substitution
- substitutes output of command in place of "embedded" command
- nesting commnads
- `command`
- $(command)
- Evluating commnad output
- eval command
- ex:
maistora@maistora:/tmp$ grep `cat /etc/passwd | cut -d ':' -f 7 |sort| uniq -c | sort -n | tail -1 | cut -d ' ' -f 7` /etc/passwd
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
....
Some usefull commands in command line:
Ctrl+A - go to the begining of the line
Ctrl+E - go to the end of the line
--------------------------------------------------------------------------------------------------- 29.10.2011
Evaluating Command Output
$ ssh-agent
SSH_AUTH_SOCK=/tmp.ssh-aqktrvn22891/agent.22891
export SSH_AUTH_SOCK
SSH_AGENT_PID=22892; export SSH_AGENT_PID;
echo Agent pid 22892;
$ eval $(ssh-agent)
Agent pid 22897
$ echo $SSH_AGENT_PID
22897
Multiple and Multi-line Commnads
- Entering multiple commmands on one commnand line
- separate commnads with a semi-color ;
- Entering multi-line commnads
- Special use of the backslash (\) to do line-wrapping
- This is sometimes called line wrapping or continuation
- ex:
maistora@maistora:~$ seq 1 10
1
2
3
4
5
6
7
8
9
10
maistora@maistora:~$ for i in `seq 1 10`; do echo b$i; done
b1
b2
b3
b4
b5
b6
b7
b8
b9
b10
maistora@maistora:~$ for i in `seq 1 10`; do \ <we press ENTER>
> echo b$i; \ <we press ENTER>
> done
b1
b2
b3
b4
b5
b6
b7
b8
b9
b10
** HW ** Хайзенбег бъг - Бъг който се променя когато се опиташ да го изследваш.
Regular expression
- Regular expressions (REs) provide a mechanism to select specific strings from one or more lines of text
- complex language
- grep, sed, perl...
- man 7 regex = man regex(7)
Regular Expressions
- most characters, letters and numbers match themselves
- special characters are matchable
- . matches any single character
- specify where the match must occur with anchors
Re Secial characters
- \t - tab
- \n - newline / line feed - 10 ASCII (LF - line feed)
- \r - carriage return - 13 ASCII (CR - carriage return)
- \f - form feed
- \c - control characters
- \x - character in hex
- . - any single character
Кой е 10 и кой е 13 в ASCII?
RE Anchors
- ^RE - anchor RE at start of line
- RE$ - anchor RE at end of line
- \<RE - anchor RE at start of word
- RE\> - anchor RE at end of word
RE character classes
- Character classes, [...], match any single character in the list
- RE [0123456789] = [0-9] - matches any single digit
- Some predefined character classes
- [:alnum:] [:alpha:] [cntrl:] [:digit:]
- ?????????
RE character classes
- [:alnum:] letters and digits
- [:alpha:] letters
- [:cntrl:] control characters
- [:digit:] digits
- [:graph:] printable characters (w/o space)
- [:lower:] lower case letters
- [:upper:] lower case letters
- [:print:] printable characters
- ??????
RE Character Class examples
* grep [[:upper:]] /etc/passwd
- ex:
maistora@maistora:~$ grep [[:upper:]] /etc/passwd --color
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
Debian-exim:x:102:104::/var/spool/exim4:/bin/false
avahi-autoipd:x:104:107:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:105:108:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
Debian-gdm:x:107:115:Gnome Display Manager:/var/lib/gdm3:/bin/false
hplip:x:109:7:HPLIP system user,,,:/var/run/hplip:/bin/false
haldaemon:x:110:118:Hardware abstraction layer,,,:/var/run/hald:/bin/false
* egrep '^[rb]' /etc/passwd - началото на реда ще започва или с r или с b
- ex:
maistora@maistora:~$ grep '^[rb]' /etc/passwd --color
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:bin:/bin:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
- ex: - всички които започват с r или b и за втори символ имат o или i
maistora@maistora:~$ egrep '^[rb][oi]' /etc/passwd --color
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:bin:/bin:/bin/sh
- ex: -
maistora@maistora:~$ egrep '^.[oi]' /etc/passwd --color
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:bin:/bin:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
* egrep '^[^rb]' /etc/passwd - всички които не започват с r или b
- ex: -
maistora@maistora:~$ egrep '^[^rb]' --color /etc/passwd
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
messagebus:x:101:103::/var/run/dbus:/bin/false
Debian-exim:x:102:104::/var/spool/exim4:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
avahi-autoipd:x:104:107:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:105:108:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
usbmux:x:106:46:usbmux daemon,,,:/home/usbmux:/bin/false
Debian-gdm:x:107:115:Gnome Display Manager:/var/lib/gdm3:/bin/false
saned:x:108:117::/home/saned:/bin/false
hplip:x:109:7:HPLIP system user,,,:/var/run/hplip:/bin/false
maistora:x:1000:1000:maistora,,,:/home/maistora:/bin/bash
haldaemon:x:110:118:Hardware abstraction layer,,,:/var/run/hald:/bin/false
RE Quantifiers
- Control the number of times a preceding RE is allowed to match
- * - match 0 or more times
- + - match 1 or more times
- ? - match 0 or 1 times
- {n} - match exactly n times
- {n,} - match at least n times
- {n,m} - match between n and m times
RE Quantifiers
$ egrep '^[stu].{14}$' /usr/share/dict/words - starts with s or t or u, then 14 random symbols and end of line
$ egrep '^[auiou].{9}ion$' /usr/share/dict/words - starts with a or u or i or o or u then 9 randoms and ends with ion and end of line
$ egrep '^c.{15,}$' /usr/share/dict/words - starts with c then at least 15 randoms and end of line
$ egrep '^n.{6,10}c$' /usr/share/dict/words - starts with n then from 6 to 10 randoms and then c and end of line
RE parenthesis
- (RE) - creating a new atom
- (RE)\non-zero digit storing values
- (RE1 | RE2) - alternation: RE1 or RE2
- abc{3} vs. (abc){3}
- abc{3} = abccc
- (abc){3} = abcabcabc
$ cat file
- Parenthesis allow you to store matched patterns.
$ sed -r 's/(.)\1/\[\1\1]/g' file - между първите /../ какво ще мачваме а между вторите с какво ще замениме.
- ТОВА ПРОМЕНЯ САМО ИЗХОДА, не променя самия файл.
- като намери 2 еднакви букви една до др ги загради в квадратни скобки
- /g - global
- s - ???
Parenthesis a[11]ow you to store matched pa[tt]rns.
* egrep '(dog|cat)' file
- ex:
maistora@maistora:~/Desktop$ egrep '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])' ifconfig.log --color
inet addr:127.0.0.1 Mask:255.0.0.0
inet addr:10.2.4.6 Bcast:10.2.255.255 Mask:255.255.0.0
- better ex:
egrep '([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])' ifconfig.log --color
Text Editing
- Unix Revolves around text
- text is rebust
- text is universally understood
- the only tool / program required is a text editor
- remote administration possible over lol-bandwidth connections
- Text editors
- many editors available, each with fanatical followings
- Pico/Nano, vi and Emacs are the most common
- $EDITOR control default editor
vi / vim
- vi - The visual Editor
- developed originally by Bill Joy for BSD UNIX
- Officially included in AT ?????????
?????????????????
vi help
- Books & Cheat Sheets
- :help - Vim has extensive online help
- http:// ????
Basic vi commands
- Modes
- Insert Mode: keystrokes are interested into the document
- Cammand Mode: keystrokes are interpreted as commands
- Basic Cursor Movement Commands
- hjkl
- Basic Editing Commands
- i a [ESC] x dd
- Saving & Exiting
- :w
- :q
- :wq
- :wq!
-------------------------------------------------------------------------------------------------------------------------------------- 5.11.2011
Process
- A process is a launched program
- application
- process
- thread
- Associated with a process:
- precess ID (PID)
- priority
- nice value
- memory
- security context
- environment
- file handles
Process Creation
- Processes are organized in a hierarchy
- init
- first process spawned by kernel with PID of 1
- the only process directly launched by the kernel
- init will spawn child processes
- child processes spawn other children which can spawn other children, etc...
- Processes can be created by two methods
- fork() - create duplicate of self (as a child process)
- exec() - spawn completely new process
Process States
- Processes can trasition between states upon recipt of signals
- RUNNING - currently running
- INTERRUPTABLE - sleeping but can be woken up
- UNINTERRUPTABLE - sleeping but can not be woken up
- ZOMBIE - terminated but its status was not collected
- STOPPED - stopped by a debugger or job control
Process state condes
- D - uninterruptible sleep (usually IO)
- R - running or runnable (on run queue)
- S - interruptible sleep (waiting for an event to complete)
- T - stopped, either by a job control signal or because it is being traced
- W - paging (not valid since the 2.6.xxx kernel)
- X - dead (should never be seen)
- Z - defunct ("zombie") process, terminated but not reaped by its parent
Viewing Processes
* ps - standard process listing tool
- User /proc/ as information source
- Can customize displayed output
- Supports BSD (aux) and SysV options (eaf)
* pgrep - ps and * grep combined
* pstree
- Shows process tree
* top / htop
- Provides summary information and stats on each running process in real-time fashion
* jobs
- Displays backgrounded/suspended processes invoked from shell
ex: show all processes with ps
maistora@maistora:~$ ps -aef
ex: using top - very cool, see man
maistora@maistora:~$ top
ex: ps -ef
- columns:
- UID - user ID - owner
- PID - process ID
- PPID - parent process ID
- C - cpu utilization (не е сигурно че е това)
- STIME -
- TTY -
- TIME -
- CMD -
****** HW - с какво се занимава kthreadd (от *ps -ef втория процес)
- ans: - kthreadd() is main function (and main loop) of daemon kthreadd which is a kernel thread daemon, the parent of all other kernel threads.
****** HW - как изглежда ASCII таблицата (pstree и pstree | less - разлика на output-a)
- ans: - като се извика pstree | less - less форматира текста така че да е удобнен за която и да е команда в следващия pipe
****** HW:
ex: от top командата load average 5/10/15 min - въпрос за работа в GOOGLE
-ans: http://www.linuxjournal.com/article/9001
-
Самият той е доста гадна величина...
Точното значение е "в последните 5, 10, 15 минути през цялото време
колко процеси са били runnable, т.е. било е възможно да работят". Това
включва процеси, чакащи за I/O и процеси, чакащи за процесорно време.
От това има няколко нетривиални последици, които лесно може да видите
тестово. Ако си монтирате произволна мрежова файлова система (nfs, smb,
cifs), започнете да работите с нея и си откачите мрежата, то всеки
процес, който ги ползва в момента, ще качи с 1 loadavg. Нещо подобно
може да се получи с откачени/умрели/бавни дискове.
В повечето случаи loadavg помага за начален поглед в/у машината, т.е.
"има ли нещо нередно", но рядко може да е полезен за нещо повече.
(също така, поне по последни мои спомени в повечето случаи като стигне
1024 и се превърта, но това много рядко може да се види)
*top:
Cpu(s):
us - users cpu usage
sy - system
ni - nice
id - ....
Signals
- Special message that can be sent to a process
- Processes can install signal handlers that catch signals and trigger some action
- Signals can have different meanings on different architectures
- Some signals cannot be caught or ignored and are processed by the kernel (SIGKILL (9))
Signal - man page
- signal (7)
* SIGHUB (1) - terminate - Hangup detected on controlling terminal or death of controlling process
* SIGINT (2) - terminate - Interrupt from keyboard (Ctrl-C)
* SIGQUIT (3) - terminate & dump core - Quit from keyboard
* SIGKILL (9) - terminate - Kill signal
* SIGSEGV (11) - terminate & dump core - Invalid memory reference
* SIGTERM (15) - terminate - Termination signal
* SIGSTOP (19) - stop - Stop process (Ctrl-Z)
How to send signals
* kill - send arbitrary signals to process by PID
- sends a SIGTERM (15) by default
- -l - lists all signlas supported on the machine
* killall - send signal to process by name
* pkill - send signal to process by terminal, group, username, PID, or command name
- From keyboard
- Ctrl-c = SIGINT (2)
- Ctrl-z = SIGSTOP (19)
Process Scheduling
- nice value [-20, 19] - колко този процес ще бъде най-очтив към другите процеси. Колкото по-голямо е числото толкова по-малко ресурси взема процеса
и е по-добър за другите процеси.
- потребителя може да променя своя процес, но само като увеличава числото, не може да го намалява (не може да става по-нахален).
-Launch a process with an adjusted scheduling priority:
* nice <name>
* nice -n 15 <name>
* nice -n -10 <name>
- Modify the scheduling priority of a running process:
* renice 10 <pid>
* renice -10 <pid>
* renice 0 -p <pid>
Job control
- job control refers to the ability to selectively stop (suspend) the execution of processes and continue (resume) their execution at a later point.
- The Linux kernel supports job control functions
- These functions are exposed to the user via the shell (ex. bash)
- Job control .. ????
Jobs
- Start a process as a background process by running * <program> & (ако има някакъв stdout той ще излиза на нашия екран. може да го редиректнем към файл)
- Stop an already running process by sending it a SIGSTOP (19), (Ctrl-Z)
- fg - run the job in the foreground
- bg - run the job in the background
- kill - terminate the job
- Refer to jobs using %n where 'n' is the job number
- %1 = fg 1
- %1 & = bg 1
- The jobs command will list all jobs present on the shell but can not list jobs for other shells
- Работи само за текущия shell
ex: tail -f (заради -f е да чете постоянно от файла и да обновява)
maistora@maistora:~$ logger aasdf - makes entries in the system log.
maistora@maistora:~$ tail -f /var/log/syslog
Nov 5 15:24:50 maistora avahi-daemon[1240]: Received response from host 10.255.3.21 with invalid source port 49627 on interface 'wlan0.0'
Nov 5 15:24:51 maistora avahi-daemon[1240]: Received response from host 10.255.3.21 with invalid source port 49627 on interface 'wlan0.0'
Nov 5 15:24:52 maistora avahi-daemon[1240]: Received response from host 10.255.3.21 with invalid source port 49627 on interface 'wlan0.0'
Nov 5 15:24:53 maistora kernel: [ 7543.540040] eth0: auto-negotiating...
Nov 5 15:24:53 maistora avahi-daemon[1240]: Received response from host 10.255.3.21 with invalid source port 49627 on interface 'wlan0.0'
Nov 5 15:25:03 maistora kernel: [ 7553.564030] eth0: auto-negotiating...
Nov 5 15:25:13 maistora kernel: [ 7563.588039] eth0: auto-negotiating...
Nov 5 15:25:23 maistora kernel: [ 7573.612030] eth0: auto-negotiating...
Nov 5 15:25:33 maistora kernel: [ 7583.636027] eth0: auto-negotiating...
Nov 5 15:25:43 maistora kernel: [ 7593.660030] eth0: auto-negotiating...
Nov 5 15:25:53 maistora kernel: [ 7603.684041] eth0: auto-negotiating...
Nov 5 15:26:03 maistora kernel: [ 7613.708028] eth0: auto-negotiating...
Nov 5 15:26:13 maistora kernel: [ 7623.732029] eth0: auto-negotiating...
Nov 5 15:27:02 maistora maistora: aasdf - ЕТО ТУКА Е
// CTRL + Z
^Z
[1]+ Stopped tail -f /var/log/syslog
maistora@maistora:~$ jobs
[1]+ Stopped tail -f /var/log/syslog
maistora@maistora:~$ jobs
[1]+ Stopped tail -f /var/log/syslog
maistora@maistora:~$ fg 1
tail -f /var/log/syslog
Nov 5 15:29:03 maistora kernel: [ 7794.140032] eth0: auto-negotiating...
Nov 5 15:29:13 maistora kernel: [ 7804.164029] eth0: auto-negotiating...
Nov 5 15:29:23 maistora kernel: [ 7814.188029] eth0: auto-negotiating...
Nov 5 15:29:33 maistora kernel: [ 7824.212029] eth0: auto-negotiating...
Nov 5 15:29:43 maistora kernel: [ 7834.236028] eth0: auto-negotiating...
Nov 5 15:29:53 maistora kernel: [ 7844.260030] eth0: auto-negotiating...
Nov 5 15:30:03 maistora kernel: [ 7854.284030] eth0: auto-negotiating...
Nov 5 15:30:13 maistora kernel: [ 7864.308030] eth0: auto-negotiating...
Nov 5 15:30:23 maistora kernel: [ 7874.332035] eth0: auto-negotiating...
Nov 5 15:30:33 maistora kernel: [ 7884.356026] eth0: auto-negotiating...
^Z
[1]+ Stopped tail -f /var/log/syslog
maistora@maistora:~$ jobs
[1]+ Stopped tail -f /var/log/syslog
maistora@maistora:~$ bg 1
[1]+ tail -f /var/log/syslog &
Nov 5 15:30:43 maistora kernel: [ 7894.380030] eth0: auto-negotiating...
Nov 5 15:30:53 maistora kernel: [ 7904.404037] eth0: auto-negotiating...
maistora@maistora:~$ Nov 5 15:31:04 maistora kernel: [ 7914.428029] eth0: auto-negotiating...
Nov 5 15:31:14 maistora kernel: [ 7924.452056] eth0: auto-negotiating...
Nov 5 15:31:24 maistora kernel: [ 7934.476034] eth0: auto-negotiating...
Nov 5 15:31:34 maistora kernel: [ 7944.500028] eth0: auto-negotiating...
Nov 5 15:31:44 maistora kernel: [ 7954.524040] eth0: auto-negotiating...
Process
------------
T - Stopped
S - Sleeping
R - Running (FG/BG)
Ctrl-Z - Stopped
Ctrl-C - Изпраща SIGINT и се надяваме програмиста да е написал handler за него и това да изключи програмата по нормалния път. Ако не е направил се извиква по default SIGINT(2) което terminate-ва приложението. Може да се извика SIGQUIT (3) което ще го terminate-не и ще го dump-не и няма да може да се дебъгне. А програмиста може да е написал handler за прихващане на тези 2 сигнала и да не прави нищо с тях. В този случай нищо няма да се получи от Ctrl-C. В този случай трябва да използваме нещо по-силно за да го изключим - kill.
1) dump-ването представлява копиране на паметта на процеса в един файл,
т.нар. core dump (който най-често се казва core и се сипва в текущата
директория). Той се използва за дебъгване на гръмнали приложения.
2) Сигналите си имат default-но поведение, което е описано в signal(7).
Всички без няколко специфични прекратяват работата на приложението, ако
не са прихванати. Няколко от тях водят и до core dump (SIGSEGV, SIGBUS).
3) Стандартният convention за ползване на сигнали изглежда горе-долу по
следния начин:
SIGINT, SIGTERM прекратяват приложението и по принцип могат да се
прихванат, за да се направят някакви cleanup операции. Рядко се
игнорират, но се случва cleanup-а да се забави.
SIGKILL не може да се прихване от нищо (обработва се директно от ядрото
и убива приложението)
SIGSEGV, SIGBUS и компания се подават при опити за достъп на
несъществуваща памет и по принцип не се препоръчва да се прихващат,
освен ако не се използват за специфични (извратени) случаи, така че да
се получи coredump и хората да могат да дебъгват на спокойствие.
SIGHUP прекратява конзолните приложения (подобно на SIGINT), и се
използва в демони и други процеси за чисто контролен сигнал (да им се
каже да си презаредят конфигурационните файлове например). (някъде
по-горе беше объркан със sighub, по принцип идва от hang-up, като
затваряне на телефонната слушалка)
Command shell
- user-interface
- access to filesystem
- scriptability for task automation
- program launchinng
- process control interface
Shells
- Thompson Shell (sh) - Ken Thompson, 1971, AT&T
- Bourne Shell (sh) - Stephen Bourne, 1977, AT&T - Всички след него гледат на него като стандарт
- C Shell (csh) - Bill Joy, 1978, BSD
- Korn Shell (ksh) - David Korn, 1983, AT&T
- Enhanced C Shell (tcsh) - Ken Geer, 1975-1983, CMU
- Bourne Again Shell (bash) - Brian Fox, 1989, GNU
- Z Shell (zsh) - Paul Falstad, 1990, Princeton - По-лек и прост от bash
- Debian Almquist Shell (dash) - port of NetBSD ash to Linux by Herbert Xu 1997, renamed dash 2002
which shell?
- Login shell name stored in $SHELL environment variable
- Identifying the login shell:
* echo $SHELL
- Identifying the current shell:
* ps -f
Changing the shell
- Use the shell name to invoke that shell (ex: * dash)
- Changinng login shell permanently
- Edit the /etc/passwd entry for that user
* chsh - (change shell) available to normal users
- /etc/shells - contains list of allowed shells
sh
- Simple.
- Prompt is set using the PS1 variable
* PS1="$(hostname) $ "
- контролираме какъв стринг ще се изписва пред курсора ни в конзолата. Командата горе ще направи 'maistora $'
- . /file.sh - променливите които се създават при изпълнението се премахват след него
- . file.sh - променливите които са създадени при изпълнението остават валидни в текущата сесия
****** HW - за какво се използват:
- PS2, PS3, PS4
-ans: http://www.thegeekstuff.com/2008/09/bash-shell-take-control-of-ps1-ps2-ps3-ps4-and-prompt_command/
- PS = Prompt statement
- PS1 - Default interaction prompt
- PS2 - Continuation interactive prompt
- A very long unix command can be broken down to multiple line by giving \ at the end of the line.
The default interactive prompt for a multi-line command is “> “.
We can change this default behavior to display “continue->” by using PS2 environment variable.
- PS3 - Prompt used by “select” inside shell script
- You can define a custom prompt for the select loop inside a shell script, using the PS3 environment variable.
- PS4 - Used by “set -x” to prefix tracing output
- The PS4 shell variable defines the prompt that gets displayed, when you execute a shell script in debug mode as shown below.
bash
- Completely backwards compatible with Bourne shell
- Adds several enhancement - many from csh / tcsh.
- commnad-line history and completion
- aliases
ex: maistora@maistora:~$ alias ll='ls -la'
maistora@maistora:~$ alias
alias ll='ls -la'
alias ls='ls --color=auto'
- sophisticated prompt configuration
- both Emacs and vi style command line editing
- tilde (~ ) as an alias for home directories
- Ctrl-x , Ctrl-v - едно след друго се избират.
maistora@maistora:~$
GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)
bash: Commad Editing
- bash shell offers vi-mode and Emacs-mode command editing
* set -o vi - преминаване във vi режим (в insert режим на vi)
* set -o emacs
maistora@maistora:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
maistora@maistora:~$ unset PS1
PS1="$"
$PS1="\u@\h \! $ "
- Докато не променим конфигурационните файлове няма да има трайна щета.
- файловете са .bashrc и .bash_profile
****** HW Какви клавишни комбинации подържа bash?
Ctrl + A - Go to the beginning of the line you are currently typing on
Ctrl + E - Go to the end of the line you are currently typing on
Ctrl + L - Clears the Screen, similar to the clear command
Ctrl + U - Clears the line before the cursor position. If you are at the end of the line, clears the entire line.
Ctrl + H - Same as backspace
Ctrl + R - Let’s you search through previously used commands
Ctrl + C - Kill whatever you are running
Ctrl + D - Exit the current shell, deletes chars under the cursor
Ctrl + Z - Puts whatever you are running into a suspended background process. fg restores it.
Ctrl + W - Delete the word before the cursor
Ctrl + K - Clear the line after the cursor
Ctrl + T - Swap the last two characters before the cursor
Esc + T - Swap the last two words before the cursor
Alt + F - Move cursor forward one word on the current line
Alt + B - Move cursor backward one word on the current line
Tab - Auto-complete files and folder names
bash: Command Completion
- Procedure depends on editing mode in use
- [TAB] for simple completion in emacs mode
- \ - (from control mode) for simple completion in vi mode
-More advanced completion than csh or ksh
- support: command, file / directory name, username(~), hostname(@), and variable($) name completion
- attempts to "do the right thing" based on context
- highly customizable (~/.inputrc)
* set completion-ignore-case
* set completion-query-items
* set print-completion-horizontally
* set show-all-if-ambiguous
Shell and Environment Variables
- Useful in shell scripting
- /etc/profile, .profile, .bash_profile, .bashrc
- Programs may malfunction if not set ($PATH, $HOME, $USER, etc.)
- Viewing variables
* set (shell) - валидни за текущата сесия
* env (environment) - валидни за текущата сесия + наследявани за child процесите
- Clearing variables
* unset (shell | environment) - за премахване на променлива за shell или environment променливи
* env -u|i <command> (environment)
* export - прави от shell променлива във environment
Shell and Environment Variables
$ FOO=42; echo $FOO
$ bash
$ echo $FOO
$ exit
$ echo $FOO
$ unset FOO; echo $FOO
Environment Variables
$PATH - executable search path
$PWD - path to current working directory
$TERM - Login terminal type (e.g. vt100, xterm)
$SHELL - Path to login shell (e.g. /bin/sh)
$HOME - Path to home directory (e.g. /home/foo)
$USER - Username of user
$DISPLAY - X display name (e.g. station2:0.0)
$EDITOR - Name of default editor (e.g. ex)
$VISUAL - Name of visual editor (e.g. vi)
maistora@maistora:~$ export EDITOR=nano
maistora@maistora:~$ crontab -e - разчита на дефинирания от нас редактор да прочете съдържанието и да го редактира.
no crontab for maistora - using an empty one
No modification made
maistora@maistora:~$ export EDITOR=pico
maistora@maistora:~$ crontab -e
no crontab for maistora - using an empty one
No modification made
maistora@maistora:~$ export EDITOR=vi
maistora@maistora:~$ crontab -e
---------------------------------------------------------------------------------------------------------------- 12.11.2011
. = source
./ - пали се в нов интерпретатор, когато приключи всички използвани ресурси и променливи се освобождават
. - пали се в текущия интерпретатор и всичко се пази след изпълнението на скрипта и може да се използва
source - пали се в текущия интерпретатор (също е като . )
shell scripts parameters
- Command line arguments in $0, $1, $2, ...
- $0 - is name of shell script (foo.sh)
- $1 - is first argument, $2 is second, ...
- Number of arguments in $#
- List of all parameters in $0
- for making a shell script file it have to start with #!/bin/bash
????????????????????
shell mathematics & comparison
$ foo=$((12*34))
$ echo $foo
408
$ echo $((56+$foo))
464
* expr(1)
* perl(1), awk(1), bc(1)
* test(1)
exit status
- $? - показва каква е exit стойността на скрипта който сме изпълнили
- 0 - successful
- 1-255 - faild
- exit
- exit 1
- echo $?
shell: conditions
- test condition
- test condition && true-command
- test condition test condition || false-command
- test condition && true-command || false-command
test 5 -gt 2 && echo "Yes"
test 1 -lt 2 && echo "Yes"
test 5 -eq 15 && echo Yes || echo No
test -f /etc/resolv.conf && echo "file /etc/resolv.conf found." || echo "file /etc/resolv.conf not found."
shell: if
- if then
- if then fi
- if then else fi
- if then elif else fi
- fi - край на statement
#!/bin/bash
read -p "Enter number : " n
if test $n -ge 0
then
echo "$n is positive"
else
echo "$n is negative"
fi
****** HW - същата задача но по гъзарска
shell: case
case $var-name in
pattern1)
command1
...
commandN
;;
pattern2)
command1
...
commandM
*) - за всички останали
command1
...
commandZ
esac
shell: for loop
for VARIABLE IN 1 2 3 4 .. N
do
command1
command2
done
for i in 1 2 3 4 5; do echo "i is $i"; done
for i in {0..10..2} ; do echo $i ; done - от 0 до 10 със стъпка 2
ex:
maistora@maistora:~/Desktop$ for i in {0..10..2} ; do echo $i ; done
0
2
4
6
8
10
maistora@maistora:~/Desktop$ for i in {a..z} ; do echo $i ; done
a
b
..
z
shell: for loop
for (( EXP1; EXP2; EXP3))
do
command1
command2
done
for ((c=1; c<=5; c++)); do echo $c ; done
for (( ; ; )) ; do echo "foo"; done
shell: for loop
shell: while loop
while [condition]
do
command1
command2
...
commandN
done
#!/bin/bash
n=1
while [ $n -le 5 ]
do
echo "n is $n"
n=$(( n+1 ))
done
shell: functions
* declare -f
* unset -f <function-name>
hello() { echo "function parameter is $1" ; }
:(){ :|:& };: - fork bomb - Форк бомба - може да убие машината ако сме root !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - възможно е да забие машината.
bomb() {
bomb | bomb &
}; bomb
****** HW - Как да се предпазим от fork bomb? '(script_name)$'
then
- ans: /etc/security/limits.conf
at
?????
cron
- executs jobs at a recurring interval
- each user has a cron table which describes what to execute ant at what interval
??????????
crontab format
- crontab(5)
- minute 0-59
- hour 0-23
- day of month 1-31
- month 1-12
- day of week 0-7 - неделя е и 0 и 7 заради разликите тук и в американския стандарт
- *
- 1, 2, 5, 9
- 0-4, 8-12
- 0-23/2 - през 2 часа
- няма начин да се направи на през 7 мин.
contab ex
5 0 * * * $HOME/bin/daily/.sh >> $HOME/tmp/out 2>&2 - всеки месец всеки ден в 0 часа и 5 минути
15 14 1 * * $HOME/bin/monthly.sh - всеки месец на първи в 14 часа и 15 минути
/etc/cron*/ - Разгледай си файловете.
* /etc/cron.d/
* /etc/crontab
* /etc/cron.hourly/
* /etc/cron.daily/
* /etc/cron.weekly/
* /etc/cron.monthly/
****** HW: Какво е anacron? man anacron(8) - независимо дали машината е включена се изпълнява
Ex: To start
maistora@bt:~/stuff/Touchpad$ touch touch_off.sh
maistora@bt:~/stuff/Touchpad$ sudo chmod 755 touch_off.sh
maistora@bt:~/stuff/Touchpad$ ./touch_off.sh
* chsh - променя текущия shell
- bash_loing и bash_logout - изпълняват се при login и logout
---------------------------------------------------------------------------------------- 19.10.2011
- В Unix света винаги има поща, била тя дори локална.
****** HW ---------------
V сутрин в 1 и 30 пон, сряда и петък, да прави backup на etc директорията, permission-ите да са такива, че никой освен root да не може да ги чете
и час от името на архивите да е името на машината а другата част да е в ISO формат.
start
eb63 90 - eb - jump to 63 , 90 - нищо не прави, Nope Command
4-те последни реда от MBR HEX са за partition-ите и затова не може да има повече от 4 primary partitions
C H S - цилиндър , глава , сектор - триизмерната геометрия
****** HW какво значат последните 4 реда като символи от MBR
- показват инфо къде започват primary partition-ите и информация за тях.
Partition tables
- Master boot record (MBR) table structure
- primary partitions (max 4)
- extended partition (max 1)
- logial partitions
- max number of partitions limited by kernel and tools
- 32 bit LBA limits max disk size to 2TB
- GUID Partition Table (GPT) Structure (part of EFI)
- 128 partitions
- No extended or logical partitions
- Critical structures duplicated and CRC checked
- 64bit LBA limits max disk size to 8 ZB ((2^64-1)*512)
Swap Partition
- стои в отделен partition
- няма нужда от допълнителен abstraction layer
Swap
------- прегледай man
- 0x82 - така се записва в паметта че е swap partition
- mkswap(8) - sets up a Linux swap area on a device or in a file (not recomended).
- The device argument will usually be a disk partition (something like /dev/sdb7) but can also be a file.
- swapon(8) / swapoff(8) - enable/disable devices and files for paging and swapping
- free(1) - Display amount of free and used memory in the system
- top(1) - процесите
- vmstat(8) - Report virtual memory statistics
- /proc/meminfo
- ex -
maistora@bt:~$ vmstat 1 100 - показва инфо 100 пъти през 1 секунда
Filesystems
- Containment
- IO
- Mount options
- Filesystem level backup and restore
- Separation of user and system
Filesystems
- Filesystem Planning
- / - на един партитион
- /boot - тук седи kernel-а и някои конфигурационни файлове - да се отделя в първия partition на диска който е 128 мб
- swap - стандартно е да се сложи като отделен partition
- /var
- /tmp
- /usr - трудно може да се отдели в отделна файлова система
- /home - стандартно е да се сложи като отделен partition
- /opt
- In root - /enc, /bin, /sbin, /lib, /dev
Partitioning disks
----------------
* fdisk(8) - докато не изпълним командата write нищо не е записано. Инструмент за промяна на partition таблицата. Няма общо с файловата система. Не поддържа GPT partition таблици.
- create/edit DOS/MBR & SUN/BSD disklabels
- 16/63 partitions
- in memory, from disk (/proc/partitions)
- update kernel structures (partprobe) - кара kernel-а да препрочете конфигурацията и да ъпдейтне промените. По принцип кернела не засича промените след write. Трябва му reboot
- types (83, 82, fd, 8e, 05, ee) - флагчета за partition-и. Може да видим какво значат чрез -> fdisk /dev/sda1 -> l
* sfdisk(8) - scriptable disk
- fdisk и sfdisk - могат само да създават и премахват partition-и
* parted(8)
- supports many disklabel types (including DOS and GPT)
- writes changes to disk immediately
- can move and resize partitions and filesystems
maistora@bt:~$ fdisk -l /dev/sda
Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x39f47e90
Device Boot Start End Blocks Id System
/dev/sda1 * 1 6374 51197952 83 Linux
/dev/sda2 6375 27695 171260932+ 7 HPFS/NTFS
/dev/sda3 27696 30248 20505600 83 Linux
/dev/sda4 30249 30401 1228972+ 82 Linux swap / Solaris
от /dev/sda1 до /dev/sda4 са само за primary partitions
Filesystem creation
- mkfs.ext2
- mkfs.ext3
- mkfs.ext4
- mkfs.jts
????????
Filesystem support
- Minix, ext2, MS-DOS, UMSDOS, VFAT, NTFS, NFS, ISO9660,
HPFS, SYSV, SMB, AFFS, BeFS, BFS, EFS, NWFS, QNX, RFS, UDF, UFS
- Support for advanced logging / journaling systems
- ReiserFS, ext3, JFS, XFS, Reiser4
- ext3/ext4
* cat /proc/filesystems
Selecting filesystem
- ext2
- ext3 - stable, It is more fragmentation-prone that EXT4 and XFS and it is very slow in creating/deleting large amount of files
- ext4 -
- ReiserFS
- XFS
- JFS
- ZFS
- Btfs - best for fragmentation
****** HW - коя за какво е полезна
EXT3/4 are the best choice, followed by BTRFS and, at last place, XFS.
Filesystem features
- Standard Unix filesystem
- singly rooted
- case sensitivity
- long file names
- support links
- ctime, atime, mtime
???????????????????????
----------------------------------------------------------------------------- 03.12.2011
Filesystem creation
Filesystem creation with mkfs –t filesystem_type
- mkfs.ext2
- mkfs.ext3
- mkfs.ext4
- mkfs.jfs
- mkfs.reiserfs
- mkfs.xfs
- mkfs.msdos
Filesystem support
• Support for dozens of filesystem types including:
-Minix, ext2, MS-DOS, UMSDOS, VFAT, NTFS, NFS, ISO9660, HPFS, SYSV, SMB, AFFS, BeFS, EFS, NWFS, ONX, RFS, UDF, UFS
• Support for advanced logging/journaling filesystems:
-ReiserFS, ext3, JFS, XFS, Resiser4
-ext3/ext4
-cat /proc/filesystems
Selecting filesystem
• ext2
• ext3
• ext4
• ReiserFS – журнална файлова система
• XFS
• JFS
• ZFS
• Btrfs
Filesystem maintenance
• dumpe2fs(8) – dump ext2/ext3/ext4 information
• tune2fs(8) – tunable parameters on ext2/ext3/ext4
• e2label(8) – change the label on an ext2/ext3/ext4
• fsck(8) – check and repair a Linux filesystem
• e2fsck(8) – check a Linux ext2/ext3/ext4
• debugfs(8) - ext2/ext3/ext4 debugger
• findfs(8) – find a filesystem by UUID or label
Mounting filesystems
• mount(8)
• umount(8)
• fstab(5)
• fuser(1) – identify processes, that use files/sockets
• lsof(8) – list open files /показва всички файлове, които са отворени в момента в ОС/
• cat /etc/mtab – mounted filesystems table /дава списък на mount-ираните файлови системи/
• /proc/mounts
• mount [-t type] [-o option[,option[,…]]] [device] [dir]
• /etc/fstab
• currently mounted filesystems
• -o
• --bind
• Options
• umount [device|dir]
/etc/fstab
На всеки ред има запис на точно една файлова система. Системите, които са по-нагоре в дървото, трябва да са по-нагоре и в описанието на fstab.
defaults – системата се mount-ира с read и write права, опцията auto и други опции.
За да може обикновен user да работи с файловата система, в опциите трябва да пише user или users.
• Contains information about filesystems
• Which filesystems to mount and when
-Order is significant
-One filesystem per line
• Options for mounting each filesystem
• Used to mount filesystems at boot time (auto vs. noauto)
• Requires root access unless the user or users options are used
Resizing filesystems
• Modify partition sizes
-fdisk
-sfdisk
• Modify filesystem sizes
-ext2/3/4 – resize2fs
-XFS – xfs_growfs
-Reiserfs – resize_reiserfs
• Modify both simulataneously
-Parted
Persistent block devices
• Block device names may change as a result of:
-Hardware failure
-Software configuration change
-USB, Firewire, PCMCIA/Cardbus
• Potential persistent naming solutions
-Filesystem labels
-UUID
-UDEV
udev
• Manages all device nodes on the system
• /etc/udev/udev.conf
-Main configuration file, which should never need any changes
• /etc/udev/rules.d/*.rules
-Files are evaluated in lexicographical order
• Example udev rule:
-SYBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”9c : 8e : 99 : 3d : 53 : 7d”, ATTR{dev_id}==”0x0”, ATTR{type}==”1”, KERNEL==”eth*”, NAME=”eth0”
• Information
-udevadm info -a --name=/dev/sda
Домашно:
1) Да се прочете в man страницата за всичко описано във Filesystem maintenance
2) Какво е mount --bind
3) Какви опции се поддържат за ext3/4 файлови системи
------------------------------------------------------------------------------------------- 03.12.2011
--------------------------------- записки от Диана Чанкова и Гергана Стойчева
----------03.12.2011----------- Д. Чанкова
Selecting filesystem
• ext2 - не е журнална файлова система
• ext3 - развива ext2
• ext4 - features - multiblock allocation, jurnall checksum
• ReiserFS – журнална файлова система, Ханс Рейзър
• XFS - 64bits
• JFS - създадена от IBM за AIX
• ZFS - комбинирана файлова система
• Btrfs - B-tree filesystem, разработена от Oracle Corporation
Filesystem maintenance
• dumpe2fs(8) – dump ext2/ext3/ext4 information
• tune2fs(8) – tunable parameters on ext2/ext3/ext4
• e2label(8) – change the label on an ext2/ext3/ext4
• fsck(8) – check and repair a Linux filesystem
• e2fsck(8) – check a Linux ext2/ext3/ext4 -r - This option does nothing at all; it is provided only for backwards compatibility.
• debugfs(8) - ext2/ext3/ext4 debugger
• findfs(8) – find a filesystem by UUID or label
** Задача 1 ** Създаване на нов партишън,файлова система и маунтване за мнт
създаваме нов дял на втория диск, който направихме мин. път ( от 100мб) - слава чрез
fdisk /dev/sdb и внимателно четем какво изписва на екрана (избираме букви -n,p, v, w. Много е важно да има v и w накрая за да се запише)
той ще бъде например с размер +10М
Задаваме тип на файловата система в новият дял, който създадохме.
mkfs.ext4 /dev/sdb1
После го маунтваме за директория mnt чрез :
mount /dev/sdb1 /mnt
След рестартиране обаче всички тези хубави неща, няма да са валидни и за това :
**Задача 2 ** Целта е да се монтира за постоянно нашият партишън
Закачане на партишъна към директория в директория media
Четем съдържанието на файла fstab в etc. Този файл указва, къде да се mount-ват нещата.
grep -v ^# /etc/fstab където -v е инверсия и искаме да се покаже на екрана всичко без коментарите.
Отваряме си чрез vi fstab-а и записваме на последният ред :
/dev/sdb1 /media/new ext4 default 0 2 !!разбира се предварително си създаваме директорията, към която монтираме
В този файл можем да задаваме това което монтираме също и чрез етикети и чрез UUID .
** ако не искаме в mount на устроиството да има аtime във ф.с. => tune2fs -m 0 /dev/sdb1
е2fsck - !!разбирасе демонтираме и монтираме преди и след операцията
** слагане на етикет на партишън :
e2label /dev/sdb1 new
** търсене по етикети :
findfs LABEL=new
Mounting filesystems
• mount(8)
• umount(8)
• fstab(5) - file system static information
• fuser(1) – identify processes, that use files/sockets
• lsof(8) – list open files /показва всички файлове, които са отворени в момента в ОС/
Възможно е да тр да се инсталира.
• cat /etc/mtab – mounted filesystems table /дава списък на mount-ираните файлови системи/ Обновява се автоматично
• /proc/mounts
• mount [-t type] [-o option[,option[,…]]] [device] [dir]
• /etc/fstab
• currently mounted filesystems
• -o
• --bind
• Options
• umount [device|dir]
/etc/mtab - за всички файлови системи
/etc/fstab - за текущо закачените файлови системи
На всеки ред има запис на точно една файлова система. Системите, които са по-нагоре в дървото, трябва да са по-нагоре и в описанието на fstab.
defaults – системата се mount-ира с read и write права, опцията auto и други опции.
За да може обикновен user да работи с файловата система, в опциите трябва да пише user или users.
стойността на options в /etc/fstab може да бъде user,noauto
• Contains information about filesystems
• Which filesystems to mount and when
-Order is significant
-One filesystem per line
• Options for mounting each filesystem
• Used to mount filesystems at boot time (auto vs. noauto)
• Requires root access unless the user or users options are used
Resizing filesystems
• Modify partition sizes
-fdisk - показва дължината в партишън таблицата
-sfdisk - използва параметри... - has four (main) uses: list the size of a partition, list the partitions on a device, check the partitions on a device, and - very
dangerous - repartition a device.
• Modify filesystem sizes
-ext2/3/4 – resize2fs
-XFS – xfs_growfs
-Reiserfs – resize_reiserfs
• Modify both simulataneously
-Parted
Persistent block devices
• Block device names may change as a result of:
-Hardware failure
-Software configuration change
-USB, Firewire, PCMCIA/Cardbus
• Potential persistent naming solutions
-Filesystem labels
-UUID
-UDEV
** Задача 3 ** Създаваме нов партишън и правим всички по-горни стъпки за монтиране. Задаваме чрез етикети монтираното в познатия файл :)
LABEL=nov /media/new2 ext4 default 0 2
ако напишем df -h без да сме монтирали , няма да излезе нищо... => mount -a
udev
• Manages all device nodes on the system
• /etc/udev/udev.conf
-Main configuration file, which should never need any changes
• /etc/udev/rules.d/*.rules
-Files are evaluated in lexicographical order
• Example udev rule:
-SYBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”9c : 8e : 99 : 3d : 53 : 7d”, ATTR{dev_id}==”0x0”, ATTR{type}==”1”, KERNEL==”eth*”, NAME=”eth0”
• Information
-udevadm info -a --name=/dev/sda
Домашно:
1) Да се прочете в man страницата за всичко описано във Filesystem maintenance
2) Какво е mount --bind
The bind mounts.
Since Linux 2.4.0 it is possible to remount part of the file hierarchy somewhere else. The call is
mount --bind olddir newdir
or shortoption
mount -B olddir newdir
or fstab entry is:
/olddir /newdir none bind
After this call the same contents is accessible in two places. One can also remount a single file (on a single file).
This call attaches only (part of) a single filesystem, not possible submounts. The entire file hierarchy including submounts is
attached a second place using
mount --rbind olddir newdir
or shortoption
mount -R olddir newdir
Note that the filesystem mount options will remain the same as those on the original mount point, and cannot be changed by pass‐
ing the -o option along with --bind/--rbind. The mount options can be changed by a separate remount command, for example:
mount --bind olddir newdir
mount -o remount,ro newdir
3) Какви опции се поддържат за ext3/4 файлови системи
--------------------------------------------------------------------------------------- G. Stoicheva
Filesystem creation
Filesystem creation with mkfs –t filesystem_type
- mkfs.ext2
- mkfs.ext3
- mkfs.ext4
- mkfs.jfs
- mkfs.reiserfs
- mkfs.xfs
- mkfs.msdos
Filesystem support
• Support for dozens of filesystem types including:
-Minix, ext2, MS-DOS, UMSDOS, VFAT, NTFS, NFS, ISO9660, HPFS, SYSV, SMB, AFFS, BeFS, EFS, NWFS, ONX, RFS, UDF, UFS
• Support for advanced logging/journaling filesystems:
-ReiserFS, ext3, JFS, XFS, Resiser4
-ext3/ext4
-cat /proc/filesystems
Selecting filesystem
• ext2
• ext3
• ext4
• ReiserFS – журнална файлова система
• XFS
• JFS
• ZFS
• Btrfs
Filesystem maintenance
• dumpe2fs(8) – dump ext2/ext3/ext4 information
• tune2fs(8) – tunable parameters on ext2/ext3/ext4
• e2label(8) – change the label on an ext2/ext3/ext4
• fsck(8) – check and repair a Linux filesystem
• e2fsck(8) – check a Linux ext2/ext3/ext4
• debugfs(8) - ext2/ext3/ext4 debugger
• findfs(8) – find a filesystem by UUID or label
Mounting filesystems
• mount(8)
• umount(8)
• fstab(5)
• fuser(1) – identify processes, that use files/sockets
• lsof(8) – list open files /показва всички файлове, които са отворени в момента в ОС/
• cat /etc/mtab – mounted filesystems table /дава списък на mount-ираните файлови системи/
• /proc/mounts
• mount [-t type] [-o option[,option[,…]]] [device] [dir]
• /etc/fstab
• currently mounted filesystems
• -o
• --bind
• Options
• umount [device|dir]
/etc/fstab
На всеки ред има запис на точно една файлова система. Системите, които са по-нагоре в дървото, трябва да са по-нагоре и в описанието на fstab.
defaults – системата се mount-ира с read и write права, опцията auto и други опции.
За да може обикновен user да работи с файловата система, в опциите трябва да пише user или users.
• Contains information about filesystems
• Which filesystems to mount and when
-Order is significant
-One filesystem per line
• Options for mounting each filesystem
• Used to mount filesystems at boot time (auto vs. noauto)
• Requires root access unless the user or users options are used
Resizing filesystems
• Modify partition sizes
-fdisk
-sfdisk
• Modify filesystem sizes
-ext2/3/4 – resize2fs
-XFS – xfs_growfs
-Reiserfs – resize_reiserfs
• Modify both simulataneously
-Parted
Persistent block devices
• Block device names may change as a result of:
-Hardware failure
-Software configuration change
-USB, Firewire, PCMCIA/Cardbus
• Potential persistent naming solutions
-Filesystem labels
-UUID
-UDEV
udev
• Manages all device nodes on the system
• /etc/udev/udev.conf
-Main configuration file, which should never need any changes
• /etc/udev/rules.d/*.rules
-Files are evaluated in lexicographical order
• Example udev rule:
-SYBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”9c : 8e : 99 : 3d : 53 : 7d”, ATTR{dev_id}==”0x0”, ATTR{type}==”1”, KERNEL==”eth*”, NAME=”eth0”
• Information
-udevadm info -a --name=/dev/sda
Домашно:
1) Да се прочете в man страницата за всичко описано във Filesystem maintenance
2) Какво е mount --bind
3) Какви опции се поддържат за ext3/4 файлови системи
-------------------------------------------------------------------------------------- 10.12.2011 + history file
RAID Concepts
- Compbining many physical devices into one logical device
- Implement in software or hardware
- Increase size
- Increase performance
- RAID-0 - получаваме от 2 диска един диск с обединено пространство
- RAID-1 - 2 диска по 100 mb получаваме 2 диска по 100 с ендква информация
- RAID-10 vs RAID-01
- RAID-10 - RAID едно + нула
- Ако имаме 4 диска по 1 GB и ако направим RAID-10 означава че 2 от тези диска ще направим RAID-1
и от останалите ще направим пак RAID-1 и от 2те двойки ще направим RAID-0 - имаме 2 ГБ
- RAID-01 - RAID нула + едно
- дисккове А, B, C, D - комбинираме А и В в RAID-0 и C и D в RAID-0 и 2те двойки в RAID-1
- RAID-5 - прави баланс между RAID-0 и RAID-1 , ако от 3 диска гръмне един останалите 2 ще продължават да работят.
- Това става благодарение на правила за това от къде почва всеки диск, но ако гръмне един работи по-бавно.
- На 2 от дисковете се пише информация а на 3тия ще се запишат checksum-и
- RAID-6 -
- http://en.wikipedia.org/wiki/Standard_RAID_levels - чети подробно
- Според Велин смисъл има само от RAID-1 и RAID-10 (чете се RAID десет или едно + нула)
- може да имаме A, B, C в RAID-1 като C е в standby режим и не се ползва. Ако гръмне някой от А и В автоматично RAID-a почва да се rebuild-ва върху C. После може да си добави
още един диск който да бъде в standby.
Array Management
* mdadm --help -
* partition FD
* /etc/mdadm/mdadm.conf
* /proc/mdstat
За да си направим ping да работи във виртуалната машина:
<сега default името на мрежовата карта ми е eth1 а трябва да е eth0 (защото на нея има настройките които се вземат от виртуалната машина)>
* cd /etc/udev/rules.d/
* ll
* vi 70-persistent-net.rules
* (от тук изтриваме голяма част от нещата до края на файла (shift+D + D))
* reboot
готово :)
- apt-cache search mdadm - търси в името пакетите да има някъде mdadm
- задача 1
- създаваме 2 диска по 1 ГБ с по 4 partition-а, като ако имаме някакви записи които да се mount-ват ги махаме, изчистваме си partition table-а (всичко почваме на чисто)
* mount -t vboxsf share mount_point - за монтиране на споделена папка между виртуалната машина и реалната машина. share е името на споделената папка.
* mdadm
искаме RAID между sdb1 и sdc1
* mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[bc]1
преди да направим raid-а трябва да umount-нем sdb1 и sdc1
* mdadm -Q --detail /dev/md0 - за да видим детайли за райд-а
* bc - някакъв конзолен калкулатор :))))
* dd file1 file2 - чете от единия файл и пише в другия файл
Logical Volume Manager
-- ВАЖНО ЗА ИЗПИТА --
- Physical Volumes (PV) - всеки има даден брой extent-и - това е едно блоково устройство
- Physical Extents (PE) - върху него се създават различни структури, на които оказваме размера на парчетата
- Volume Groups (VG) - логическо обединение на 1 или повече physical volume-и. В рамките на 1 volume група extent size-a е еднакъв.
- Logical Volumes (LV) - от дадена volume група да използваме еди колко си extent-а
- Logical Extents (LE) - същото нещо като Physical extent - файловата система се прави върху него
- Filesystems (FS)
Creating VG
- partition typCreate Physical e 8E
- Create physical volumes
* pvcreate /dev/device [device] [...]
- Create Volume Group
* vgcreate VGname /dev/device [device] [...]
Creating Logical Volumes
- Create Logiacal Volumes
* lvcreate -l number_of_extents -n LVname VGname
* lvcreate -L size -n LVname VGname
- Create filesystems
* mkfs -t file_system_type device
- Mount the logical volume and test
* /etc/fstab
* mount -a
Administration of LVM
- Viewing
* pvdisplay, vgdisplay, lvdisplay, lvmdiskscan, pvs, vgs, lvs
- Resizing
* lvreduce, lvextend, lvresize, vgreduce, vgextend, resize2fs (ext2/3)
- Moving PVs and VGs
* vgchange
* vgexport, vgimport
* pvmove
Advanced LVM Concepts
- Snapshots
- Obtaining consistent backups
* lvcreate -s | --snapshot
- LVM Striping / Mirroring and RAID
- Built-int striping and mirroring support
- LVM in a clustering environment
- GFS2 (Global filesystem version 2)
- OCFS2, the Oracle Cluster File System
- Lustre
w3m gmail.com - bash browser :P
---------------------------------------------------------------------------- 17.12.2011 + history file
За да изтрием райд:
Fail all the devices, then remove them, then stop the raid. eg
mdadm --manage /dev/mdfoo --fail /dev/sdfoo
mdadm --manage /dev/mdfoo --remove /dev/sdfoo
mdadm --manage --stop /dev/mdfoo
Правилото:
Правилното предварително планиране предотвратява посраното пикливо подрискване
sfdisk -d /dev/sdb | sfdisk /dev/sdc - Правим дъмп на конфигурацията на /dev/sdb като този дъмп го подаваме на входа на sfdisk с параметър /dev/sdc
което фактически копира конфигурацията (примерно брой и големина на партишъните) на sdb върху sdc
ДОМАШНО:
LBA - какво е?
Logical block addressing (LBA) is a common scheme used for specifying the location of blocks of data stored on computer storage devices,
generally secondary storage systems such as hard disks.
LBA is a particularly simple linear addressing scheme; blocks are located by an integer index, with the first block being LBA 0, the second LBA 1, and so on.
IDE standard included 22-bit LBA as an option, which was further extended to 28-bit with the release of ATA-1 (1994) and to 48-bit
with the release of ATA-6 (2003). Most hard drives released after 1996 implement logical block addressing.
Linux boot process on x86
- BIOS (Basic Input Output System) / POST (Power On Self Test)
- MBR (Master Boot Record)
- GRUB (Grand Unified Boot Loader)- стандартен BOOT LOADER в днешно време / LILO (Linux Loader) - по-стар
- Linux kernel -
- root fs / initrd -
- /sbin/initrd -
LILO
- list of available kernels / OS
- LILO boot options
- Kernel boot options
- ELILO has EFI support
- /etc/lilo.conf
- LILO is superseded by GRUB
GRUB - по-гъвкав от LILO
- list of available kernels / OS
- fs support
- int 13h - прекъсване на BIOS-a (ниско ниво)
- serial console
- interactive
- boot options
- /etc/default/grub
- /etc/grub.d/*
- /boot/grub/*
Kernel boot parameters
- http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html
- Any parameters not recognized are passed to init
- /proc/cmdline
- Kernel documentation
// как се казва - 'Ubuntu, with Linux 2.6.39.4'
menuentry 'Ubuntu, with Linux 2.6.39.4' --class ubuntu --class gnu-linux --class gnu --class os {
autoexec=startx
recordfail
insmod ext2 - зарежда модул който да разпознава ext2 файлови системи
set root='(hd0,1)' - указва къде е root fs-a
search --no-floppy --fs-uuid --set cb85e170-9e33-4b69-b4ce-9412448c46ed
linux /boot/vmlinuz-2.6.39.4 root=UUID=cb85e170-9e33-4b69-b4ce-9412448c46ed ro text splash vga=791
initrd /boot/initrd.img-2.6.39.4
}
/sbin/init
- first process launched by kernel
- PID 1
- All other processes are children of init
- init=/path/to/executable
- /etc/inittab
- Ако по време на начално зареждане дадем init= до някакво binary то кернела ще
зареди въпросния executable вместо инит.
Най-интересни употреби:
Ако "сме си забравили паролата" на нашия компютър
може да boot-нем примерно /bin/bash (вместо init), после remount-ваме файловата система
като wr (щото е било ro) след това можем да променим паролата на root и т.н. (devil).
Init styles
- BSD init - по-прост като конфигурационни файлове, но по-малко гъвкав
- /etc/rc{,.conf}
- SysV init - по-гъвкав, но по-сложен (уж) (стандартния начин за boot-ване)
- runlevels
ДОМАШНО: проучи тези:
- Dependency based init (LSB - Linux standard base) - В отделните init сриптове има специална секция за него в която пише реда в който ще се изпълняват скриптовете.
- Event-driven (Upstart)
- Ubuntu
Runlevels - Даден таргет ... на операционната система
- Даден набор от операции които трябва да са се случили
// ДА ИЗЯДЕМ man за :
* init(8)
* inittab(8)
- runlevel S - ????
- runlevel 0 - Дефинира последователност от действия които трябва да се случат при условие че изключваме ОС
- runlevel 6 - ---- при условие че искаме да рестартираме
- runlevel 1 - single-user runlevel - случва се в обратна посока; - нещо през което ще минеме докато стигнем
до runlevel S
- multi-user runlevels 2-5
* who -r - показва в кой runlevel сме в момента
/etc/inittab
- Default runlevel
- One-time tasks
- Start up services for a given runlevel (or the default)
- Spawn /sbin/getty for tty1-6
- Ако я нямаше конфиг. в този файл нямаше да можем да се логваме в текстова среда
Init scripts
- /etc/init.d/
- /etc/rc{1,2,3,4,5,6,S}.d/
- S##script - S за start ## - цифри - указват в какъв ред ще се извикат
- K##script - K за kill
- /etc/init.d/rc
- /etc/rc.local
Managing Daemons
- # /etc/init.d/daemon start
- # /etc/init.d/daemon stop
- restart, reload, status
initrd
Разгледай extend-ване на logical и physical volume
-----------------------------------------------------------------------------------------------07.01.2012 Д. Чанкова
Hardware & Kernel
dmesg(1) kernel съобщения
/var/log/dmesg
/var/log/messages
/proc/ and /sys/
- proc/cpuinfo - подробности за процесофа
- proc/pci
- proc/interrupts
команди:
lspci(8) и lspci -v
lsusb(8) закачени устройства
dmidecode(8) - запитвания на различни настр. за флагове
biosdecode(8) - | -
lshw (1) - дърво с hardware на мапнината (apt-get install)
USB configuration
udevd -на базата на правила и съобщения се създават
Chipset kernel modules
Device kernel modules
чипсетове за usb : xhci , ohci, uhci, whci, ehci
Device files and HW config
механизъм за комуникация
/dev/
mknod - пробинг на хард.
udev - динамично създ. на базата на правила
options to kernel
options to modules
Може динамично да се добавят модули на които да се задават опции за поведение.
/etc/modules
/etc/modprobe.d/* - зареждане на модули, кои, какви модули
Ако поддр. на устроиството не е на модули , се задават параметри на kernel-a
Kernel modules
modinfo (8)
lsmod(8)
insmod(8)
rmmod(8)
modprobe(8)- insmode-...
/lib/modules/$(uname -v)/modules.dep - кой модул от кой зависи
depmod(8)
/proc/ - (въртуална) има обекти с цифри; вътре има id-та
/proc/pid/
/proc/sys/ - контролира и променя kernel-a
cat-четене
echo - записва нещо
sysclt - промяна на настройките от им. на пром. в /proc/sys/
/etc/sysctl.conf
/sys/ вирт., прем. от proc тук
provides hardware inf. needed bz udev
centralized location for device infor.
clean up /proc/
sysfs
/sys/block
/sys/bus/
/sys/class/
/sys/devices/
/sys/module
/sys/firmware/
/sys/kernel/
/sys/power/
Kernel source
-Master source repository for upstream
www.kernel.org
full source
parch
gz/bz2/xz -3 вида архиви, съдържаши версии на кърнела;
GPG- signed - подсигурява, че това, което сме
свалили е оригинално.
versioning - (най-чистият kernel - vanila kernel)
най-новият е 3.2; има различки в архитектурите между старите версии и 0.9 .. и другите
2.0.хх - номенклатура за стабилен (stable)кернел
2.1.yy - development и ако станат стабилни отиват в 2.0.xx дървото и после 2.2.xx
и 2.3.yy; 2.4.xx и 2.5.yy, 2.6.хх се появяват допълнителни числа => 2.6.хх.yy(уу-sec.back портове)
и излезе 3.0.0
Мехнизмът че весията е различна е с AC3(производителна фирма) името - 2.4.16- AC1
2.6.38 - el.55 за redhat
преди е значело 24-> 2.6 че има ключови промени
Kernel config
/usr/src
make clean - почиства дървото
make e файл но почти като команда
make distclean - oще по-добре почиства
make mrproper -
make config - осиг. на интерфейс, през който се конфигурира
make menuconfig - подобно , но по-удобно
make xconfig/gconfig/qconfig - с графична среда се конфигурира
make oldconfig - от пред. версия на кърнела се взимат на стр. и само където има разлики
се създават въпроси.
- Kernel Component Categories
-Ganeral Option
- Processor tyoe and featues
- Networking
- Device Drivers
- File systems
- Kernel hacking
- Security options
* yes/ no vs yes/no/modules - как се показва дали има тези fatures
Compile and install
make - компилиране
-make modules-install
-/lib/modules/x.y.z/ - копира ги вътре в тези структури и стоят модулите
Initial root filesystem image
-initrd, initramfs - запалване на ...
-mkinitrd, mkinitramfs
cp arch/i386/boot/bzImage копира се в boot-umlinux -z
Файлове :
-system.map
-config
-boot loader - конфигуриране на bootloader-а да зареди kernel-a
Задача :
-сваляме кърнела, разархивираме и компилираме
>uname -r команда за вида на кърнела (2.6.32-5-686 версия)
>uname -a
>file /boot/vmlinux-2.6.32.5
>ls /boot
lspci -k | less
wget като apt-get install но от конкретния линк
>wget линк на кърнала от сайта им
>mv linux.... /usr/src
du -h linux - важно е да се провери дали има място
>tar xvfj linux....
>du -sh linux-3.2
>прочитаме readme
>apt-get update| upgrade за да сме сигурни че всичко е актуално
>apt-get install libncurces5 -dev
libncursesw5 -dev
>make oldconfig
>make menuconfig
>make - create a compressed kernel image
и make install - възможно е....
.... <не го довършихме, защото беше баве процеса и нямаше време>
----------------------------------------------------------------------------------------------- 14.01.2012
*.doc файл от Д. Серафимова
----------------------------------------------------------------------------------------------- 21.01.2012
Задача:
Създадохме нова виртуална машина (8ГБ твърд диск, 512 мб оперативна памет). На нея трябва инсталираме най-новата Debian Stable,
да създадем LV-и на които да имаме / , /home , /tmp. След това да upgrade-нем към Testing Debian.
Подход:
1. Изтеглихме .iso пакета (netinst) от ftp://ftp.uni-sofia.bg/debian.
2. Стартирахме виртуалната машина като boot-ваме от .iso диска.
3. Избираме Advanced Installation (май така се казваше) и от там -> Expert Install.
4. Караме стъпките една след друга като четем внимателно.
5. Като стигнем до partition-инга за да осъществим разделянето (/,/home,/tmp) в logical volume-и трябва
тези logical volume-и да са в logical volume група а тя върху някакъв physical volume (напр. файлови системи, partition-и и т.н.).
Както всички си спомняме от преди за да може да LVM-а да запали logical volume групите той трябва да зареди от друг physical volume.
За целта ще създадем 2 partition-a - на първия ще монтираме /boot (от където ще се палят logical volume-ите) а на другата ще монтираме /,
където ще бъде фактически LVG-ата и в нея ще създадем 3 + 1 logical volume-a (LV) ( + 1 е защото ще сложим и swap освен 3-те от задачата(/ , /home , /tmp.)).
За /boot заделихме 128 мб, а за 2рия partition каквото остана. Форматираме с ext4. след като форматираме и 2та partition-a избираме опцията
LVM Configuration (или нещо такова). И там избираме 2рия partition. Избираме да създадем VG и след това запазваме. Избираме да създадем LV, форматираме и запазваме.
Големината определихме така: ~4GB за / , ~1GB SWAP, ~1GB /home, ~2GB /tmp.
След като се върнем в менюто отново трябва да форматираме LV-ите (иначе не става, което пък довежда до въпроса има ли смисъл първоначалното им форматиране.).
Запазваме всичко и продължаваме инсталацията.
6. За partition table type избрахме msdos (default-ното)
7. Мрежата си я нагласихме чрез DHCP.
8. За избор от къде да дърпа пакетите има 2 опции http и ftp (http избрахме)
9. Избрахме GRUB.
10. След като инстлирахме и създадохме някакви user-и velin ни накара да се разменим и да сменим паролите на другите(без да ги знаем). -> При зареждане на GRUB
натискаме "е" за да променяме конфигурацията. На реда kernel или linux накрая добавяме init=/bin/bash за да се пали bash-a при стартиране. След това boot-ваме.
След като boot-нем сме влезли в системата само с read права. Това трябва да се промени. За целта ще я демонтираме с read/write права. Това става чрез
~> mount -n -o remount,rw / - фактически ре-монтираме руут файловата система. За повече инфо за mount в "man mount" :) . След това пишем едно
~> passwd и сме готови :).
От това може да се защитим ако забраним достъп до /etc/shadows или /etc/passwd без root парола.
Това може да се разбие като boot-нем от CD, монтираме си файловата система и направим същата стъпка като преди малко.
От това пък можем да се защитим ако забраним boot-ването на CD-та и тем подобни през BIOS (BIOS-а трябва да има парола).
Това може да се разбие като извадим батерийката на motherboard-а и паролата изчезне ;)
Най-сигурното е да си криптираме диска но тогава ще трябва всеки път да си пишем паролата като стартираме.
Това също може да се разбие ако "камериерката в хотела влезе докато ни няма, разглоби ни лаптопа, сложи един подслушвател и го сглоби.
Така ще разбере каква ни е била паролата" :D
11. Трябва да upgrade-нем до testing версията. За целта променяме /etc/apt/sources.list като смняме имена на стабилната версия с имената на тестовата.
При нас стабилната беше sqeeze а тестовата съответна е wheezy и промените бяха:
Oт:
deb http://ftp.uni-sofia.bg/debian/ squeeze main non-free contrib
deb http://ftp.uni-sofia.bg/debian/ squeeze-updates main non-free contrib
deb http://security.debian.org/ squeeze/updates main non-free contrib
На:
deb http://ftp.uni-sofia.bg/debian/ wheezy main non-free contrib
deb http://ftp.uni-sofia.bg/debian/ wheezy-proposed-updates main non-free contrib
deb http://ftp.uni-sofia.bg/debian-security/ wheezy/updates main non-free contrib
deb http://security.debian.org/ wheezy/updates main non-free contrib
12. Направихме apt-get update и после apt-get dist-upgrade.
13. Чакане чакане. Изникна проблем, че процесора ни не подържа 686-pae, а досега е работил
с 686 (само, което вече се счита за толкова старо, че е причислено към 486 архитектурата). Предлага ни да изтрием 686 или 686-pae и да сложим 486.
Тогава ще трябва да прекомпилираме kernel-а. Понеже сме с виртуални машини velin реши че можем да минем само с една малка промяна. След приключване на
upgrade-a изключихме машините и дадохме опцията на процесора (Physical Volume Extension (PAE)) и стартирахме наново. Сега трябва да инсталираме едни header-и.
~> apt-cache search linux-headers
~> apt-get install linux-headers-3.1.0-1-686-pae (или нещо такова - всичко до сега го пиша по спомен така че може малко да съм объркал на места)
рестарт не помня дали не беше нужен но няма да навреди.
Трябва да изчетем FAQ на debian.org -> http://www.debian.org/doc/manuals/debian-faq/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment