bash

(Przekierowano z BASH)

WstępEdytuj

odmianyEdytuj

  • POSIX shell (sh)
  • Bourne shell (sh)
  • Korn shell (ksh)
  • Bourne Again shell (bash)
  • Z shell (zsh)
  • Debian Almquist shell (dash)

DokumentacjaEdytuj

Za pomocą polecenia:[1]

man bash

uzyskamy wersję dokumentacji:

  • aktualną (odpowiednią dla zainstalowanej wersji Basha)
  • nie wymagającą dostępu do sieci (ang. offline)

Online:

  • explainshell [2]
  • dokumentacja w3cub[3]

MetaznakiEdytuj

Metaznaki basha: [4][5]

  • ;
  • &
  • (
  • )
  • |
  • <
  • >
  • nl (nowa linia)
  • spacja (odstęp)
  • TAB
  • \ ( backslash)

BackslashEdytuj

Ma dwa znaczenia

  • zapobiega interpretacji następnego znaku (ang. escape character). Jest to jedna z 3 metod [6]
  • pozwala na dzielenie długiego polecenia na kilka linii (ang. a line continuation character ). Składnia : <backslash><newline>
$       echo "continuation"\
>       "lines"
continuation lines

Wyrażenie regularneEdytuj

wyrażenia regularne Bash ( Bash Regular Expressions = BRE)



Klasy znaków ( character classes) wyrażeń regularnych Bash ( Bash Regular Expressions = BRE)[7]

  • [[:alpha:]] - matches any alphabetic character written in upper or lower case.
  • [[:alnum:]]- matches any alphanumeric character - namely, the characters in the range 0-9, A-Z, a-z.
  • [[:blank:]] - matches a space and a tab character.
  • [[:digit:]]- any numeric character from 0to 9.
  • [[:upper:]]- uppercase alphabetic characters - A-Z.
  • [[:lower:]]- alphabetic characters in lower case - a-z.
  • [[:print:]] - matches any printable character.
  • [[:punct:]] - matches punctuation marks.
  • [[:space:]]- whitespace, in particular - a space, a tab character, characters NL, FF, VT, CR.

wersjaEdytuj

Sprawdzamy wersję BASH'a:

 /bin/bash --version
 GNU bash, version 4.2.8(1)-release (x86_64-pc-linux-gnu)
 Copyright (C) 2011 Free Software Foundation, Inc.
 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

 This is free software; you are free to change and redistribute it.
 There is NO WARRANTY, to the extent permitted by law.

lub:

dpkg -s bash | grep Version

wynik:

Version: 4.2-5ubuntu3

BezpieczeństwoEdytuj

Sprawdzamy czy nasza wersja jest nieodporna na CVE-2014-6271: [8]

env x='() { :;}; echo vulnerable' bash -c 'echo hello'

ArgumentyEdytuj


Przekazywanie argumentów ( ang. command substitution)[9]

 sudo apt install linux-headers-$(uname -r)

lub

 $ sudo apt install linux-headers-'uname -r'

lokalizacjaEdytuj

OpcjeEdytuj

Opcje Basha [10].

Dodanie flagi "-x" pozwala zobaczyć co dokładnie skrypt robi:

   #!/bin/bash -x

Polecenie shopt drukuje ustawienia[11]

 shopt -o

zmienneEdytuj

Wymień wszystkie zadeklarowane zmienne, ich atrybuty i ich wartości

 declare -p

Przykładowy wynik

