{"id":6480,"date":"2020-01-25T21:22:28","date_gmt":"2020-01-25T20:22:28","guid":{"rendered":"https:\/\/monodes.com\/predaelli\/?p=6480"},"modified":"2020-01-25T21:22:28","modified_gmt":"2020-01-25T20:22:28","slug":"advanced-cli-commands-you-should-know-as-a-developer","status":"publish","type":"post","link":"https:\/\/monodes.com\/predaelli\/2020\/01\/25\/advanced-cli-commands-you-should-know-as-a-developer\/","title":{"rendered":"Advanced CLI: Commands You Should Know as a Developer"},"content":{"rendered":"<p><a href=\"https:\/\/medium.com\/better-programming\/advanced-cli-commands-you-should-know-as-a-developer-7bc48c752a5e\"><img data-recalc-dims=\"1\" decoding=\"async\" class=\"alignnone size-full\" src=\"https:\/\/i0.wp.com\/miro.medium.com\/max\/4838\/1%2AC7xYQ7Sxrpk9YlQYzeq70Q.jpeg?w=910&#038;ssl=1\" alt=\"\" \/><\/a> <em><a href=\"https:\/\/medium.com\/better-programming\/advanced-cli-commands-you-should-know-as-a-developer-7bc48c752a5e\">Advanced CLI: Commands You Should Know as a Developer<\/a><\/em><\/p>\n<p>May I feel a little proud when I tell you I know them all? \ud83d\ude42<\/p>\n<p><!--more--><\/p>\n<p><!--nextpage--><\/p>\n<blockquote>\n<div>\n<div id=\"c1d9\" class=\"fb fc cn ar fd b fe ff fg fh fi fj fk fl fm fn fo\">\n<h1 class=\"fd b fe fp fg fq fi fr fk fs fm ft cn\">Advanced CLI: Commands You Should Know as a Developer<\/h1>\n<\/div>\n<\/div>\n<div id=\"6847\" class=\"fu fc av ar aq ec fv fw fx fy fz ga gb gc gd ge gf\">\n<h2 class=\"aq ec fv gg fx gh fz gi gb gj gd gk av\">Advanced commands; get more done<\/h2>\n<article class=\"meteredContent\">\n<div>\n<section class=\"ev ew ex ey ez\">\n<div class=\"n p\">\n<div class=\"ac ae af ag ah fa aj ak\">\n<p id=\"8149\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">No, in this article we won\u2019t go over the basic commands like <code class=\"\" data-line=\"\">ls<\/code>, <code class=\"\" data-line=\"\">rm<\/code>, and <code class=\"\" data-line=\"\">cd<\/code>. You shouldn\u2019t be shocked by seeing those commands. You might even be quite familiar with them. Especially if you know your way around the command line pretty well. I assume you have at least worked (or tried to work) on the command line before. If you\u2019ve never worked on the command line before, I suggest you start by reading about the basics.<\/p>\n<p id=\"9597\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">This article is for those of you who have some experience with the command line and got a taste of the basic commands. For those who feel like it\u2019s time to dive deeper into the possibilities of working with the command line. I\u2019ve listed six commands for you in this article and included some tips at the bottom as well.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<hr class=\"jm ec jn bg jo jp jq jr js jt ju\" \/>\n<section class=\"ev ew ex ey ez\">\n<div class=\"n p\">\n<div class=\"ac ae af ag ah fa aj ak\">\n<h1 id=\"2235\" class=\"jv jw cn ar aq jx fe jy fg jz ka kb kc kd ke kf kg\" data-selectable-paragraph=\"\">1. wget<\/h1>\n<p id=\"292d\" class=\"iw ix cn ar iy b fv kh fx ki jb kj jd kk jf kl jh ev\" data-selectable-paragraph=\"\">On Unix-like operating systems, the <code class=\"\" data-line=\"\">wget<\/code> command downloads files served with HTTP, HTTPS, or FTP over a network. By default, it is included in all self-respecting Linux distributions.<\/p>\n<p id=\"3e19\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">The most simple way to use <code class=\"\" data-line=\"\">wget<\/code> is to provide it with the location of a file to download over HTTP. Downloading the file <code class=\"\" data-line=\"\">http:\/\/website.com\/static\/images\/header.jpg<\/code> with <code class=\"\" data-line=\"\">wget<\/code> can be done by the following command:<\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"3b2e\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">wget http:\/\/website.com\/static\/images\/header.jpg<\/span><\/pre>\n<p id=\"0ca1\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">One great thing about <em class=\"ks\">wget<\/em> is that it\u2019s non-interactive, which means that it can run in the background while the user is not logged on. This allows you to start a retrieval and disconnect from the system, letting <code class=\"\" data-line=\"\">wget<\/code> finish the work.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<hr class=\"jm ec jn bg jo jp jq jr js jt ju\" \/>\n<section class=\"ev ew ex ey ez\">\n<div class=\"n p\">\n<div class=\"ac ae af ag ah fa aj ak\">\n<h1 id=\"f96e\" class=\"jv jw cn ar aq jx fe jy fg jz ka kb kc kd ke kf kg\" data-selectable-paragraph=\"\">2. scp<\/h1>\n<p id=\"459e\" class=\"iw ix cn ar iy b fv kh fx ki jb kj jd kk jf kl jh ev\" data-selectable-paragraph=\"\">Ever had a problem where you needed to have a file from a remote server on your local machine? Getting a file that a user uploaded that caused some trouble, for example.<\/p>\n<p id=\"3b8f\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">You could download this file via the command line using the <code class=\"\" data-line=\"\">scp<\/code> command. Scp is short for <em class=\"ks\">secure copy<\/em>. But what\u2019s even more important is that it\u2019s a <strong class=\"iy kt\">remote<\/strong> secure copy. This command is similar to the <code class=\"\" data-line=\"\">cp<\/code> command that you probably already know, but either the source or the target is on another system.<\/p>\n<p id=\"fec6\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">The following command copies the file <code class=\"\" data-line=\"\">foobar.txt<\/code> from a remote server to a local directory.<\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"78af\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">scp username@remotehost.com:\/path\/to\/foobar.txt \/some\/local\/directory<\/span><\/pre>\n<p id=\"1573\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">But <code class=\"\" data-line=\"\">scp<\/code> can also be used to copy a file from a local directory to a remote server.<\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"6b6b\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">scp \/some\/local\/directory\/foobar.txt username@remotehost.com:\/destination\/path\/<\/span><\/pre>\n<p id=\"9c1e\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">The same can be done with directories using the <code class=\"\" data-line=\"\">-r<\/code> option, which copies entire directories recursively.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<hr class=\"jm ec jn bg jo jp jq jr js jt ju\" \/>\n<section class=\"ev ew ex ey ez\">\n<div class=\"n p\">\n<div class=\"ac ae af ag ah fa aj ak\">\n<h1 id=\"c9fc\" class=\"jv jw cn ar aq jx fe jy fg jz ka kb kc kd ke kf kg\" data-selectable-paragraph=\"\">3. ssh-keygen<\/h1>\n<p id=\"3935\" class=\"iw ix cn ar iy b fv kh fx ki jb kj jd kk jf kl jh ev\" data-selectable-paragraph=\"\">The <code class=\"\" data-line=\"\">ssh-keygen<\/code> command is used to generate a new SSH key pair. The public SSH key that is generated by this command can be used in Gitlab or Bitbucket to establish a secure connection.<\/p>\n<p id=\"5f28\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">Once you\u2019ve added your SSH key to either Gitlab or Bitbucket, you won\u2019t be prompted for a password every time you try to push your files to a remote branch.<\/p>\n<p id=\"0511\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">To generate an SSH key pair, use the following command:<\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"a161\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">ssh-keygen -t ed25519<\/span><\/pre>\n<p id=\"bc2f\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">Note that in the example above, we used the ED25519 signing algorithm. While ED25519 is considered best practice, you should always do some research on the different available signing algorithms.<\/p>\n<p id=\"bb80\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">Generating the SSH key pair and setting it up correctly in Gitlab or Bitbucket costs you ten minutes at a maximum (probably more like three) but will be totally worth it!<\/p>\n<\/div>\n<\/div>\n<\/section>\n<hr class=\"jm ec jn bg jo jp jq jr js jt ju\" \/>\n<section class=\"ev ew ex ey ez\">\n<div class=\"n p\">\n<div class=\"ac ae af ag ah fa aj ak\">\n<h1 id=\"7f70\" class=\"jv jw cn ar aq jx fe jy fg jz ka kb kc kd ke kf kg\" data-selectable-paragraph=\"\">4. chmod<\/h1>\n<blockquote class=\"ku kv kw\">\n<p id=\"9987\" class=\"iw ix cn ks iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">In Unix and Unix-like operating systems, chmod is the command and system call which is used to change the access permissions of file system objects (files and directories).<\/p>\n<\/blockquote>\n<p id=\"13bb\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">According to <a class=\"bo dd kx ky kz la\" href=\"https:\/\/en.wikipedia.org\/wiki\/Chmod\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">Wikipedia<\/a>, this is the definition of the <code class=\"\" data-line=\"\">chmod<\/code> command. We\u2019ve all been in a situation where a server didn\u2019t have access to a certain file because of a misconfiguration in the file permissions.<\/p>\n<p id=\"5705\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">The <code class=\"\" data-line=\"\">chmod<\/code> command is fairly simple in itself, but giving the right permissions to files and directories is a whole different game.<\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"f5ad\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">chmod 664 robots.txt\nchmod 775 public\/images<\/span><\/pre>\n<p id=\"2b6a\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">The first example gives read and write permission to user and group for the <code class=\"\" data-line=\"\">robots.txt<\/code> file. Read permission is granted to others for this file.<\/p>\n<p id=\"ed1b\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">The second example gives read, write and execute permission to user and group for the <code class=\"\" data-line=\"\">public\/images<\/code> folder. Others are granted read and execute permission for this folder.<\/p>\n<p id=\"a9ad\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">If you want to know more about setting the right permissions to files and directories, I suggest you read the Wikipedia page about <code class=\"\" data-line=\"\">chmod<\/code>.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<hr class=\"jm ec jn bg jo jp jq jr js jt ju\" \/>\n<section class=\"ev ew ex ey ez\">\n<div class=\"n p\">\n<div class=\"ac ae af ag ah fa aj ak\">\n<h1 id=\"c19d\" class=\"jv jw cn ar aq jx fe jy fg jz ka kb kc kd ke kf kg\" data-selectable-paragraph=\"\">5. tar<\/h1>\n<p id=\"394d\" class=\"iw ix cn ar iy b fv kh fx ki jb kj jd kk jf kl jh ev\" data-selectable-paragraph=\"\">The Linux <code class=\"\" data-line=\"\">tar<\/code> stands for <em class=\"ks\">tape archive<\/em>. It is used for collecting many files into one archive file. <code class=\"\" data-line=\"\">Tar<\/code> is the most widely used command to create compressed archive files.<\/p>\n<p id=\"69ac\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">Let\u2019s start with how you can create an archive file for a specific directory:<\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"4323\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">tar -cvf my-archive.tar \/path\/to\/directory<\/span><\/pre>\n<p id=\"c926\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">This command will result in an archive file, called <code class=\"\" data-line=\"\">my-archive.tar<\/code>, that contains all files of the <code class=\"\" data-line=\"\">\/path\/to\/directory<\/code> which is created in the current working directory.<\/p>\n<p id=\"5975\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">Creating the archive file is part one. Part two consists of untarring the archive file, because at some point we want to use the files in the tar file. You can untar the file into a specific directory by typing in the following command:<\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"0630\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">tar -xvf my-archive.tar -C \/home\/myfolder\/<\/span><\/pre>\n<\/div>\n<\/div>\n<\/section>\n<hr class=\"jm ec jn bg jo jp jq jr js jt ju\" \/>\n<section class=\"ev ew ex ey ez\">\n<div class=\"n p\">\n<div class=\"ac ae af ag ah fa aj ak\">\n<h1 id=\"6d9c\" class=\"jv jw cn ar aq jx fe jy fg jz ka kb kc kd ke kf kg\" data-selectable-paragraph=\"\">6. alias<\/h1>\n<p id=\"397c\" class=\"iw ix cn ar iy b fv kh fx ki jb kj jd kk jf kl jh ev\" data-selectable-paragraph=\"\">Everyone uses some commands that are a little too long or complex to completely remember. Luckily, you can create an <code class=\"\" data-line=\"\">alias<\/code> for that command so you don\u2019t have to remember the entire command.<\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"3a0d\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">alias short-command=\"your custom and very long command here\"<\/span><\/pre>\n<p id=\"acf6\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">Though creating an alias this way comes with one problem: This alias is temporary. If you create an alias this way, it will only be available for your current terminal session.<\/p>\n<p id=\"9129\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">To keep aliases between sessions, you can save them in your user\u2019s shell configuration profile file. This profile file is probably located at either <em class=\"ks\">~\/.bashrc<\/em> or <em class=\"ks\">~\/.zshrc<\/em> if you\u2019re using Bash or ZSH, respectively.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<hr class=\"jm ec jn bg jo jp jq jr js jt ju\" \/>\n<section class=\"ev ew ex ey ez\">\n<div class=\"n p\">\n<div class=\"ac ae af ag ah fa aj ak\">\n<h1 id=\"e89b\" class=\"jv jw cn ar aq jx fe jy fg jz ka kb kc kd ke kf kg\" data-selectable-paragraph=\"\">Tip 1: Directing Output<\/h1>\n<p id=\"5501\" class=\"iw ix cn ar iy b fv kh fx ki jb kj jd kk jf kl jh ev\" data-selectable-paragraph=\"\">The standard output device is the screen. But sometimes you don\u2019t want to output everything on your screen. In some cases, you probably prefer to output the results of some commands to a file. For logging purposes, for example.<\/p>\n<p id=\"cd08\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\"><mark class=\"px py ly\">To redirect the output, you can use the <\/mark><mark class=\"px py ly\"><em class=\"ks\">&gt;.<\/em><\/mark><mark class=\"px py ly\"> In the following command, the output of <\/mark><mark class=\"px py ly\"><code class=\"\" data-line=\"\">ls -al<\/code><\/mark><mark class=\"px py ly\"> is redirected to the file <\/mark><mark class=\"px py ly\"><code class=\"\" data-line=\"\">myfile<\/code><\/mark><mark class=\"px py ly\"> instead of the screen.<\/mark><\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"4f22\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">ls -al &gt; myfile<\/span><\/pre>\n<p id=\"a419\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">I\u2019ve used <code class=\"\" data-line=\"\">ls<\/code> in this example, but it really could be any command that has some output. To confirm that this worked, you can check the <code class=\"\" data-line=\"\">myfile<\/code> file.<\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"3ab6\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">cat myfile<\/span><\/pre>\n<\/div>\n<\/div>\n<\/section>\n<hr class=\"jm ec jn bg jo jp jq jr js jt ju\" \/>\n<section class=\"ev ew ex ey ez\">\n<div class=\"n p\">\n<div class=\"ac ae af ag ah fa aj ak\">\n<h1 id=\"a303\" class=\"jv jw cn ar aq jx fe jy fg jz ka kb kc kd ke kf kg\" data-selectable-paragraph=\"\">Tip 2: Combining Commands<\/h1>\n<p id=\"8d0f\" class=\"iw ix cn ar iy b fv kh fx ki jb kj jd kk jf kl jh ev\" data-selectable-paragraph=\"\">It\u2019s possible to run two or more commands at once. The semicolon (;) operator allows you to do this. You can execute multiple commands in succession, regardless of whether each previous command succeeds.<\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"dede\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">ls -al; pwd;<\/span><\/pre>\n<p id=\"a2c0\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">If you want the second command to only run if the first command is successful, separate the commands with the logical <em class=\"ks\">AND<\/em> operator, which is <code class=\"\" data-line=\"\">&lt;em class=&quot;ks&quot;&gt;&amp;&amp;&lt;\/em&gt;<\/code>.<\/p>\n<pre class=\"ic id ie if ig km kn dt\"><span id=\"8009\" class=\"ko jw cn ar jl b bj kp kq r kr\" data-selectable-paragraph=\"\">mkdir images &amp;&amp; cd images<\/span><\/pre>\n<p id=\"b100\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">We only want to <code class=\"\" data-line=\"\">cd<\/code> to the <code class=\"\" data-line=\"\">images<\/code> folder if we managed to create that folder.<\/p>\n<p id=\"44ec\" class=\"iw ix cn ar iy b fv iz fx ja jb jc jd je jf jg jh ev\" data-selectable-paragraph=\"\">And sometimes you might want to execute a second command only if the first command does <strong class=\"iy kt\">not <\/strong>succeed. To do this, we use the logical <em class=\"ks\">OR<\/em> operator, which is <code class=\"\" data-line=\"\">&lt;em class=&quot;ks&quot;&gt;||&lt;\/em&gt;<\/code>.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<\/div>\n<\/article>\n<div class=\"bk eu lb s ak lh lf li\" data-test-id=\"post-sidebar\">\n<div class=\"n p\">\n<div class=\"ac ae af ag ah ai aj ak\">\n<div class=\"lj n ep\">\n<div class=\"eu\">\n<div class=\"lk ll r\">\n<h2 class=\"aq jx lm as cn\">Better Programming<\/h2>\n<div class=\"ln lo r\">\n<h4 class=\"aq ec bj as bd lp bc hd lq hf av\">Advice for programmers.<\/h4>\n<\/div>\n<div class=\"bf\" aria-hidden=\"true\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"n o\">\n<div class=\"lu r bl\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<div class=\"md r\">\n<div class=\"me\">\n<h4 class=\"aq ec bj as av\"><\/h4>\n<\/div>\n<\/div>\n<div>\n<div class=\"ia\">\n<div>\n<div class=\"bf\" role=\"tooltip\" aria-hidden=\"true\" aria-describedby=\"8\" aria-labelledby=\"8\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"bk eu lb s lc gx ld le lf lg\"><\/div>\n<div>\n<div class=\"mf ih n ep p\">\n<div class=\"n p\">\n<div class=\"ac ae af ag ah fa aj ak\">\n<div class=\"n mg\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p class=\"excerpt\">Advanced CLI: Commands You Should Know as a Developer May I feel a little proud when I tell you I know them all? \ud83d\ude42<\/p>\n<p class=\"more-link-p\"><a class=\"more-link\" href=\"https:\/\/monodes.com\/predaelli\/2020\/01\/25\/advanced-cli-commands-you-should-know-as-a-developer\/\">Read more &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"link","meta":{"inline_featured_image":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[72],"tags":[],"class_list":["post-6480","post","type-post","status-publish","format-link","hentry","category-documentations","post_format-post-format-link"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6daft-1Gw","jetpack-related-posts":[{"id":9917,"url":"https:\/\/monodes.com\/predaelli\/2022\/12\/14\/how-to-become-a-command-line-wizard\/","url_meta":{"origin":6480,"position":0},"title":"How to become a command-line wizard","author":"Paolo Redaelli","date":"2022-12-14","format":false,"excerpt":"Dudes, I already use the tricks described in \u00abHow to become a command-line wizard\u00bb. Do you think I'm a CLI wizard?","rel":"","context":"In &quot;Fun&quot;","block_context":{"text":"Fun","link":"https:\/\/monodes.com\/predaelli\/category\/fun\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":9759,"url":"https:\/\/monodes.com\/predaelli\/2022\/10\/24\/6-popular-postgresql-cli-libraries\/","url_meta":{"origin":6480,"position":1},"title":"6 Popular PostgreSQL CLI Libraries","author":"Paolo Redaelli","date":"2022-10-24","format":false,"excerpt":"6 Popular PostgreSQL CLI Libraries pgcli - Postgres CLI with autocompletion and syntax highlighting pgsh - Branch your PostgreSQL Database like Git psql - The built-in PostgreSQL CLI client psql2csv - Run a query in psql and output the result as CSV nancy - The Nancy CLI is a unified\u2026","rel":"","context":"In &quot;Documentations&quot;","block_context":{"text":"Documentations","link":"https:\/\/monodes.com\/predaelli\/category\/documentations\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2257,"url":"https:\/\/monodes.com\/predaelli\/2017\/04\/06\/the-joys-of-command-line\/","url_meta":{"origin":6480,"position":2},"title":"The joys of command line","author":"Paolo Redaelli","date":"2017-04-06","format":false,"excerpt":"I've been using Wordpress to log all recordings at work, since ISO 9001 Quality Management Systems allows digital recordings since its 2008 release. One of the aspects where it currently is lacking is the policies for data conservations. You name it: backups. Actually it hasn't been a real issue for\u2026","rel":"","context":"In &quot;Wordpress&quot;","block_context":{"text":"Wordpress","link":"https:\/\/monodes.com\/predaelli\/category\/wordpress\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":7662,"url":"https:\/\/monodes.com\/predaelli\/2020\/10\/05\/advanced-unix-commands-to-boost-your-productivity\/","url_meta":{"origin":6480,"position":3},"title":"Advanced Unix commands to boost your productivity","author":"Paolo Redaelli","date":"2020-10-05","format":"status","excerpt":"Advanced Unix commands to boost your productivity The more you learn the better you get vi or better Vim find awk alias netstat Well, I can say that I do use them all except awk which I usually reimplement poorly using a combination of grep, sed and the like.","rel":"","context":"In &quot;Mood&quot;","block_context":{"text":"Mood","link":"https:\/\/monodes.com\/predaelli\/category\/mood\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10376,"url":"https:\/\/monodes.com\/predaelli\/2023\/04\/15\/social-analyzer\/","url_meta":{"origin":6480,"position":4},"title":"Social analyzer","author":"Paolo Redaelli","date":"2023-04-15","format":false,"excerpt":"Social Analyzer - API, CLI, and Web App for analyzing & finding a person's profile across +1000 social media \\ websites. It includes different analysis and detection modules, and you can choose which modules to use during the investigation process. From qeeqbox \/ social-analyzer","rel":"","context":"In &quot;Senza categoria&quot;","block_context":{"text":"Senza categoria","link":"https:\/\/monodes.com\/predaelli\/category\/senza-categoria\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":7448,"url":"https:\/\/monodes.com\/predaelli\/2020\/08\/16\/oh-my-lazyness\/","url_meta":{"origin":6480,"position":5},"title":"Oh my lazyness!","author":"Paolo Redaelli","date":"2020-08-16","format":false,"excerpt":"Tomorrow as usual I found in my mail box reading suggestions. Among them Go vs Rust: Writing a CLI toolHow to use PyInstaller to create Python executables They reminded me that I shall restart my efforts on Liberty EIffel and Monodes... :-( I hope to integrate them in my current\u2026","rel":"","context":"In &quot;Mood&quot;","block_context":{"text":"Mood","link":"https:\/\/monodes.com\/predaelli\/category\/mood\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/posts\/6480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/comments?post=6480"}],"version-history":[{"count":0,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/posts\/6480\/revisions"}],"wp:attachment":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/media?parent=6480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/categories?post=6480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/tags?post=6480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}