{"id":3527,"date":"2023-03-14T22:21:56","date_gmt":"2023-03-14T21:21:56","guid":{"rendered":"https:\/\/www.gcportal.com\/wordpress\/?p=3527"},"modified":"2023-03-16T09:44:11","modified_gmt":"2023-03-16T08:44:11","slug":"gestione-dati-con-rsync","status":"publish","type":"post","link":"https:\/\/www.gcportal.com\/wordpress\/archives\/3527","title":{"rendered":"Gestione copia e backup con RSYNC"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Rsync \u00e8 un comando lanciato da shell per la sincronizzazione dei file e delle directory tra diversi sistemi. In pratica, rsync copia i dati da una posizione all&#8217;altra, ma fa questo in modo molto efficiente e sicuro, utilizzando un algoritmo che minimizza la quantit\u00e0 di dati da trasferire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per utilizzare rsync, \u00e8 necessario prima installarlo sul proprio sistema. rsync \u00e8 disponibile per la maggior parte dei sistemi Unix-like, come Linux, macOS e FreeBSD. Una volta installato, \u00e8 possibile utilizzare il comando rsync da una shell.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un caratteristica che rende perfetto per eseguire copie di backup in remoto \u00e8 l\u2019integrazione con il protocollo SSH (Secure SHell) che consente la creazione di una sessione remota cifrata sostituendo l\u2019insicuro protocollo Telnet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Installare rsync<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prima di procedere all\u2019installazione di rsync, \u00e8 consigliato aggiornare il nostro sistema operativo, digitando il seguente comando:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ <em>sudo apt update<\/em><\/mark><\/strong>\n<strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ sudo apt dist-upgrade<\/mark><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Nota: <\/strong><em>Il\u00a0dist-upgrade \u00e8 un superset di upgrade. Oltre alla funzione di aggiornamento, pu\u00f2 anche gestire in modo intelligente le modifiche nelle dipendenze del pacchetto. Ci\u00f2 include la rimozione dei pacchetti di dipendenze che non sono pi\u00f9 necessari o la risoluzione dei conflitti tra pacchetti sorti a causa di modifiche nelle dipendenze. Pu\u00f2 anche installare nuovi pacchetti, se necessario.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al termine dell\u2019aggiornamento, procediamo con l\u2019installazione di rsync utilizzando il comando:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ <em>sudo apt install rsync<\/em><\/mark><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Per installare rsync su Red Hat, CentOS e derivate si utilizzeranno i comandi:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ <em style=\"font-weight: bold;\">yum update -y<\/em><\/mark><\/strong><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ <em>yum install rsync -y<\/em><\/mark><\/strong><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Sintassi e opzioni<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ecco un esempio di come utilizzare rsync per copiare una directory da una posizione all&#8217;altra:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ rsync -avz \/percorso\/origine\/ \/percorso\/destinazione\/<\/mark><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In questo esempio, &#8220;-avz&#8221; sono opzioni che indicano ad rsync di copiare i file in modo verboso (verbose), conservando i permessi e le propriet\u00e0 dei file (archive), comprimendo i dati durante il trasferimento (compress) e verificando i file gi\u00e0 esistenti (checksum). &#8220;\/percorso\/origine\/&#8221; \u00e8 la directory da copiare, mentre &#8220;\/percorso\/destinazione\/&#8221; \u00e8 la destinazione dove la directory verr\u00e0 copiata.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Altri esempi:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Copiare una directory locale in una directory remota su un server:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ rsync -avz \/percorso\/dir_locale utente@indirizzo_server:\/percorso\/dir_remota<\/mark><\/strong> <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In questo esempio, &#8220;-avz&#8221; indica ad rsync di copiare in modo verboso, conservando i permessi e le propriet\u00e0 dei file, e comprimendo i dati durante il trasferimento. &#8220;\/percorso\/directory_locale&#8221; \u00e8 la directory locale che si desidera copiare, &#8220;utente&#8221; \u00e8 il nome dell&#8217;utente con cui si accede al server, &#8220;indirizzo_server&#8221; \u00e8 l&#8217;indirizzo IP o il nome DNS del server remoto, e &#8220;\/percorso\/directory_remota&#8221; \u00e8 la directory remota in cui si desidera copiare la directory. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sincronizzare due directory locali in modo bidirezionale:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ rsync -avz --delete \/percorso\/directory1\/ \/percorso\/directory2\/<\/mark><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In questo esempio, l&#8217;opzione &#8220;&#8211;delete&#8221; indica ad rsync di eliminare i file nella directory di destinazione che non esistono nella directory di origine. Questo comando sincronizza i file e le directory in entrambe le direzioni, in modo che entrambe le directory siano identiche alla fine del processo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Copiare solo i file modificati da una directory locale a una directory remota:<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ rsync -avz --update --progress \/percorso\/dir_locale\/ utente@indirizzo_server:\/percorso\/dir_remota\/<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In questo esempio, l&#8217;opzione &#8220;&#8211;update&#8221; indica ad rsync di copiare solo i file modificati o nuovi. L&#8217;opzione &#8220;&#8211;progress&#8221; mostra la progressione del trasferimento. Questo comando \u00e8 utile quando si desidera mantenere due directory sincronizzate, ma si desidera limitare il trasferimento solo ai file che sono stati modificati.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ci sono molte altre opzioni disponibili con rsync, che consentono di personalizzare ulteriormente il comportamento del comando. Per maggiori informazioni, consulta il manuale di rsync digitando &#8220;man rsync&#8221; da una shell oppure lanciamo da prompt il comando con l&#8217;opzione -h:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><em><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ rsync -h<\/mark><\/em><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le opzioni le opzioni pi\u00f9 utilizzate sono:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>-r<\/strong>&nbsp; copia ricorsiva (non include gli attributi dei file)<\/li>\n\n\n\n<li><strong>-a<\/strong>&nbsp; crea un archivio dei file, compresi gli attributi dei file<\/li>\n\n\n\n<li><strong>-v<\/strong>&nbsp; mostra a schermo il dettaglio delle operazioni<\/li>\n\n\n\n<li><strong>-h<\/strong>&nbsp; rende i valori mostrati in output pi\u00f9 facili da leggere per l\u2019utente<\/li>\n\n\n\n<li><strong>-P&nbsp;<\/strong> mostra lo stato di avanzamento della fase di copia e indica a rsync di mantenere i file trasferiti parzialmente (di default vengono invece cancellati)<\/li>\n\n\n\n<li><strong>-q<\/strong>&nbsp; modalit\u00e0 silente<\/li>\n\n\n\n<li><strong>-z<\/strong>&nbsp; attiva la compressione dei file<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Come effettuare un backup in una cartella remota<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Rsync consente la sincronizzazione di dati tra macchine diverse attraverso il protocollo SSH (Secure Shell). La sintassi del comando \u00e8 la seguente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color has-black-color\">$ <em>rsync [opzioni] SORGENTE Utente_SSH@IP_Host:DESTINAZIONE<\/em><\/mark><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Su entrambe le macchine dovr\u00e0 essere installato&nbsp;<strong>OpenSSH<\/strong>&nbsp;e&nbsp;<strong>rsync<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Andremo quindi a copiare la cartella \u201corigine\u201d su un host con indirizzo IP&nbsp;<strong>192.168.2.10<\/strong>, utilizzando l\u2019utenza&nbsp;<strong>maintenance<\/strong>. I file verranno archiviati nella directory&nbsp;<strong>~\/backup<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In questo caso, alle opzioni -av \u2013delete viste nell\u2019esempio precedente, aggiungeremo anche:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>-P<\/strong>&nbsp;per ottenere maggiori informazioni sulla copia;<\/li>\n\n\n\n<li><strong>-h<\/strong>&nbsp;per rendere i valori mostrati facilmente fruibili dall\u2019utente;<\/li>\n\n\n\n<li><strong>-z<\/strong>&nbsp;per comprimere i file trasferiti e alleggerire cos\u00ec il carico di lavoro della rete.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>N.B. Prima di avviare la procedura di backup, assicurarsi che lo spazio di archiviazione del dispositivo di destinazione sia abbastanza capiente da contenere i file trasferiti.<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il comando da lanciare sar\u00e0, quindi:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ <em>rsync -avPzh \u2013delete origine maintenance@192.168.2.10:~\/backup<\/em><\/mark><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I file saranno cos\u00ec copiati all\u2019interno della sottocartella backup presente nella cartella home dell\u2019host.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Andremo ora ad effettuare il procedimento inverso, prelevando i dati dal computer che usiamo da server. In questo caso inseriremo come sorgente la cartella dell\u2019host remoto e come destinazione la directory home.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ <em>rsync -avPzh \u2013delete maintenance@192.168.2.10:~\/backup ~<\/em><\/mark><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>N.B. Il simbolo ~ (Tilde) equivale a scrivere \/home\/NOME_UTENTE.<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ogni volta che tentiamo di avviare una procedura di backup da remoto, ci verr\u00e0 richiesta la password dell\u2019utente SSH utilizzato. Nonostante questa sia una corretta politica di sicurezza, non consente di creare una procedura di backup pianificata. Per eludere questa problematica sar\u00e0 quindi necessario creare una chiave di autentificazione pubblica sul computer client e aggiungerla al file \u201cauthorized_keys\u201d dell\u2019host remoto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per generare la coppia di chiavi SSH lanciamo il comando:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ <em>ssh-keygen -t rsa -b 4096<\/em><\/mark><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Manteniamo le configurazioni di default (premendo il tasto \u201cinvio\u201d) e non impostiamo alcuna password.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le chiavi saranno archiviate nella directory nascosta ~\/.ssh\/.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dovremo ora inviare la chiave pubblica appena creata (id_rsa.pub) all\u2019host remoto. Utilizzeremo il comando&nbsp;<strong>ssh-copy-id<\/strong>, indicando l\u2019utente ssh e l\u2019indirizzo del server:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><em><mark style=\"background-color:#fcb900\" class=\"has-inline-color has-black-color\">$ ssh-copy-id maintenance@192.168.2.10<\/mark><\/em><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dopo aver inserito la password di accesso, la chiave pubblica sar\u00e0 aggiunta al file&nbsp;<strong>authorized_keys<\/strong>&nbsp;dell\u2019utente remoto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Facciamo un test di collegamento, via SSH, al computer remoto: se la procedura \u00e8 stata impostata correttamente, non verr\u00e0 richiesta nessuna password.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La procedura di backup ora non necessiter\u00e0 l&#8217;immissione di password.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Pianificare una procedura di backup con rsync<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per pianificare l\u2019esecuzione delle nostre procedure utilizzeremo&nbsp;<strong>cron<\/strong>, creando nel&nbsp;<strong>crontab<\/strong>&nbsp;un&nbsp;<strong>job<\/strong>&nbsp;in cui indicheremo il comando da eseguire e la sua schedulazione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Apriamo il file crontab lanciando il comando:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ <em>crontab -e<\/em><\/mark><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Al primo avvio di crontab verr\u00e0 chiesto di indicare quale editor di testo utilizzare (in questo esempio,&nbsp;<strong>nano<\/strong>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se non si dispone di nano:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ sudo apt update\n$ sudo apt install nano<\/mark><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Editiamo il file di configurazione scorrendolo fino alla fine, in modo da poter inserire la pianificazione della nostra procedura di backup e il comando.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ogni riga del crontab conterr\u00e0 una schedulazione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vediamo nel dettaglio tutti i possibili valori di questi campi, in ordine di inserimento<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Campo<\/strong><\/td><td><strong>Valore<\/strong><\/td><\/tr><tr><td>Minuti<\/td><td>0 &#8211; 59<\/td><\/tr><tr><td>Ore<\/td><td>0 &#8211; 23<\/td><\/tr><tr><td>Giorno del mese<\/td><td>1 &#8211; 31<\/td><\/tr><tr><td>Mese<\/td><td>1 &#8211; 12<\/td><\/tr><tr><td>Giorno della settimana<\/td><td>0 &#8211; 7*<\/td><\/tr><tr><td>Comando<\/td><td>path dello script da eseguire<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>* 0 rappresenta la domenica, 1 luned\u00ec&#8230;. 7 sabato.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Potremo utilizzare gli operatori:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>,<\/strong>&nbsp;per indicare una lista di valori<\/li>\n\n\n\n<li><strong>\u2013<\/strong>&nbsp;per indicare un intervallo di valori<\/li>\n\n\n\n<li><strong>*<\/strong>&nbsp;per indicare tutti i valori disponibili per il camp<\/li>\n\n\n\n<li><strong>\/<\/strong>&nbsp;per saltare dei valori.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dopo aver indicato la schedulazione, potremo inserire il comando (o il file) da eseguire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Essendo l\u2019operazione \u00e8 programmata, non ci sar\u00e0 necessit\u00e0 di visualizzare informazioni sulla fase di copia. Utilizzeremo quindi l\u2019opzione -q (modalit\u00e0 silente).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se vogliamo lanciare il nostro comando di backup ogni luned\u00ec alle ore 15, aggiungeremo il job:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>* 15 * * 1 rsync -aqz \u2013delete origine maintenance@192.168.2.10:~\/backup<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Usciamo dal file salvandolo. Un messaggio confermer\u00e0 la corretta configurazione del nuovo job.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vediamo alcuni esempi pratici di schedulazione con CronTab<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>*\/30 * * * * \/root\/mybackup.sh\nLo script viene eseguito ogni 30 minuti <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>0 21 * * * \/root\/mybackup.sh\nLo script viene eseguito alle ore 21.00 tutti i giorni<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>0 8,22 * * * \/root\/mybackup.sh\nLo script viene eseguito alle ore 08.00 e alle ore 22.00 tutti i giorni<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>0 4 * * 0 \/root\/mybackup.sh\nLo script viene eseguito alle ore 04.00 della domenica<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>0 4 * 4 6 \/root\/mybackup.sh\nLo script viene eseguito alle ore 04.00 ogni sabato del mese di aprile<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>30 6 * 5 5 \/root\/mybackup.sh\nLo script viene eseguito alle ore 06.30, ogni benerdi di maggio<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>* * * * * \/root\/mybackup.sh\nLo script viene eseguito ogni minuto<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*\/10 * * * * \/root\/mybackup.sh\nLo script viene eseguito ogni 10 minuti<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>0 12 * * 1,5 \/root\/mybackup.sh\nLo script viene eseguito alle ore 12.00 di luned\u00ec e venerdi<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>0 *\/4 * * * \/root\/mybackup.sh\nLo script viene eseguito ogni 4 ore (06.00, 10.00, ...)<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>* * * * * sleep 45; \/root\/mybackup.sh\nLo script viene eseguito ogni 45 secondi<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Rsync \u00e8 un comando lanciato da shell per la sincronizzazione dei file e delle directory tra diversi sistemi. In pratica, rsync copia i dati da una posizione all&#8217;altra, ma fa [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":3549,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[5,86,93],"tags":[117,98,116],"class_list":["post-3527","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gcportal-links","category-guide-tutorial","category-linux","tag-backup","tag-linux","tag-rsync"],"_links":{"self":[{"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/posts\/3527","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/comments?post=3527"}],"version-history":[{"count":18,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/posts\/3527\/revisions"}],"predecessor-version":[{"id":3614,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/posts\/3527\/revisions\/3614"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/media\/3549"}],"wp:attachment":[{"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/media?parent=3527"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/categories?post=3527"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/tags?post=3527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}