{"id":424,"date":"2018-11-24T23:01:41","date_gmt":"2018-11-24T22:01:41","guid":{"rendered":"http:\/\/linuxboxen2.dk\/?p=424"},"modified":"2018-11-24T23:01:41","modified_gmt":"2018-11-24T22:01:41","slug":"foerst-hvad-er-bash","status":"publish","type":"post","link":"https:\/\/www.linuxboxen.dk\/?p=424","title":{"rendered":"F\u00f8rst hvad er Bash?"},"content":{"rendered":"<p>F\u00f8rst hvad er Bash? Bash er en kommandofortolker, som b\u00e5de brugere og applikationer kan benytte til at k\u00f8re programmer og \u00e6ndre konfigurationen af et Unix-lignende system. Bash blev lanceret i 1989 som en videreudvikling af flere andre kommandofortolkere, bl.a. Bourne shell (sh). Bash er open source og er derfor blevet brugt i mange open source-styresystemer. Bash har en masse indbyggede kommandoer, og nogle af dem er en skrabet version af deres eksterne GNU coreutils f\u00e6tre. S\u00e5 hvorfor bruge dem? Du har sikkert allerede brugt dem uden du t\u00e6nker over det. P\u00e5 grund af r\u00e6kkef\u00f8lgen af hvordan kommandoer i Bash bliver udf\u00f8rt: Som er denne. Bash aliaser Bash s\u00f8geord Bash funktioner Bash builtins Scripts og eksekverbare programmer, der er i din PATH S\u00e5 n\u00e5r du k\u00f8rer echo, kill, printf, PWD, eller test s\u00e5 er det sandsynligvis du bruger bash builtins snarere end GNU coreutils kommandoer. Hvordan kan du vide hvilken type som bruges ?. Ved hj\u00e6lp af en Bash builtins som fort\u00e6ller dig, hvilken kommando der bruges.<\/p>\n<pre>$ command -V echo\necho is a shell builtin\n\n$ command -V ping\nping is \/bin\/ping\n<\/pre>\n<p>Bash har ikke man-sider, men den har en hj\u00e6lpe kommando indbygget, der viser syntaks og muligheder:<\/p>\n<pre>$ help echo\necho: echo [-neE] [arg ...]\n    Write arguments to the standard output.\n    \n    Display the ARGs on the standard output followed by a newline.\n    \n    Options:\n      -n        do not append a newline\n      -e        enable interpretation of the following backslash escapes\n[...]\n<\/pre>\n<p>I normale linux komandoer er syntaks for hj\u00e6lpe info &#8211;help hvor hj\u00e6lp er en kommando parametere i stedet for en kommando. Kommandoen <b>typen<\/b> ser meget gerne kommandoen indbyggede, men det g\u00f8r mere:<\/p>\n<pre>$ type -a cat\ncat is \/bin\/cat\n\n$ type -t cat\nfile\n\n$ type ll\nll is aliased to `ls -alF'\n\n$ type -a echo\necho is a shell builtin\necho is \/bin\/echo\n\n$ type -t grep\nalias\n<\/pre>\n<p><b>type<\/b> kommandoen viser hvilken indbygget kommandoer, funktioner, aliaser, n\u00f8gleord (ogs\u00e5 kaldet reserverede ord), og bin\u00e6re eksekverbare filer og scripts, som den kalder fil. P\u00e5 dette punkt, hvis du er ligesom mig, siger du du brummende &#8220;Hvad med at vise mig en liste over de egenskaber.&#8221; Du kan finde disse ting i. The GNU Bash reference Manuelle indekser. Pointen med denne lille \u00f8velse er, s\u00e5 du ved, hvad du virkelig bruger, n\u00e5r du skriver en kommando i Bash shell, og s\u00e5 du ved, hvordan det ser ud til Bash. Der er endnu en overlappende Bash indbyggede, og det er tid n\u00f8gleordet:<\/p>\n<pre>$ type -t time\nkeyword\n<\/pre>\n<p>S\u00e5 hvorfor vil du bruge bash indbyget komandoer is steder for GNU komandoerne. Indbygget komandoer bliver sikkert udf\u00f8rt hurtigere en extern komando. Fordi en externe komando skal startes af bash. Det betyder sikkert ikke s\u00e5 meget mere som i gamle dage hvor der ikke var s\u00e5 meget power som idag. Men husk at bruge hele stien eks. \/bin\/echo i stedet for bare echo, i dine skripts. For at finde den sti du skal bruge kan du bruge den gode gammle <a href=\"http:\/\/www.linuxboxen.dk\/?q=show-command\/141\">which<\/a> komando. Som vist her.<\/p>\n<pre>$ which echo\n\/bin\/echo\n\n$ which which\n\/usr\/bin\/which\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Bash indbygget funktioner. Med komandoen <b>declare<\/b> kan du f\u00e5 informater om bash indbygget funktioner og oprette dem selv. K\u00f8r declare -F for at se en liste over de indbygget funktioner. declare -f lister alle funktioner. declare -f <b>funktion<\/b> viser den funktion.<\/p>\n<p>&nbsp;<\/p>\n<pre>$ declare -F\ndeclare -f __all_modules\ndeclare -f __cards\ndeclare -f __expand_tilde_by_ref\ndeclare -f __get_cword_at_cursor_by_ref\ndeclare -f __git_eread\ndeclare -f __git_ps1\ndeclare -f __git_ps1_colorize_gitstring\ndeclare -f __git_ps1_show_upstream\ndeclare -f __grub_dir\ndeclare -f __grub_get_last_option\ndeclare -f __grub_get_options_from_help\ndeclare -f __grub_get_options_from_usage\ndeclare -f __grub_list_menuentries\ndeclare -f __grub_list_modules\ndeclare -f __grubcomp\ndeclare -f __loaded_modules\ndeclare -f __ltrim_colon_completions\ndeclare -f __parse_options\ndeclare -f __ports\ndeclare -f __profiles\ndeclare -f __reassemble_comp_words_by_ref\ndeclare -f __resample_methods\ndeclare -f __sink_inputs\ndeclare -f __sinks\ndeclare -f __sinks_idx\ndeclare -f __source_outputs\ndeclare -f __sources\ndeclare -f __zfs_argument_chosen\ndeclare -f __zfs_complete\ndeclare -f __zfs_complete_multiple_options\ndeclare -f __zfs_complete_ordered_arguments\ndeclare -f __zfs_complete_switch\ndeclare -f __zfs_get_commands\ndeclare -f __zfs_get_editable_properties                                                                                                                                    \ndeclare -f __zfs_get_inheritable_properties                                                                                                                                 \ndeclare -f __zfs_get_properties                                                                                                                                             \ndeclare -f __zfs_list_datasets                                                                                                                                              \ndeclare -f __zfs_list_filesystems                                                                                                                                           \ndeclare -f __zfs_list_volumes                                                                                                                                               \ndeclare -f __zfs_match_explicit_snapshot                                                                                                                                    \ndeclare -f __zfs_match_multiple_snapshots                                                                                                                                   \ndeclare -f __zfs_match_snapshot                                                                                                                                             \ndeclare -f __zpool_complete                                                                                                                                                 \ndeclare -f __zpool_get_commands                                                                                                                                             \ndeclare -f __zpool_get_editable_properties                                                                                                                                  \ndeclare -f __zpool_get_properties                                                                                                                                           \ndeclare -f __zpool_list_pools                                                                                                                                               \ndeclare -f _a2disconf                                                                                                                                                       \ndeclare -f _a2dismod                                                                                                                                                        \ndeclare -f _a2dissite                                                                                                                                                       \ndeclare -f _a2enconf                                                                                                                                                        \ndeclare -f _a2enmod                                                                                                                                                         \ndeclare -f _a2ensite                                                                                                                                                        \ndeclare -f _allowed_groups                                                                                                                                                  \ndeclare -f _allowed_users                                                                                                                                                   \ndeclare -f _apache2_allcomp                                                                                                                                                 \ndeclare -f _apache2_conf                                                                                                                                                    \ndeclare -f _apache2_mods                                                                                                                                                    \ndeclare -f _apache2_sites                                                                                                                                                   \ndeclare -f _apport-bug                                                                                                                                                      \ndeclare -f _apport-cli                                                                                                                                                      \ndeclare -f _apport-collect                                                                                                                                                  \ndeclare -f _apport-unpack                                                                                                                                                   \ndeclare -f _apport_parameterless\ndeclare -f _apport_symptoms\ndeclare -f _available_interfaces\ndeclare -f _axi_cache\ndeclare -f _cd\ndeclare -f _cd_devices\ndeclare -f _command\ndeclare -f _command_offset\ndeclare -f _complete_as_root\ndeclare -f _completion_loader\ndeclare -f _configured_interfaces\ndeclare -f _count_args\ndeclare -f _cryptdisks\ndeclare -f _debconf_show\ndeclare -f _desktop_file_validate\ndeclare -f _dkms\ndeclare -f _dvd_devices\ndeclare -f _expand\ndeclare -f _filedir\ndeclare -f _filedir_xspec\ndeclare -f _filename_parts\ndeclare -f _fstypes\ndeclare -f _get_comp_words_by_refhttp:\/\/www.linuxboxen.dk\/?q=show-command\/141\ndeclare -f _get_cword\ndeclare -f _get_first_arg\ndeclare -f _get_pword\ndeclare -f _gids\ndeclare -f _grub_editenv\ndeclare -f _grub_install\ndeclare -f _grub_mkconfig\ndeclare -f _grub_mkfont\ndeclare -f _grub_mkimage\ndeclare -f _grub_mkpasswd_pbkdf2\ndeclare -f _grub_mkrescue\ndeclare -f _grub_probe\ndeclare -f _grub_script_check\ndeclare -f _grub_set_entry\ndeclare -f _grub_setup\ndeclare -f _have\ndeclare -f _init_completion\ndeclare -f _inkscape\ndeclare -f _installed_modules\ndeclare -f _ip_addresses\ndeclare -f _kernel_versions\ndeclare -f _kernels\ndeclare -f _known_hosts\ndeclare -f _known_hosts_real\ndeclare -f _loexp_\ndeclare -f _longopt\ndeclare -f _mac_addresses\ndeclare -f _minimal\ndeclare -f _modules\ndeclare -f _ncpus\ndeclare -f _ocamlfind\ndeclare -f _ocamlfind_add\ndeclare -f _ocamlfind_flags\ndeclare -f _ocamlfind_packages\ndeclare -f _openvpn\ndeclare -f _pacat\ndeclare -f _pacat_file_formats\ndeclare -f _pacmd\ndeclare -f _pactl\ndeclare -f _padsp\ndeclare -f _parse_help\ndeclare -f _parse_usage\ndeclare -f _pasuspender\ndeclare -f _pci_ids\ndeclare -f _pgids\ndeclare -f _pids\ndeclare -f _pnames\ndeclare -f _poff\ndeclare -f _pon\ndeclare -f _pulseaudio\ndeclare -f _quote_readline_by_ref\ndeclare -f _realcommand\ndeclare -f _rl_enabled\ndeclare -f _root_command\ndeclare -f _service\ndeclare -f _services\ndeclare -f _shells\ndeclare -f _signals\ndeclare -f _split_longopt\ndeclare -f _subdirectories\ndeclare -f _svn\ndeclare -f _svn_grcut\ndeclare -f _svn_info\ndeclare -f _svn_lls\ndeclare -f _svn_read_hashfile\ndeclare -f _svnadmin\ndeclare -f _svndumpfilter\ndeclare -f _svnlook\ndeclare -f _svnsync\ndeclare -f _svnversion\ndeclare -f _sysvdirs\ndeclare -f _terms\ndeclare -f _tilde\ndeclare -f _ufw\ndeclare -f _ufw_app_commands\ndeclare -f _ufw_commands\ndeclare -f _ufw_default_commands\ndeclare -f _ufw_logging_commands\ndeclare -f _ufw_rule_commands\ndeclare -f _ufw_show_commands\ndeclare -f _ufw_status_commands\ndeclare -f _uids\ndeclare -f _update_initramfs\ndeclare -f _upstart_events\ndeclare -f _upstart_initctl\ndeclare -f _upstart_jobs\ndeclare -f _upstart_reload\ndeclare -f _upstart_restart\ndeclare -f _upstart_start\ndeclare -f _upstart_startable_jobs\ndeclare -f _upstart_status\ndeclare -f _upstart_stop\ndeclare -f _upstart_stoppable_jobs\ndeclare -f _upvar\ndeclare -f _upvars\ndeclare -f _usb_ids\ndeclare -f _user_at_host\ndeclare -f _usergroup\ndeclare -f _userland\ndeclare -f _valgrind\ndeclare -f _variables\ndeclare -f _xfunc\ndeclare -f _xinetd_services\ndeclare -f command_not_found_handle\ndeclare -f dequote\ndeclare -f in_array\ndeclare -f quote\ndeclare -f quote_readline\n<\/pre>\n<pre>$ type quote\nquote is a function\nquote ()\n{\n    echo \\'${1\/\/\\'\/\\'\\\\\\'\\'}\\'\n}\n<\/pre>\n<p>Dette virker ogs\u00e5 p\u00e5 funktioner som du selv opetter. Lige som dette eksemple testfunc som skifter dir til \/etc<\/p>\n<pre>$ function testfunc\n&gt; {\n&gt; cd \/etc\n&gt; }\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Bash store styrker. En ting som er meget vigtigt at vide er hvordan linux styre processer som k\u00f8re p\u00e5 systemet. De kan v\u00e6re sv\u00e6re at stoppe, s\u00e5 hvordan man styre processer der er g\u00e5et i hegnet eller bruger alt cpu. Jeg har haft lidt problemer med kmail i den nyeste version som ikke rigtigt lukke ned. Den starter en enkel process som vist her med <b>ps<\/b> komandoen.<\/p>\n<p>&nbsp;<\/p>\n<pre>$ ps axf|grep kmail\n 2489 ?     Sl  1:44 \/usr\/bin\/kmail -caption KMail\n<\/pre>\n<p>Jeg pr\u00f8vede med en normal kill<\/p>\n<pre>$ kill 2489\n<\/pre>\n<p>Dette eksemple sender vi default signalet til (terminate) signal det svare til CTRL+c. Venter &#8230;&#8230;&#8230;. hmmm Men hvad hvis det ikke virker ?. S\u00e5 er det godt der er en <a href=\"https:\/\/en.wikipedia.org\/wiki\/Darth_Vader\">dark vader<\/a> metode SIGKILL. Som vist her.<\/p>\n<pre>$ kill -9 2489\n<\/pre>\n<p>Dette er nuke versionen af <a href=\"http:\/\/www.linuxboxen.dk\/?q=show-command\/107\">kill<\/a>. Og den virker altid. som GNU man sider siger. &#8220;The SIGKILL signal is used to cause immediate program termination. It cannot be handled or ignored, and is therefore always fatal. It is also not possible to block this signal.&#8221;<br \/>\nOversat : <b>SIGKILL signalet er udviklet til straks at stoppe den process. Det kan ikke \u00e6ndre og blive ignoret af processen, og derfor vil det altid blive fatal for processen og det kan ikke blokeres\/ignores.<\/b> <!-- This is the nuclear option and it will work. As the relevant section of the GNU C manual says: \"The SIGKILL signal is used to cause immediate program termination. It cannot be handled or ignored, and is therefore always fatal. It is also not possible to block this signal.\" This is different from SIGTERM and SIGINT and other signals that politely ask processes to terminate. They can be trapped and handled in different ways, and even blocked, so the response you get to a SIGTERM depends on how the program you're trying to kill has been programmed to handle signals. In an ideal world a program responds to SIGTERM by tidying up before exiting, like finishing disk writes and deleting temporary files. SIGKILL knocks it out and doesn't give it a chance to do any cleanup. (See man 7 signal for a complete description of all signals.) --> S\u00e5 hvad er forskellen p\u00e5 bash kill og GNU kill. Det kan du se med hj\u00e6lpe teksten i bash.<\/p>\n<pre>$ help kill\nkill: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]\n    Send a signal to a job.\n    \n    Send the processes identified by PID or JOBSPEC the signal named by\n    SIGSPEC or SIGNUM.  If neither SIGSPEC nor SIGNUM is present, then\n    SIGTERM is assumed.\n    \n    Options:\n      -s sig    SIG is a signal name\n      -n sig    SIG is a signal number\n      -l        list the signal names; if arguments follow `-l' they are\n        assumed to be signal numbers for which names should be listed\n    \n    Kill is a shell builtin for two reasons: it allows job IDs to be used\n    instead of process IDs, and allows processes to be killed if the limit\n    on processes that you can create is reached.\n    \n    Exit Status:\n    Returns success unless an invalid option is given or an error occurs.\n<\/pre>\n<p><!-- Another advantage is it can use job control numbers in addition to PIDs. In this modern era of tabbed terminal emulators job control isn't the big deal it used to be, but the option is there if you want it. The biggest advantage is you can kill processes even if they have gone berserk and maxed out your system's process number limit, which would prevent you from launching \/bin\/kill. Yes, there is a limit, and you can see what it is by querying \/proc: --><\/p>\n<p>En anden fordel er, den kan bruge job kontrolnumre udover PID. I denne moderne \u00e6ra af tabbed terminalemulatorer job kontrol er ikke big deal, men muligheden er der, hvis du \u00f8nsker det. Den st\u00f8rste fordel er, at du kan dr\u00e6be processer, selv om de har g\u00e5et amok og maxed ud systemets proces gr\u00e6nsev\u00e6rdi, som forhindrer dig i at starte \/bin\/kill. Ja, der er en gr\u00e6nse, og du kan se, hvad det er ved at foresp\u00f8rge \/proc:<\/p>\n<pre>$ cat \/proc\/sys\/kernel\/threads-max\n125785\n<\/pre>\n<p>Med bash kill er der flere metoder til at sende et signal. I dette eksempel er alle det samme som sker.<\/p>\n<pre>$ kill 2489\n$ kill -s TERM 2489\n$ kill -s SIGTERM 2489\n$ kill -n 15 2489\n<\/pre>\n<p>kill -l viser alle typer af signaler som du kan sende. Du kan se at -n 15 er SIGTERM<\/p>\n<pre>$ kill -l\n 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP\n 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1\n11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) <b>SIGTERM<\/b>\n16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP\n21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ\n26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR\n31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3\n38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8\n43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13\n48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12\n53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7\n58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2\n63) SIGRTMAX-1  64) SIGRTMAX\n<\/pre>\n<p>Hvis du bruger lidt tid p\u00e5 bash og GNU b\u00f8ger vil du finde mange ting som bash kan g\u00f8re for dig.<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_424\" class=\"pvc_stats all  \" data-element-id=\"424\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/www.linuxboxen.dk\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>F\u00f8rst hvad er Bash? Bash er en kommandofortolker, som b\u00e5de brugere og applikationer kan benytte til at k\u00f8re programmer og \u00e6ndre konfigurationen af et Unix-lignende system. Bash blev lanceret i 1989 som en videreudvikling af flere andre kommandofortolkere, bl.a. Bourne shell (sh). Bash er open source og er derfor blevet brugt i mange open source-styresystemer. [&hellip;]<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_424\" class=\"pvc_stats all  \" data-element-id=\"424\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/www.linuxboxen.dk\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"categories":[5,2],"tags":[],"class_list":["post-424","post","type-post","status-publish","format-standard","hentry","category-bash","category-tips"],"a3_pvc":{"activated":true,"total_views":27,"today_views":0},"_links":{"self":[{"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=\/wp\/v2\/posts\/424","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=424"}],"version-history":[{"count":0,"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=\/wp\/v2\/posts\/424\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=424"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=424"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=424"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}