declare -- BASH="/usr/bin/bash"
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:progcomp:promptvars:sourcepath"
declare -i BASHPID
declare -A BASH_ALIASES=()
declare -a BASH_ARGC=([0]="0")
declare -a BASH_ARGV=()
declare -- BASH_ARGV0
declare -A BASH_CMDS=()
declare -- BASH_COMMAND
declare -a BASH_COMPLETION_VERSINFO=([0]="2" [1]="11")
declare -a BASH_LINENO=()
declare -a BASH_SOURCE=()
declare -- BASH_SUBSHELL
declare -ar BASH_VERSINFO=([0]="5" [1]="1" [2]="8" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
declare -- BASH_VERSION="5.1.8(1)-release"
declare -x COLORTERM="truecolor"
declare -- COLUMNS="282"
declare -- COMP_WORDBREAKS
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DESKTOP_SESSION="ubuntu"
declare -a DIRSTACK=()
declare -x DISPLAY=":1"
declare -- EPOCHREALTIME
declare -- EPOCHSECONDS
declare -ir EUID="1000"
declare -a FUNCNAME
declare -x GDMSESSION="ubuntu"
declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated"
declare -x GNOME_SHELL_SESSION_MODE="ubuntu"
declare -x GNOME_TERMINAL_SCREEN="/org/gnome/Terminal/screen/0d475444_f264_4d18_b211_b17d05380607"
declare -x GNOME_TERMINAL_SERVICE=":1.222"
declare -x GPG_AGENT_INFO="/run/user/1000/gnupg/S.gpg-agent:0:1"
declare -a GROUPS=()
declare -x GTK_MODULES="gail:atk-bridge"
declare -x G_ENABLE_DIAGNOSTIC="0"
declare -i HISTCMD
declare -- HISTCONTROL="ignoreboth"
declare -- HISTFILE="/home/a/.bash_history"
declare -- HISTFILESIZE="2000"
declare -- HISTSIZE="1000"
declare -x HOME="/home/a"
declare -- HOSTNAME="zalman"
declare -- HOSTTYPE="x86_64"
declare -- IFS=" 	
"
declare -x IM_CONFIG_PHASE="1"
declare -x INVOCATION_ID="bad815f656bd47a98d70b4503a7ac633"
declare -x JOURNAL_STREAM="8:183513"
declare -x LANG="pl_PL.UTF-8"
declare -x LESSCLOSE="/usr/bin/lesspipe %s %s"
declare -x LESSOPEN="| /usr/bin/lesspipe %s"
declare -- LINENO
declare -- LINES="75"
declare -x LOGNAME="a"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:"
declare -- MACHTYPE="x86_64-pc-linux-gnu"
declare -i MAILCHECK="60"
declare -x MANAGERPID="1694"
declare -x OLDPWD
declare -- OPTERR="1"
declare -i OPTIND="1"
declare -- OSTYPE="linux-gnu"
declare -x PATH="/home/a/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin"
declare -a PIPESTATUS=([0]="0")
declare -ir PPID="51393"
declare -- PS1="\\[\\e]0;\\u@\\h: \\w\\a\\]\${debian_chroot:+(\$debian_chroot)}\\[\\033[01;32m\\]\\u@\\h\\[\\033[00m\\]:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\\$ "
declare -- PS2="> "
declare -- PS4="+ "
declare -x PWD="/home/a/Dokumenty/mandelbrot_planes/temp/l0"
declare -x QT_ACCESSIBILITY="1"
declare -x QT_IM_MODULE="ibus"
declare -i RANDOM
declare -- SECONDS
declare -x SESSION_MANAGER="local/zalman:@/tmp/.ICE-unix/1906,unix/zalman:/tmp/.ICE-unix/1906"
declare -x SHELL="/bin/bash"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -x SHLVL="1"
declare -i SRANDOM
declare -x SSH_AGENT_LAUNCHER="gnome-keyring"
declare -x SSH_AUTH_SOCK="/run/user/1000/keyring/ssh"
declare -x SYSTEMD_EXEC_PID="51393"
declare -x TERM="xterm-256color"
declare -ir UID="1000"
declare -x USER="a"
declare -x USERNAME="a"
declare -x VTE_VERSION="6402"
declare -x WINDOWPATH="2"
declare -x XAUTHORITY="/run/user/1000/gdm/Xauthority"
declare -x XDG_CONFIG_DIRS="/etc/xdg/xdg-ubuntu:/etc/xdg"
declare -x XDG_CURRENT_DESKTOP="ubuntu:GNOME"
declare -x XDG_DATA_DIRS="/usr/share/ubuntu:/home/a/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop"
declare -x XDG_MENU_PREFIX="gnome-"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SESSION_CLASS="user"
declare -x XDG_SESSION_DESKTOP="ubuntu"
declare -x XDG_SESSION_TYPE="x11"
declare -x XMODIFIERS="@im=ibus"
declare -- _="sorted_files"
declare -- __git_printf_supports_v="yes"
declare -- _backup_glob="@(#*#|*@(~|.@(bak|orig|rej|swp|dpkg*|rpm@(orig|new|save))))"
declare -A _xspecs=([tex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [freeamp]="!*.@(mp3|og[ag]|pls|m3u)" [gqmpeg]="!*.@(mp3|og[ag]|pls|m3u)" [texi2html]="!*.texi*" [hbpp]="!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])" [lowriter]="!*.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm|pdf)" [rpm2cpio]="!*.[rs]pm" [localc]="!*.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)" [hbrun]="!*.[Hh][Rr][Bb]" [vi]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [latex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [view]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [madplay]="!*.mp3" [compress]="*.Z" [pdfjadetex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [pbunzip2]="!*.?(t)bz?(2)" [lrunzip]="!*.lrz" [gunzip]="!*.@(Z|[gGd]z|t[ag]z)" [oowriter]="!*.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm|pdf)" [epiphany]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [acroread]="!*.[pf]df" [znew]="*.Z" [kwrite]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [xemacs]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [gview]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [lzfgrep]="!*.@(tlz|lzma)" [lzless]="!*.@(tlz|lzma)" [cdiff]="!*.@(dif?(f)|?(d)patch)?(.@([gx]z|bz2|lzma))" [zipinfo]="!*.@(zip|[aegjswx]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|aab|ipa|do[ct][xm]|p[op]t[mx]|xl[st][xm]|pyz|whl)" [pdflatex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [portecle]="!@(*.@(ks|jks|jceks|p12|pfx|bks|ubr|gkr|cer|crt|cert|p7b|pkipath|pem|p10|csr|crl)|cacerts)" [modplugplay]="!*.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|oct|okt?(a)|p[st]m|s[3t]m|ult|umx|wav|xm)" [lokalize]="!*.po" [lbzcat]="!*.?(t)bz?(2)" [qiv]="!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|svg)" [totem]="!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))" [ps2pdfwr]="!*.@(?(e)ps|pdf)" [dvitype]="!*.dvi" [unpigz]="!*.@(Z|[gGdz]z|t[ag]z)" [mozilla]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [pdfunite]="!*.pdf" [gpdf]="!*.[pf]df" [texi2dvi]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [bunzip2]="!*.?(t)bz?(2)" [zathura]="!*.@(cb[rz7t]|djv?(u)|?(e)ps|pdf)" [kaffeine]="!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))" [mpg123]="!*.mp3" [lzegrep]="!*.@(tlz|lzma)" [xv]="!*.@(gif|jp?(e)g?(2)|j2[ck]|jp[2f]|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|?(e)ps)" [xdvi]="!*.@(dvi|DVI)?(.@(gz|Z|bz2))" [xfig]="!*.fig" [xpdf]="!*.@(pdf|fdf)?(.@(gz|GZ|bz2|BZ2|Z))" [oobase]="!*.odb" [xelatex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [gharbour]="!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])" [bzcat]="!*.?(t)bz?(2)" [dragon]="!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))" [xanim]="!*.@(mpg|mpeg|avi|mov|qt)" [lualatex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [rgview]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [rvim]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [xetex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [lomath]="!*.@(sxm|smf|mml|odf)" [zcat]="!*.@(Z|[gGd]z|t[ag]z)" [lynx]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [uncompress]="!*.Z" [xzcat]="!*.@(?(t)xz|tlz|lzma)" [vim]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [loimpress]="!*.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)" [dvipdf]="!*.dvi" [mpg321]="!*.mp3" [jadetex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [lobase]="!*.odb" [epdfview]="!*.pdf" [ps2pdf14]="!*.@(?(e)ps|pdf)" [ps2pdf13]="!*.@(?(e)ps|pdf)" [ps2pdf12]="!*.@(?(e)ps|pdf)" [poedit]="!*.po" [luatex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [kbabel]="!*.po" [bzme]="!*.@(zip|z|gz|tgz)" [dviselect]="!*.dvi" [realplay]="!*.@(rm?(j)|ra?(m)|smi?(l))" [kdvi]="!*.@(dvi|DVI)?(.@(gz|Z|bz2))" [elinks]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [kghostview]="!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [gtranslator]="!*.po" [unzip]="!*.@(zip|[aegjswx]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|aab|ipa|do[ct][xm]|p[op]t[mx]|xl[st][xm]|pyz|whl)" [ggv]="!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [oomath]="!*.@(sxm|smf|mml|odf)" [dvipdfmx]="!*.dvi" [makeinfo]="!*.texi*" [okular]="!*.@(okular|@(?(e|x)ps|?(E|X)PS|[pf]df|[PF]DF|dvi|DVI|cb[rz]|CB[RZ]|djv?(u)|DJV?(U)|dvi|DVI|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX|epub|EPUB|odt|ODT|fb?(2)|FB?(2)|mobi|MOBI|g3|G3|chm|CHM)?(.?(gz|GZ|bz2|BZ2|xz|XZ)))" [sxemacs]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [aviplay]="!*.@(avi|asf|wmv)" [rgvim]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [dvipdfm]="!*.dvi" [ly2dvi]="!*.ly" [oodraw]="!*.@(sxd|std|sda|sdd|?(f)odg|otg)" [kpdf]="!*.@(?(e)ps|pdf)" [bibtex]="!*.aux" [netscape]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [emacs]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [rview]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [galeon]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [dillo]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [fbxine]="!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))" [oocalc]="!*.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)" [harbour]="!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])" [lodraw]="!*.@(sxd|std|sda|sdd|?(f)odg|otg)" [dvips]="!*.dvi" [ps2pdf]="!*.@(?(e)ps|pdf)" [kate]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [kid3-qt]="!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)" [pdftex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [gvim]="*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [timidity]="!*.@(mid?(i)|rmi|rcp|[gr]36|g18|mod|xm|it|x3m|s[3t]m|kar)" [ogg123]="!*.@(og[ag]|m3u|flac|spx)" [lzgrep]="!*.@(tlz|lzma)" [ee]="!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)" [unlzma]="!*.@(tlz|lzma)" [lbunzip2]="!*.?(t)bz?(2)" [ooimpress]="!*.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)" [xine]="!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))" [amaya]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [gv]="!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [kid3]="!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)" [lilypond]="!*.ly" [modplug123]="!*.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|oct|okt?(a)|p[st]m|s[3t]m|ult|umx|wav|xm)" [pbzcat]="!*.?(t)bz?(2)" [unxz]="!*.@(?(t)xz|tlz|lzma)" [playmidi]="!*.@(mid?(i)|cmf)" [lzcat]="!*.@(tlz|lzma)" [slitex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [aaxine]="!*@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.@(crdownload|part))" [advi]="!*.dvi" [lzmore]="!*.@(tlz|lzma)" )



Zmienne środowiskoweEdytuj

Opis [12][13]

Wyświetlamy:

printenv

przykładowy wynik:


XDG_VTNR=7
SSH_AGENT_PID=1385
XDG_SESSION_ID=c1
GEDIT_CURRENT_DOCUMENT_TYPE=text/plain
CLUTTER_IM_MODULE=xim
SESSION=ubuntu
GPG_AGENT_INFO=/run/user/1000/keyring-iaC4kY/gpg:0:1
TERM=xterm
VTE_VERSION=3406
XDG_MENU_PREFIX=gnome-
GEDIT_DOCUMENTS_PATH=/home/a/drop.sh /home/a/Pobrane/maximus-book/code/bin/mandelbrot_external_ray_out.c /home/a/Pobrane/maximus-book/code/README
SHELL=/bin/bash
GEDIT_CURRENT_LINE=text `echo       "-0.75  0.01"| ./rescale 53 53 $view 0` -0.75+0.01i
WINDOWID=71303676
UPSTART_SESSION=unix:abstract=/com/ubuntu/upstart-session/1000/1295
GNOME_KEYRING_CONTROL=/run/user/1000/keyring-iaC4kY
GTK_MODULES=overlay-scrollbar:unity-gtk-module
GEDIT_CURRENT_DOCUMENT_SCHEME=file
USER=a
JRE_HOME=/usr/local/java/jre1.7.0_45
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
SSH_AUTH_SOCK=/run/user/1000/keyring-iaC4kY/ssh
GEDIT_CURRENT_DOCUMENT_NAME=README
SESSION_MANAGER=local/zalman:@/tmp/.ICE-unix/1437,unix/zalman:/tmp/.ICE-unix/1437
DEFAULTS_PATH=/usr/share/gconf/ubuntu.default.path
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg
GEDIT_CURRENT_WORD=i
DESKTOP_SESSION=ubuntu
PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/a/bin:/usr/local/java/jdk1.7.0_45/bin:/home/a/bin:/usr/local/java/jre1.7.0_45/bin
GEDIT_CURRENT_DOCUMENT_DIR=/home/a/Pobrane/maximus-book/code
PWD=/home/a/Pobrane/maximus-book/code
JOB=dbus
XMODIFIERS=@im=ibus
JAVA_HOME=/usr/local/java/jdk1.7.0_45
LANG=pl_PL.UTF-8
GDM_LANG=pl
MANDATORY_PATH=/usr/share/gconf/ubuntu.mandatory.path
GEDIT_CURRENT_LINE_NUMBER=13
UBUNTU_MENUPROXY=1
COMPIZ_CONFIG_PROFILE=ubuntu
IM_CONFIG_PHASE=1
GDMSESSION=ubuntu
SESSIONTYPE=gnome-session
SHLVL=1
HOME=/home/a
XDG_SEAT=seat0
LANGUAGE=pl
GEDIT_CURRENT_DOCUMENT_PATH=/home/a/Pobrane/maximus-book/code/README
GEDIT_CWD=/home/a
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
UPSTART_INSTANCE=
UPSTART_EVENTS=started xsession
LOGNAME=a
COMPIZ_BIN_PATH=/usr/bin/
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-2xmczCQuFO
XDG_DATA_DIRS=/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/
QT4_IM_MODULE=xim
LESSOPEN=| /usr/bin/lesspipe %s
GEDIT_CURRENT_DOCUMENT_URI=file:///home/a/Pobrane/maximus-book/code/README
INSTANCE=
TEXTDOMAIN=im-config
UPSTART_JOB=gnome-session
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=:0.0
GEDIT_DOCUMENTS_URI=file:///home/a/drop.sh file:///home/a/Pobrane/maximus-book/code/bin/mandelbrot_external_ray_out.c file:///home/a/Pobrane/maximus-book/code/README
XDG_CURRENT_DESKTOP=Unity
GTK_IM_MODULE=ibus
LESSCLOSE=/usr/bin/lesspipe %s %s
TEXTDOMAINDIR=/usr/share/locale/
XAUTHORITY=/home/a/.Xauthority
COLORTERM=gnome-terminal
_=/usr/bin/printenv

Różne sposoby zmiany wartości:[14]

 name=value
export name=value
name=value program
env name=value program



EDITOREdytuj

Nie jest stałą zmienną[15], czasem jest używany odnośnik symboliczny. Sprawdzamy to:



which editor

przykładowy wynik:

/usr/bin/editor

Sprawdzamy efekt:

editor

i uruchamia się ...

IFSEdytuj

Zmienna IFS (ang. Input Field Separators czyli Wewnętrzny separator pól)

Jest to wewnętrzna zmienna bash[16] używana do dzielenia słów ( ang. Word Splitting) po rozwinięciu i do dzielenia wierszy na słowa za pomocą wbudowanego polecenia read.

Wartość domyślna to

<spacja><tab><nowa linia>

Domyślną wartością IFS jest: spacja, tabulator i znak nowej linii.

Kiedy spróbujemy wyświetlić wartość IFS nie widzimy nic, ponieważ są to znaki specjalne.[17]

echo "$IFS"

Korzystając z opcji "tve" polecenia cat, możemy zobaczyć spację, po której następuje znak ^I, który jest znakiem tabulacji, a następnie znak nowej linii.

echo "$IFS" | cat -tve
 ^I$
$


Jeśli wartość IFS jest równa null, nie następuje dzielenie słów.

LANGEdytuj

Wartość tej zmiennej ma wpływ na:


Sprawdzamy aktualną wartość:

echo $LANG
pl_PL.UTF-8

Dopuszczale wartości znajdujemy za pomocą polecenia:[19][20]


locale -a

przykładowy wynik:

C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
pl_PL.utf8
POSIX


lub w pliku /usr/share/i18n/supported:[21]

# This file names the currently supported and somewhat tested locales.
# If you have any additions please file a glibc bug report.
aa_DJ.UTF-8 UTF-8
aa_DJ ISO-8859-1
aa_ER UTF-8
aa_ER@saaho UTF-8
aa_ET UTF-8
...
pap_AN UTF-8
pl_PL.UTF-8 UTF-8
pl_PL ISO-8859-2
ps_AF UTF-8
pt_BR.UTF-8 UTF-8
pt_BR ISO-8859-1
...


Czasowa zmiana wartości:

export LANG=en_GB.utf8
LANG=en_us_8859_1

lub setlocale[22]

LC_NUMERICEdytuj

Sprawdzamy wartość:

locale | grep NUM
LC_NUMERIC="pl_PL.UTF-8"


wpływa na dziłanie printf[23]

LIBRARY_PATHEdytuj

LD_LIBRARY_PATH to zmienna środowiskowa ( ang. environment variable), która zawiera listę katalogów, w których plik wykonywalny może wyszukiwać współdzieloną bibliotekę systemu Linux. Nazywa się to również ścieżką wyszukiwania bibliotek udostępnionych.[24]


Wartość zmiennej środowiskowej LD_LIBRARY_PATH jest: rozdzielonym dwukropkiem (:) zestawem katalogów, w których biblioteki są wyszukiwane jako pierwsze przed standardowym zestawem katalogów.


jest sprawdzana w czasie kompilacji (linkowania)


Sprawdzamy wartość:

echo $LD_LIBRARY_PATH

Zmieniamy wartosć czasowo:


na stałe ( w pliku ~/.bashrc)

echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/absolute_path/' >> ~/.bashrc

PATHEdytuj

Ścieżka dostępu do plików wykonywalnych = PATH

Wyświetlamy wartość zmiennej PATH:

echo $PATH

Zmieniamy wartość zmiennej PATH:

PATH="$HOME/.cabal/bin:$PATH"

Zmiana działa:

  • tylko w tym terminalu
  • tylko na czas działania w tym terminalu

W celu stałej zmiany wartości zmiennej PATH dla danego użytkownika należy powyższą instrukcję dodać do swojego pliku

~/.profile 

lub

~/.bash_profile 

lub

~/.bash_login 

Edycja pliku jest możliwa po otwarciu go w trybie administratora.



Położenie pliku w zależności od klasy użytkowników [25]
Klasa użytkowników plik
aktualny $HOME/.bash_profile
wszyscy oprócz su /etc/profile
su (root) /root/.bash_profile

LD_LIBRARY_PATHEdytuj

  • Ścieżka dostępu do bibliotek skompilowanych [26]
  • jest sprawdzana w czasie wykonywania programu.
  • jest to lista katalogów rozdzielonych dwukropkiem (ang. colon) podobnie jak PATH
  • katalogi zawierają prawidłowo skompilowane i zlinkowane biblioteki

złe ustawienie zmiennej powoduje błąd:[27]

  error while loading shared libraries: lib***.so: cannot open shared object file: No such file or directory


Wyświetlamy

 echo $LD_LIBRARY_PATH

Sprawdzamy lokalizację nieznalezionej biblioteki (jeśli jest zainstalowana):

 sudo updatedb
 locate libgmp

zmieniamy czasowo:

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/


lub na stałe przez:

  • wpis (jako root) w pliku /etc/ld.so.conf.d/*.conf
  • ldconfig
  • dodanie do ~/.bashrc
  • /etc/environment w Ubuntu[28]
 echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/' >> ~/.bashrc


 sudo ldconfig


Jeśli biblioteka nie jest zainstalowana to:

 apt-cache search <libraryname>

Ręczna edycja

gedit ~/.bashrc

dodajemy wpis

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/

specjalne zmienneEdytuj

Zmienne specjalne ( ang. Bash Special Variables)[29]

Sposoby pracyEdytuj

  • debugowanie skryptów [30]

Ręczne wpisywanie poleceńEdytuj

W konsoli wpisujemy:

which bash

otrzymujemy odpowiedź gdzie jest program obsługujący wiersz poleceń naszej powłoki:

/bin/bash

SkryptyEdytuj

Polecenia możemy

  • zapisać do pliku tekstowego zwanego skryptem , np. g (uwaga: często skrypty powłoki mają rozszerzenie sh)
  • plik powinien rozpoczynać się od magicznych znaków [31]):
#!/bin/bash

lub:

awk
  • nadać mu atrybut wykonywalności (g oznacza tutaj przykładową nazwę pliku):
chmod +x g
  • uruchomić plik znajdujący się w aktualnym katalogu:
./g

shebangEdytuj

Shebang jest dwu bajtową magiczną liczbą (ang. magic number) oznaczającą typ pliku. Więcej o magicznej liczbie:

man magic

Po Shebangu następuje ścieżka do programu wykonującego polecenia skryptu.

Lokalizacja skryptuEdytuj

Skrypt może być:

  • w dowolnym katalogu,
    • uruchamiany z tego katalogu ./nazwa
  • w katalogu ~/bin/ [32]

Sprawdzanie skryptuEdytuj

  • online [33]
  • debugowanie [34]: #!/bin/bash -x
  • sprawdzanie wyjścia skryptu: echo $?

HeredocEdytuj

Opis[35]:

  • kilka poleceń zostanie wykonanych, a treść ich jest przekierowana na stdin programu [36]

Składnia: [37]

program <<LimitString
command #1
command #2
...
LimitString


Przykłady: [38]

Zapisywanie kilku linii tekstu do pliku a.txt z użyciem cat: [39]

cat > a.txt << EOF 
--------------------------
The quick brown fox 
jumped over the lazy dog 
--------------------------
EOF

Języki skryptoweEdytuj

język nagłówek przenośny nagłówek
bash #!/bin/bash #!/usr/bin/env bash
php #!/usr/bin/php
sed
awk
perl #!/usr/bin/perl #!/usr/bin/env perl
python #!/usr/bin/python #! /usr/bin/env python

Skróty klawiaturoweEdytuj

Polecenia BASH'a Skrót klawiszowy Opis polecenia
SIGTSTP Ctrl-Z zatrzymuje (kończy) proces
SIGINT Ctrl-C zawiesza proces (pauza)

Wejście i wyjścieEdytuj

Potok

Przykład:

 ./pseudo-de <mandel.kfb >pde.pgm


PlikiEdytuj

Prawa dostępuEdytuj

Sprawdzanie praw dostępuEdytuj

setfacl
ls -l


zmienianaie praw dostępuEdytuj

getfacl

Ile mamy plików na dysku ?Edytuj

find / -type f | wc -l


Tworzenie animowanego gifaEdytuj

Przykładowy skrypt uruchamiający polecenia z biblioteki ImageMagic tworzące z plików pgm animowany gif:


#!/bin/bash

# script file for BASH 
# which bash
# save this file as g
# chmod +x g
# ./g

i=0
# for all pgm files in this directory
for file in *.pgm ; do
  # b is name of file without extension
  b=$(basename $file .pgm)
  # change file name to integers and count files
  ((i= i+1))
  # convert from pgm to gif and add text ( level ) using ImageMagic
  convert $file -pointsize 50 -annotate +10+100 $b ${i}.gif
  echo $file
done
 
echo convert all gif files to one animated gif_file
convert -delay 50   -loop 1 %d.gif[1-$i] aa${i}.gif
# convert -delay 50 -loop 0 %d.gif[1-$i] b${i}.mpg # it needs ffmpeg
# ffmpeg2theora %d.gif --framerate 12 --videoquality 9  -o output129.ogv

 
echo b${i} OK
# end



lub inna wersja z konwersją z svg:[40]


for i in ??.svg
do
  rsvg $i ${i%svg}png
  convert ${i%svg}png ${i%svg}gif
done
gifsicle --delay 4 --loop --optimize ??.gif > out.gif

nazwa plikuEdytuj

Składniki nazwy pliku

  • ścieżka ( ang. path )
  • nazwa podstawowa ( ang. basename )
  • kropka
  • rozszerzenie ( ang. extension)


Polecenia

  • basename



składniki nazwyEdytuj

Jak podzielić nazwę na elementy? [41]

# https://www.cyberciti.biz/faq/bash-get-basename-of-filename-or-directory-name/
FILE="/home/vivek/lighttpd.tar.gz"
echo "${FILE#*.}"     # print tar.gz
echo "${FILE##*.}"    # print gz
ext="${FILE#*.}"      # store output in a shell variable 
echo "$FILE has $ext" # display it


Nazwy plików z myślnikami na początkuEdytuj

Nazwy plików z myślnikami na początku mogą powodować wiele problemów[42]

  • być błędnie interpretowane przez skrypt jako opcja


Zapobieganie

  • wstawić -- między poleceniem (jak cp) a jego argumentami. Spowoduje to zatrzymanie skanowania w poszukiwaniu opcji
  • upewnienie się, że nazwy plików zawsze zaczynają się od katalogu, używając względnych lub bezwzględnych nazw ścieżek.

Zmiana nazwy plikówEdytuj

Możemy wykorzystać polecenia:

lub skrypt:


#!/bin/bash
 
# script file for BASH
# which bash
# save this file as r
# chmod +x r
# ./r
# for all pgm files in this directory
# for all pgm files in this directory
for file in *.pgm ; do
  # remove first 3 chars from old file name
  newfile=${file:3}
  # change name of file
  mv $file $newfile
  echo $newfile
done

echo OK
# end

Kopiowanie plikówEdytuj

Chcemy skopiować: [43][44]

  • tylko pliki z rozszerzeniem c
  • z katalogu ~/c
  • do katalogu ~/temp
  • tak aby zachować podkatalogi

Możemy użyć:

find  ~/c -maxdepth 7 -name "*.c" -exec cp {} -R ~/temp \;

ale w katalogu docelowym nie ma podkatalogów

Inna opcja:

cp -R ~/c  ~/temp

Kopiuje z podkatalogami ale wszystkie pliki.

Działające polecenia:

  • z użyciem find i tar
(cd ~/c ; find  -maxdepth 7 -name "*.c" |tar -T - -c) |tar -C ~/temp -x 
  • z użyciem rsync:
rsync -a --include='*.c' --include='*/' --exclude='*' ~/c/ ~/temp/

Łaty i różniceEdytuj

Łańcuchy,znaki i tekstEdytuj

Definicje:

  • łańcuch (ang. string) inaczej napis czyli ciąg znaków
  • znak



nadawanie wartościEdytuj

Są trzy różne sposoby [45]

przetwarzanie tekstuEdytuj


Dzielenie słówEdytuj

Dzielenie słów ( ang. Word Splitting[46] or Word expansion) jest to dzielenie łańcucha na słowa.

Następuje to w czasie [47]

  • rozszerzenie parametrów ( ang. parameter expansion) [48]
  • zamiana komend ( ang. command substitution)[49]
  • rozwinięcie arytmetyczne ( ang. arithmetic expansion)

jeśli nie wystąpiło w podwójnych cudzysłowach

Powłoka traktuje każdy znak IFS jako ogranicznik ( ang. delimiter ) i dzieli wyniki innych interpretacji na słowa na tych znakach

LiczbyEdytuj

CałkowiteEdytuj

Rozkład na liczby pierwsze: (zobacz man factor):

factor 27417
27417: 3 13 19 37

ale już:

time factor 237142198758023568227473377297792835283496928595231875152809132048206089502588927
factor: „237142198758023568227473377297792835283496928595231875152809132048206089502588927” jest za duża
real	0m0.001s
user	0m0.000s
sys	0m0.000s

Sekwencje:


seq -w 0 11

wynik:

00
01
02
03
04
05
06
07
08
09
10
11

ZmiennoprzecinkoweEdytuj

Bash nie wykonuje działań na liczbach zmiennoprzecinkowych. Korzystaj z :


Konwersja postaci naukowej do zmiennoprzecinkowejEdytuj

Standardowa odpowiedź nie może nie działać: [50]

 printf '%.0f' 1.8200E+02
 bash: printf: 1.8200E+02: nieprawidłowa liczba 0

Zmieniamy lokalnie ustawienia językowe (LC_NUMERIC):

LC_NUMERIC="en_US.UTF-8" printf "%f\n" 1.8200E+02
182.000000

i działa jak oczekujemy.

Jeśli chcemy zapisać rezultat konwersji do zmiennej to: [51]

radius="1.5e-1"
radius=$(LC_NUMERIC="en_US.UTF-8" printf "%f\n" $radius)

bez znakuEdytuj

Liczba bez znaku [52]( absolutna wartość, moduł liczby)

${var#-}

SystemEdytuj

Informacje dostępne za pomocą cat: [53]

cat /proc/cpuinfo
cat /proc/meminfo
cat /proc/version
cat /proc/scsi/scsi 
cat /proc/partitions 

albo gcc

lub lista:

  • cpu = lscpu
  • sprzętu = lshw (list hardware):[54]
  • pci = lspci
  • scsi = lsscsi
  • usb = lsusb
  • urządzeń blokowych: lsblk


Przykłady:

sudo lshw -short
lsblk -o KNAME,TYPE,SIZE,MODEL


Sprawdzanie kolejności bajtów (ang. endianess):


 lscpu

przykładowy wynik:


Architecture:          x86_64
Tryb(y) pracy CPU:     32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Wątków na rdzeń:    2
Rdzeni na gniazdo:     4
Socket(s):             1
Węzłów NUMA:        1
ID producenta:         GenuineIntel
Rodzina CPU:           6
Model:                 60
Model name:            Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Wersja:                3
CPU MHz:               3401.195
CPU max MHz:           3900,0000
CPU min MHz:           800,0000
BogoMIPS:              6784.73
Wirtualizacja:         VT-x
Cache L1d:             32K
Cache L1i:             32K
Cache L2:              256K
Cache L3:              8192K
NUMA node0 CPU(s):     0-7
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm xsaveopt dtherm ida arat pln pts


Info o sprzęcie:

  • hwinfo
  • skrypt basha Inxi
  • przestrzeń dysków
    • wersja standardowa = df
    • wersja w Pythonie = pydf
  • zamontowane urządzenie = mount
  • pamięć RAM = free
  • urządzenia SATA = hdparm

Przykłady:[55]

inxi -Fx
mount | column -t
free -m
sudo hdparm -i /dev/sda
fdisk -l
parted -l

PoleceniaEdytuj

prefiks opcji poleceń:

  • " -- ( ang. double dash) oznacza koniec opcji poleceń

listaEdytuj

Lista wszystkich poleceńEdytuj

Liczba dostępnych poleceń zainstalowanych przez użytkownika:[57]

 ls /usr/bin | wc -l

przykładowy wynik :

 3239

inny katalog użytkownika:

 ls /usr/local/bin | wc -l

przykładowy wynik :

 7

Katalog poleceń systemowych :

 ls /bin | wc -l


przykładowy wyni:

 165

Szacuje się, że przecietny użytkownik pamieta około 30 poleceń [58]


Lista wszystkich poleceń:[59][60]

  compgen -c # will list all the commands you could run.


Nie ma sposobu, aby wyświetlić listę funkcji lub wbudowanych funkcji, które działają we wszystkich powłokach. Możesz znaleźć listę wbudowanych w dokumentacji powłoki.

Możesz wyświetlić listę aliasów, uruchamiając wbudowany alias bez argumentu.

typyEdytuj

"Powłoka zna cztery rodzaje poleceń.

  • Aliasy( ang. Aliases): są to pseudonimy dla polecenia z pewnymi opcjami. Są one zdefiniowane w pliku inicjującym powłoki (~ / .bashrc dla bash).
  • Funkcje: są fragmentami kodu powłoki o nazwie. Podobnie jak aliasy, są one zdefiniowane w pliku inicjalizacji powłoki.
  • wewnętrzne czyli wbudowane ( ang. Builtins): powłoka zawiera niewielką liczbę wbudowanych poleceń. Większość wbudowanych manipuluje stanem powłoki (cd zmienia bieżący katalog, ustawia opcje zmian i parametry pozycyjne, eksport zmienia środowisko,…). Większość powłok oferuje w zasadzie te same wbudowane rozszerzenia, ale każda powłoka ma kilka rozszerzeń zestawu podstawowego.
  • Polecenia zewnętrzne ( ang. External commands): są niezależne od powłoki. Podobnie jak inne programy, powłoka wykonuje programy zewnętrzne, wyszukując je w ścieżce wyszukiwania wykonywalnego. Zmienna środowiskowa PATH zawiera rozdzieloną dwukropkami listę katalogów do wyszukiwania programów.

W przypadku poleceń kilku typów o tej samej nazwie, wykonywane jest pierwsze dopasowanie w powyższej kolejności.

Możesz zobaczyć, jaki typ polecenia odpowiada nazwie, uruchamiając "[61]

 type some_name
 

Przykład

type ld
ld is hashed (/usr/bin/ld)

Informacja "ld is hashed" oznacza że lokalizacja polecenia ld jest w tablicy skrótów ( ang. hash table). Zamiast przeszukiwać całą ścieżkę dla pliku binarnego za każdym razem, gdy jest wywoływany, jest on umieszczany w tablicy skrótów w celu szybszego wyszukiwania. Tak więc każdy plik binarny, który jest już w tej tabeli skrótów, jest mieszany. Jeśli przeniesiesz pliki binarne, gdy są już zaszyfrowane, nadal będzie próbował wywołać je w ich starej lokalizacji. Jest to kwestia wydajności. [62] W nawiasie podana jest lokalizacja, czyli jest to zewnętrzne polecenie zapisane w tabeli skrótów (ang. hashed external command)


grupyEdytuj

  • GNU binutils jest zbiorem narzędzi binarnych.

binutilsEdytuj

GNU binutils jest zbiorem narzędzi binarnych. Zawiera:[63]

  • ld - GNU linker
  • as - GNU assembler
  • gold - nowy , szybszy linker tylko dla ELF
  • addr2line - Konwertuje adresy na nazwy plików i numery linii
  • ar - Narzędzie do tworzenia, modyfikowania i rozpakowywania archiwów
  • c++filt - Filtruj, aby uporządkować symbole zakodowane w C++.
  • dlltool - Tworzy pliki do budowania i używania bibliotek DLL
  • elfedit - Umożliwia zmianę plików w formacie ELF
  • gprof - Wyświetla informacje o profilowaniu
  • gprofng - Zbiera i wyświetla dane dotyczące wydajności aplikacji
  • nlmconv - Konwertuje kod obiektowy na NLM.
  • nm - Wyświetla listę symboli z plików obiektowych
  • objcopy - Kopiuje i tłumaczy pliki obiektowe
  • objdump - Wyświetla informacje z plików obiektowych
  • ranlib - Generuje indeks do zawartości archiwum
  • readelf - Wyświetla informacje z dowolnego pliku obiektowego formatu ELF
  • size - Wyświetla rozmiary sekcji obiektu lub pliku archiwum
  • strings - Wyświetla możliwe do wydrukowania ciągi znaków z plików
  • strip - Odrzuca symbole
  • windmc - Kompilator komunikatów zgodny z systemem Windows
  • windres - Kompilator plików zasobów systemu Windows

wersjaEdytuj

Wersja binutils:[64]

 ld -v
GNU ld (GNU Binutils for Ubuntu) 2.38

lub

ld --version


dpkg -l | grep binutils

Przykładowy wynik:

ii  binutils                                   2.38-4ubuntu2.1                         amd64        GNU assembler, linker and binary utilities
ii  binutils-common:amd64                      2.38-4ubuntu2.1                         amd64        Common files for the GNU assembler, linker and binary utilities
ii  binutils-x86-64-linux-gnu                  2.38-4ubuntu2.1                         amd64        GNU binary utilities, for x86-64-linux-gnu target
ii  libbinutils:amd64                          2.38-4ubuntu2.1                         amd64        GNU binary utilities (private shared library)

Polecenie:

apt-cache policy binutils

Przykładowy wynik:

binutils:
 Installed: 2.38-4ubuntu2.1
 Candidate: 2.38-4ubuntu2.1
 Version table:
*** 2.38-4ubuntu2.1 500
       500 http://pl.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
       500 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages
       100 /var/lib/dpkg/status
    2.38-3ubuntu1 500
       500 http://pl.archive.ubuntu.com/ubuntu jammy/main amd64 Packages


Polecenie:

apt-cache show binutil

historiaEdytuj

Sprawdzamy 10 najczęściej używanych poleceń konsoli:[65]

   history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl |  head -n10

przykładowy wynik :

     1	239  23.9%  git
     2	231  23.1%  gcc
     3	49   4.9%   sudo
     4	43   4.3%   time
     5	31   3.1%   convert
     6	26   2.6%   make
     7	22   2.2%   locate
     8	22   2.2%   cd
     9	15   1.5%   ls
    10	12   1.2%   python

BezpieczeństwoEdytuj

Jak mogę bezpiecznie uruchomić niezaufany plik wykonywalny w systemie Linux?[66]

  • Virtualization
    • virtual machine
    • conatainer ( OS or application)
  • Firejail
  • systemd-nspawn
  • chroot

ProblemyEdytuj

zły interpreterEdytuj

 bash: ./g.sh: /bin/bash^M: zły interpreter: Nie ma takiego pliku ani katalogu

lub w wersji angielskiej:[67]

 bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory


Błąd jest spowodowany złym znakiem końca linii[68]

ŻródłaEdytuj

Zobacz równieżEdytuj

PrzypisyEdytuj

  1. man - polecenie systemu Unix uruchomiane z wiersza poleceń powłoki systemowej
  2. | explainshell
  3. w3cub bash docs
  4. Powłoka systemu UNIX- dr inż. Edward Śliwa
  5. howtogeek : 15-special-characters-you-need-to-know-for-bash
  6. shell metachar by Tim Bowe
  7. bash-scripts-regular-expressions by Mikhail Raevskiy Sep 20, 2020
  8. What is the CVE-2014-6271 bash vulnerability, and how do I fix it?
  9. superuser question: can-i-use-pipe-output-as-a-shell-script-argument
  10. Bash options
  11. unix.stackexchange question: how-can-i-list-bashes-options-for-the-current-shell
  12. Zmienna środowiskowa w wikipedii
  13. Environment Variables
  14. env
  15. [1]
  16. tldp : internal variables
  17. theunixschool : linux-shell-what-is-ifs ?
  18. is in a number of the /etc/init.d/* scripts. What does LANG=C do and why do you need to set LANG=C.
  19. to change the bash shell language ?
  20. Locale w wikipedii
  21. doc 8.3. The locale
  22. - Linux man page
  23. [http://stackoverflow.com/questions/12845997/unexplicable-error-in-bash-printf-command-inside-a-script-returns-invalid-numb STackoverflow: Unexplicable error in bash: printf command inside a script returns “invalid number” ]
  24. Linux - Library Path (LD_LIBRARY_PATH, LIBPATH, SHLIB_PATH) by DataCademis
  25. [Troubleshooters.Com and T.C Linux Library Present: Adding a Directory to the Path by Steve Litt]
  26. ubuntu environment Variables
  27. stackoverflow question: linux-error-while-loading-shared-libraries-cannot-open-shared-object-file-no-s
  28. stackoverflow question: how-to-set-the-environmental-variable-ld-library-path-in-linux
  29. tldp refcard
  30. linuxconfig.org: how-to-debug-bash-scripts
  31. Shebang w wikipedii
  32. The Beginner’s Guide to Shell Scripting: The Basics
  33. | spellcheck
  34. tldp - something goes wrong (debugging)
  35. Here document in english wikipedia
  36. Kurs pracy w systemie Linux (pracownia Michalisa
  37. Chapter 19. Here Documents
  38. stackoverflow: How can I write a here doc to a file in Bash script?
  39. Here Documents from ss64
  40. ReCode Project - Topographic Form animated by ClaudiusMaximus
  41. cyberciti : bash-get-basename-of-filename-or-directory-name by Vivek Gite Last updated: September 19, 2018
  42. Filenames with leading dashes by GrayCat
  43. Archiwum grupy pl.comp.os.linux.programowanie: Bash: kopiowanie wybranych plików z podkatalogami
  44. [http://ubuntu.pl/forum/viewtopic.php?f=170&t=160739%7Cpoprawne wywołanie rsync w bash w forum ubuntu.pl
  45. Bash String Examples from HackTux
  46. gnu bash manual: Word-Splitting
  47. datacadamia : bash word splitting
  48. gnu bash manual : Shell-Parameter-Expansion
  49. gnu bash manua: Command-Substitution
  50. [http://stackoverflow.com/questions/9506584/convert-scientific-notation-bash-script Stackoverflow: convert scientific notation bash script ]
  51. [http://www.cyberciti.biz/faq/ksh-csh-shell-assign-store-printf-result-variable/ Linux / Unix: Bash Shell Assign Printf Result To Variable by NIXCRAFT ]
  52. stackoverflow question : absolute-value-of-a-number
  53. 16 commands to check hardware information on Linux By Silver Moon On Apr 8, 2014
  54. Hardware Lister (lshw) - home page
  55. unix.stackexchange question: how-to-list-disk-in-linux
  56. opengroup online pubs: hash
  57. linuxconfig.org: linux-commands
  58. quora : Do-experienced-Linux-users-remember-all-the-commands
  59. unix.stackexchange question: list-all-commands-that-a-shell-knows
  60. stackoverflow question: linux-command-to-list-all-available-commands-and-aliases
  61. unix.stackexchange question: list-all-commands-that-a-shell-knows, odpowiedź Gilles 'SO- stop being evil', tłumaczenie nieautoryzowane , ( google translate)
  62. unix.stackexchange question : what-does-rm-is-hashed-mean
  63. sourceware : binutils
  64. stackoverflow question : how-to-see-what-version-of-binutils-is-on-ubuntu ?
  65. Free softwares I use by YouJun Hu
  66. superuser question: how-can-i-run-an-untrusted-executable-on-linux-safely ?
  67. stackoverflow question : configure-bin-shm-bad-interpreter
  68. webhostingtalk : skrypt-sh-problem/