403 lines
27 KiB
HTML
403 lines
27 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>SysCmd — Command Reference</title>
|
|
<style>
|
|
*{box-sizing:border-box;margin:0;padding:0}
|
|
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:#f8fafc;color:#0f172a;line-height:1.5}
|
|
.sbar{width:14rem;border-right:1px solid #e2e8f0;background:#fff;display:flex;flex-direction:column;min-height:100vh;padding:12px 0;overflow-y:auto;flex-shrink:0}
|
|
.main{flex:1;padding:24px;max-width:960px}
|
|
.tree{flex:1;overflow-y:auto}
|
|
.grp{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#94a3b8;padding:8px 12px 4px}
|
|
.slk{display:flex;align-items:center;gap:6px;padding:4px 10px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;color:#475569;transition:all .12s;user-select:none}
|
|
.slk:hover{background:#f1f5f9;color:#0f172a}
|
|
.slk.act{background:#0f172a;color:#fff}
|
|
.slk3{padding-left:48px;font-size:12px}
|
|
.slk4{padding-left:64px;font-size:11px;font-weight:400}
|
|
.tgl{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;transition:transform .15s;color:#94a3b8}
|
|
.tgl.o{transform:rotate(90deg)}
|
|
.chd{display:none}
|
|
.chd.o{display:block}
|
|
.dg{width:6px;height:6px;border-radius:50%;background:#22c55e;flex-shrink:0}
|
|
.dgr{width:6px;height:6px;border-radius:50%;background:#cbd5e1;flex-shrink:0}
|
|
.do{width:6px;height:6px;border-radius:50%;background:#f59e0b;flex-shrink:0}
|
|
.bd{font-size:11px;color:#94a3b8;display:flex;gap:6px;align-items:center;margin-bottom:2px}
|
|
.bd .c{color:#0f172a;font-weight:500}
|
|
.scmd{display:grid;grid-template-columns:190px 1fr;align-items:start;padding:4px 12px;border-radius:5px;font-size:13px;gap:8px;transition:background .1s}
|
|
.scmd:hover{background:#f1f5f9}
|
|
.scmd .d{color:#475569;font-weight:500;line-height:1.4}
|
|
.scmd .t{font-family:Consolas,'Courier New',monospace;font-size:12px;color:#0f172a;cursor:pointer;display:inline-flex;align-items:center;gap:6px;line-height:1.4;word-break:break-all}
|
|
.scmd .t:hover .cp{opacity:1}
|
|
.cp{opacity:0;width:14px;height:14px;flex-shrink:0;color:#94a3b8;transition:opacity .12s}
|
|
.alt{background:#fafbfc}
|
|
.stab{padding:4px 10px;border-radius:5px;font-size:11px;font-weight:500;cursor:pointer;border:1px solid #e2e8f0;color:#64748b;white-space:nowrap;transition:all .12s}
|
|
.stab.a{background:#0f172a;color:#fff;border-color:#0f172a}
|
|
.stab:hover:not(.a){background:#f1f5f9}
|
|
.si{width:100%;padding:7px 12px 7px 34px;border-radius:8px;font-size:13px;outline:none;border:1.5px solid #e2e8f0;background:#fff;transition:border-color .12s}
|
|
.si:focus{border-color:#0f172a}
|
|
.oc{border-radius:10px;border:1px solid #e2e8f0;background:#fff;cursor:pointer;transition:all .15s;padding:16px}
|
|
.oc:hover{border-color:#0f172a;box-shadow:0 2px 12px rgba(0,0,0,.08)}
|
|
.oc .ic{width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
|
|
.oc .sl{font-size:11px;color:#94a3b8}
|
|
.oc.ph{opacity:.6}
|
|
.oc.ph:hover{opacity:.8}
|
|
.emp{padding:40px 16px;max-width:360px;margin:0 auto;text-align:center}
|
|
.emp h3{font-weight:600;font-size:15px;margin-bottom:4px;color:#0f172a}
|
|
.emp p{font-size:13px;color:#94a3b8;line-height:1.5}
|
|
.sb{border:1px solid #e2e8f0;border-radius:10px;background:#fff;text-align:center;padding:12px}
|
|
.sb .n{font-size:20px;font-weight:700;color:#0f172a}
|
|
.sb .l{font-size:11px;color:#94a3b8}
|
|
.cl{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#94a3b8;margin-top:8px;margin-bottom:4px}
|
|
.gp{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:12px}
|
|
.lr{display:flex;gap:12px;align-items:center;margin-bottom:12px;font-size:11px;color:#64748b}
|
|
.p8{padding:24px;font-size:13px;color:#94a3b8}
|
|
.cmdbox{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden}
|
|
.cmdbox .s{font-size:11px;color:#94a3b8;padding:8px 12px;border-bottom:1px solid #f1f5f9}
|
|
</style>
|
|
</head>
|
|
<body style="display:flex;min-height:100vh">
|
|
|
|
<!-- SIDEBAR -->
|
|
<div class="sbar">
|
|
<div style="display:flex;align-items:center;gap:10px;padding:8px 12px 16px;border-bottom:1px solid #f1f5f9;flex-shrink:0;cursor:pointer" onclick="SH()">
|
|
<div style="width:28px;height:28px;background:#0f172a;border-radius:8px;display:flex;align-items:center;justify-content:center">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.5"><path d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"/></svg>
|
|
</div>
|
|
<span style="font-weight:700;font-size:14px">SysCmd</span>
|
|
</div>
|
|
<div class="tree" id="tree"></div>
|
|
<div style="padding-top:12px;border-top:1px solid #f1f5f9;flex-shrink:0">
|
|
<div style="display:flex;align-items:center;gap:8px;padding:8px 12px">
|
|
<div style="width:28px;height:28px;background:#e2e8f0;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#64748b">LK</div>
|
|
<div style="font-size:12px"><div style="font-weight:500;color:#0f172a">Laurent</div><div style="color:#94a3b8">sysadmin</div></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- MAIN -->
|
|
<div class="main">
|
|
|
|
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:20px">
|
|
<div>
|
|
<div class="bd" id="bd"></div>
|
|
<h1 style="font-size:18px;font-weight:700" id="os-title">SysCmd</h1>
|
|
<p style="font-size:11px;color:#64748b;margin-top:2px" id="os-sub"></p>
|
|
</div>
|
|
<div style="position:relative">
|
|
<svg style="position:absolute;left:10px;top:50%;transform:translateY(-50%);width:14px;height:14px;color:#94a3b8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/></svg>
|
|
<input class="si" id="search" placeholder="Chercher une commande..." oninput="onSearch(this.value)">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="gp" id="tabs"></div>
|
|
|
|
<div class="lr" id="stats-bar">
|
|
<span id="shown">0</span> <span>commandes</span>
|
|
<span>·</span>
|
|
<span id="fi">Aucun filtre</span>
|
|
</div>
|
|
|
|
<div class="cmdbox" id="cmd-box">
|
|
<div id="cmds"></div>
|
|
</div>
|
|
|
|
<!-- HOME -->
|
|
<div id="home">
|
|
<div style="text-align:center;margin:32px 0 24px">
|
|
<h2 style="font-size:24px;font-weight:700;margin-bottom:8px">SysCmd</h2>
|
|
<p style="font-size:13px;color:#64748b;max-width:480px;margin:0 auto">Référence de commandes multi-plateforme. Cliquez sur un OS pour voir ses commandes.</p>
|
|
<div style="margin-top:12px;display:flex;justify-content:center;gap:12px;font-size:11px;color:#94a3b8">
|
|
<span style="display:flex;align-items:center;gap:4px"><span class="dg" style="display:inline-block;vertical-align:middle"></span> Données disponibles</span>
|
|
<span style="display:flex;align-items:center;gap:4px"><span class="do" style="display:inline-block;vertical-align:middle"></span> Catégorie</span>
|
|
<span style="display:flex;align-items:center;gap:4px"><span class="dgr" style="display:inline-block;vertical-align:middle"></span> À venir</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="gs" style="display:none;margin-bottom:24px"></div>
|
|
|
|
<div id="stats-row" style="display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px"></div>
|
|
|
|
<div id="grid" style="display:grid;grid-template-columns:repeat(3,1fr);gap:12px"></div>
|
|
</div>
|
|
|
|
<div style="margin-top:16px;text-align:center;font-size:11px;color:#94a3b8" id="fh">Cliquez sur un OS pour explorer ses commandes</div>
|
|
</div>
|
|
|
|
<script>
|
|
"use strict";
|
|
function t(f,e){return{fr:f,en:e}}
|
|
var N=null,CS=null;
|
|
|
|
var TREE={id:'r',children:[
|
|
{id:'os',label:t('OS','OS'),children:[
|
|
{id:'lnx',label:t('Linux','Linux'),children:[
|
|
{id:'ubu',label:t('Ubuntu','Ubuntu'),children:[
|
|
{id:'u20',label:t('20.04','20.04'),osKey:'u',secs:['sys','apt','users']},
|
|
{id:'u22',label:t('22.04','22.04'),osKey:'u',secs:['sys','apt','users']},
|
|
{id:'u24',label:t('24.04','24.04'),osKey:'u',secs:['sys','apt','users','systemd']}]},
|
|
{id:'deb',label:t('Debian','Debian'),osKey:'d',secs:['sys','apt','users','systemd']},
|
|
{id:'ora',label:t('Oracle Linux','Oracle Linux'),osKey:'o',secs:['odnf','ospec','osel','ofw','systemd']},
|
|
{id:'rhel',label:t('RHEL/CentOS','RHEL/CentOS'),secs:['r_dnf','r_fw','r_selinux','r_epel','systemd']},{id:'fed',label:t('Fedora','Fedora')}]},
|
|
{id:'win',label:t('Windows','Windows'),children:[
|
|
{id:'wcl',label:t('Client','Client'),children:[
|
|
{id:'wxp',label:t('XP','XP')},{id:'w10',label:t('10','10'),osKey:'w',secs:['wsys','wfiles','wproc','wnet']},
|
|
{id:'w11',label:t('11','11'),osKey:'w',secs:['wsys','wfiles','wproc','wnet']}]},
|
|
{id:'wsrv',label:t('Server','Server'),children:[
|
|
{id:'w16',label:t('2016','2016'),osKey:'ws',secs:['wsys','wfiles','wproc','wnet']},
|
|
{id:'w19',label:t('2019','2019'),osKey:'ws',secs:['wsys','wfiles','wproc','wnet']}]}]},
|
|
{id:'sol',label:t('Solaris/illumos','Solaris/illumos'),osKey:'s',secs:['sips','ssmf','szfs','szones']},
|
|
{id:'mac',label:t('macOS','macOS')}]},
|
|
{id:'dck',label:t('Docker','Docker'),children:[
|
|
{id:'dcc',label:t('Compose','Compose')},{id:'dcs',label:t('Swarm','Swarm')},{id:'dcf',label:t('Dockerfile','Dockerfile')}]},
|
|
{id:'oth',label:t('Other','Other'),children:[
|
|
{id:'net',label:t('Reseau','Network'),children:[{id:'cis',label:t('Cisco','Cisco')},{id:'tpl',label:t('TP-Link','TP-Link')}]},
|
|
{id:'sql',label:t('SQL','SQL'),children:[{id:'my',label:t('MySQL/MariaDB','MySQL/MariaDB'),secs:['mysql']},{id:'pg',label:t('PostgreSQL','PostgreSQL'),secs:['pg']}]},
|
|
{id:'dev',label:t('DevOps','DevOps'),children:[{id:'ans',label:t('Ansible','Ansible')},{id:'tf',label:t('Terraform','Terraform')},{id:'k8',label:t('Kubernetes','Kubernetes')}]}]}]};
|
|
|
|
var SEC={};
|
|
SEC.sys={label:t('systeme','system'),cmds:[
|
|
{d:t('Version noyau','Kernel'),c:'uname -r'},{d:t('Version OS','OS version'),c:'lsb_release -a'},
|
|
{d:t('Memoire','Memory'),c:'free -h'},{d:t('Hostname','Hostname'),c:'hostnamectl'},
|
|
{d:t('Uptime','Uptime'),c:'uptime'},{d:t('CPU','CPU'),c:'lscpu'},{d:t('Date','Date'),c:'timedatectl'}]};
|
|
SEC.apt={label:t('APT','APT'),cmds:[
|
|
{d:t('Sync repos','Sync repos'),c:'sudo apt update'},{d:t('Mise a jour','Upgrade'),c:'sudo apt full-upgrade -y'},
|
|
{d:t('Installer','Install'),c:'sudo apt install [pkg]'},{d:t('Purge','Purge'),c:'sudo apt purge [pkg]'},
|
|
{d:t('Search','Search'),c:'apt search [kw]'},{d:t('Installed','Installed'),c:'apt list --installed'},
|
|
{d:t('Fichiers','Package files'),c:'dpkg -L [pkg]'}]};
|
|
SEC.users={label:t('utilisateurs','users'),cmds:[
|
|
{d:t('Ajouter','Add'),c:'sudo adduser [n]'},{d:t('Supprimer','Delete'),c:'sudo deluser --remove-home [n]'},
|
|
{d:t('Groupe sudo','Sudo group'),c:'sudo usermod -aG sudo [n]'},{d:t('Permissions','Perms'),c:'chmod 755 [f]'},
|
|
{d:t('Root','Root'),c:'sudo -i'}]};
|
|
SEC.systemd={label:t('systemd','systemd'),cmds:[
|
|
{d:t('Start/Stop','Start/Stop'),c:'sudo systemctl start|stop [s]'},{d:t('Restart','Restart'),c:'sudo systemctl restart [s]'},
|
|
{d:t('Enable','Enable'),c:'sudo systemctl enable [s]'},{d:t('Status','Status'),c:'systemctl status [s]'},
|
|
{d:t('Logs','Logs'),c:'journalctl -u [s] -n 50'},{d:t('Purge logs','Purge logs'),c:'sudo journalctl --vacuum-time=7d'}]};
|
|
SEC.wsys={label:t('systeme','system'),cmds:[
|
|
{d:t('(CMD) Version','(CMD) Version'),c:'ver'},{d:t('(CMD) systeminfo','(CMD) systeminfo'),c:'systeminfo'},
|
|
{d:t('(PS) Get-ComputerInfo','(PS) Get-ComputerInfo'),c:'Get-ComputerInfo'}]};
|
|
SEC.wfiles={label:t('fichiers','files'),cmds:[
|
|
{d:t('(CMD) dir','(CMD) dir'),c:'dir /s'},{d:t('(CMD) rmdir','(CMD) rmdir'),c:'rmdir /s [f]'},
|
|
{d:t('(PS) Get-ChildItem','(PS) Get-ChildItem'),c:'Get-ChildItem -Recurse -Filter *.txt'}]};
|
|
SEC.wproc={label:t('processus','processes'),cmds:[
|
|
{d:t('(CMD) tasklist','(CMD) tasklist'),c:'tasklist'},{d:t('(CMD) taskkill','(CMD) taskkill'),c:'taskkill /IM notepad.exe /F'},
|
|
{d:t('(PS) Get-Process','(PS) Get-Process'),c:'Get-Process'}]};
|
|
SEC.wnet={label:t('reseau','network'),cmds:[
|
|
{d:t('(CMD) ipconfig','(CMD) ipconfig'),c:'ipconfig /all'},{d:t('(CMD) netstat','(CMD) netstat'),c:'netstat -an | findstr LISTEN'},
|
|
{d:t('(PS) TNM','(PS) TNM'),c:'Test-NetConnection [ip] -Port [port]'}]};
|
|
SEC.odnf={label:t('DNF','DNF'),cmds:[
|
|
{d:t('Sync','Sync'),c:'sudo dnf check-update'},{d:t('Upgrade','Upgrade'),c:'sudo dnf upgrade -y'},
|
|
{d:t('Install','Install'),c:'sudo dnf install [p]'},{d:t('Remove','Remove'),c:'sudo dnf remove [p]'}]};
|
|
SEC.r_dnf={label:t('DNF','DNF'),cmds:[
|
|
{d:t('Sync depots','Sync repos'),c:'sudo dnf check-update'},{d:t('Mise a jour','Upgrade'),c:'sudo dnf upgrade -y'},
|
|
{d:t('Installer','Install'),c:'sudo dnf install [pkg]'},{d:t('Supprimer','Remove'),c:'sudo dnf remove [pkg]'},
|
|
{d:t('Chercher','Search'),c:'dnf search [kw]'},{d:t('Historique','History'),c:'dnf history'},
|
|
{d:t('Info paquet','Package info'),c:'dnf info [pkg]'},{d:t('Fichiers (rpm)','Package files'),c:'rpm -ql [pkg]'}]};
|
|
SEC.r_fw={label:t('firewalld','firewalld'),cmds:[
|
|
{d:t('Status','Status'),c:'sudo firewall-cmd --state'},{d:t('Zone par defaut','Default zone'),c:'sudo firewall-cmd --get-default-zone'},
|
|
{d:t('Ouvrir port','Open port'),c:'sudo firewall-cmd --permanent --add-port=22/tcp'},
|
|
{d:t('Ouvrir service','Open service'),c:'sudo firewall-cmd --permanent --add-service=http'},
|
|
{d:t('Reload','Reload'),c:'sudo firewall-cmd --reload'},{d:t('Lister regles','List rules'),c:'sudo firewall-cmd --list-all'}]};
|
|
SEC.r_selinux={label:t('SELinux','SELinux'),cmds:[
|
|
{d:t('Status','Status'),c:'getenforce'},{d:t('Permissif','Permissive'),c:'sudo setenforce 0'},
|
|
{d:t('Enforcing','Enforcing'),c:'sudo setenforce 1'},{d:t('Logs AVC','AVC logs'),c:'sudo ausearch -m avc -ts recent'},
|
|
{d:t('Contextes fichier','File contexts'),c:'ls -Z [f]'},{d:t('restorecon','restorecon'),c:'sudo restorecon -Rv [p]'},
|
|
{d:t('Bools liste','List booleans'),c:'getsebool -a'},{d:t('Config permanente','Permanent config'),c:'cat /etc/selinux/config'}]};
|
|
SEC.r_epel={label:t('EPEL','EPEL'),cmds:[
|
|
{d:t('Installer EPEL','Install EPEL'),c:'sudo dnf install epel-release'},
|
|
{d:t('Activer EPEL','Enable EPEL'),c:'sudo dnf config-manager --set-enabled epel'},
|
|
{d:t('Chercher EPEL','Search EPEL'),c:'dnf search [kw] --enablerepo=epel'}]};
|
|
SEC.ospec={label:t('Oracle spec.','Oracle spec.'),cmds:[
|
|
{d:t('Ksplice status','Ksplice status'),c:'sudo uptrack-status'},{d:t('Ksplice upgrade','Ksplice upgrade'),c:'sudo uptrack-upgrade'},
|
|
{d:t('Switch kernel','Switch kernel'),c:'sudo grubby --set-default /boot/vmlinuz-[v]'}]};
|
|
SEC.osel={label:t('SELinux','SELinux'),cmds:[
|
|
{d:t('Status','Status'),c:'getenforce'},{d:t('Permissive','Permissive'),c:'sudo setenforce 0'},
|
|
{d:t('AVC logs','AVC logs'),c:'sudo ausearch -m avc -ts recent'}]};
|
|
SEC.ofw={label:t('firewalld','firewalld'),cmds:[
|
|
{d:t('Status','Status'),c:'sudo firewall-cmd --state'},{d:t('Open port','Open port'),c:'sudo firewall-cmd --permanent --add-port=22/tcp'}]};
|
|
SEC.sips={label:t('IPS','IPS'),cmds:[
|
|
{d:t('Refresh','Refresh'),c:'sudo pkg refresh'},{d:t('Update','Update'),c:'sudo pkg update'},
|
|
{d:t('Install','Install'),c:'sudo pkg install [p]'},{d:t('Remove','Remove'),c:'sudo pkg uninstall [p]'}]};
|
|
SEC.ssmf={label:t('SMF','SMF'),cmds:[
|
|
{d:t('List','List'),c:'svcs -a'},{d:t('Enable','Enable'),c:'sudo svcadm enable [s]'},
|
|
{d:t('Disable','Disable'),c:'sudo svcadm disable [s]'},{d:t('Restart','Restart'),c:'sudo svcadm restart [s]'}]};
|
|
SEC.szfs={label:t('ZFS','ZFS'),cmds:[
|
|
{d:t('Pool status','Pool status'),c:'zpool status'},{d:t('Scrub','Scrub'),c:'sudo zpool scrub [p]'},
|
|
{d:t('Snapshot','Snapshot'),c:'sudo zfs snapshot [p]/[ds]@[n]'},{d:t('Send/Receive','Send/Receive'),c:'zfs send [p]/[ds]@snap | zfs receive [d]'}]};
|
|
SEC.szones={label:t('Zones','Zones'),cmds:[
|
|
{d:t('List','List'),c:'zoneadm list -cv'},{d:t('Boot','Boot'),c:'sudo zoneadm -z [z] boot'},
|
|
{d:t('Halt','Halt'),c:'sudo zoneadm -z [z] halt'},{d:t('Console','Console'),c:'sudo zlogin -C [z]'}]};
|
|
SEC.mysql={label:t('MySQL/MariaDB','MySQL/MariaDB'),cmds:[
|
|
{d:t('Connexion','Connect'),c:'mysql -u [user] -p'},{d:t('Bases liste','Show databases'),c:'SHOW DATABASES;'},
|
|
{d:t('Tables liste','Show tables'),c:'SHOW TABLES;'},{d:t('Utilisateurs','Users'),c:'SELECT User,Host FROM mysql.user;'},
|
|
{d:t('Creer base','Create DB'),c:'CREATE DATABASE [db];'},{d:t('Creer user','Create user'),c:"CREATE USER '[u]'@'localhost' IDENTIFIED BY '[p]';"},
|
|
{d:t('Grant droits','Grant privileges'),c:"GRANT ALL ON [db].* TO '[u]'@'localhost';"},{d:t('Dump base','Dump database'),c:'mysqldump -u [u] -p [db] > backup.sql'},
|
|
{d:t('Restore base','Restore database'),c:'mysql -u [u] -p [db] < backup.sql'},{d:t('Dump toutes','Dump all'),c:'mysqldump -u [u] -p --all-databases > all.sql'},
|
|
{d:t('Show process','Show processlist'),c:'SHOW FULL PROCESSLIST;'},{d:t('Variables','Variables'),c:"SHOW VARIABLES LIKE '%[kw]%';"}]};
|
|
SEC.pg={label:t('PostgreSQL','PostgreSQL'),cmds:[
|
|
{d:t('Connexion','Connect'),c:"psql -U [user] -d [db]"},{d:t('Bases liste','List databases'),c:'\\l+'},
|
|
{d:t('Tables liste','List tables'),c:'\\dt+'},{d:t('Describe table','Describe table'),c:'\\d+ [table]'},
|
|
{d:t('Creer base','Create database'),c:'CREATE DATABASE [db];'},{d:t('Creer user','Create user'),c:"CREATE USER [u] WITH PASSWORD '[p]';"},
|
|
{d:t('Grant droits','Grant privileges'),c:"GRANT ALL PRIVILEGES ON DATABASE [db] TO [u];"},{d:t('Dump base','Dump database'),c:'pg_dump -U [u] [db] > backup.sql'},
|
|
{d:t('Restore base','Restore database'),c:'psql -U [u] -d [db] < backup.sql'},{d:t('List indexes','List indexes'),c:'\\di+'},
|
|
{d:t('Vacuumer','Vacuum'),c:"VACUUM FULL ANALYZE;"},{d:t('pg_hba.conf','pg_hba.conf path'),c:'SHOW hba_file;'}]};
|
|
|
|
var ALL=[];(function(){var seen={};for(var k in SEC)SEC[k].cmds.forEach(function(x){if(!seen[x.c]){seen[x.c]=1;ALL.push(x)}})})();
|
|
|
|
function FN(t,i){if(t.id===i)return t;for(var j=0;j<(t.children||[]).length;j++){var r=FN(t.children[j],i);if(r)return r}return null}
|
|
function CL(n,o){if(n.children){for(var i=0;i<n.children.length;i++)CL(n.children[i],o)}else o.push(n);return o}
|
|
function CC(n){if(n.secs){var t=0;for(var i=0;i<n.secs.length;i++)if(SEC[n.secs[i]])t+=SEC[n.secs[i]].cmds.length;return t}return 0}
|
|
function $(i){return document.getElementById(i)}
|
|
|
|
function RT(){
|
|
var el=$('tree');el.innerHTML='';
|
|
function RN(c,n,d){
|
|
var br=n.children&&n.children.length>0,ver=!!n.secs;
|
|
var dv=document.createElement('div');
|
|
if(d===0){var lb=document.createElement('div');lb.className='grp';lb.textContent='Categories';dv.appendChild(lb)}
|
|
else{
|
|
var rw=document.createElement('div');
|
|
var c2='slk';if(d===2)c2+=' slk3';if(d===3)c2+=' slk4';if(n===N)c2+=' act';rw.className=c2;
|
|
if(br){var tg=document.createElement('span');tg.className='tgl o';
|
|
tg.innerHTML='<svg width="12" height="12" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M9 18l6-6-6-6"/></svg>';rw.appendChild(tg)
|
|
}else{var sp=document.createElement('span');sp.style.cssText='width:16px;flex-shrink:0;display:inline-block';rw.appendChild(sp)}
|
|
var dt=document.createElement('span');
|
|
if(ver||n._p)dt.className='dg';else if(br)dt.className='do';else dt.className='dgr';
|
|
rw.appendChild(dt);
|
|
var lb2=document.createElement('span');lb2.textContent=n.label.fr;rw.appendChild(lb2);
|
|
var cnt=CC(n)||(n._p&&n._p.secs?SEC[n._sid]?SEC[n._sid].cmds.length:0:0);
|
|
if(cnt>0){var b2=document.createElement('span');b2.style.cssText='margin-left:auto;font-size:10px;color:#94a3b8';b2.textContent=''+cnt;rw.appendChild(b2)}
|
|
rw.onclick=function(e){
|
|
if(br&&(e.target.closest('.tgl')||e.target.closest('[data-toggle]'))){var tg=rw.querySelector('.tgl');if(tg){tg.classList.toggle('o');rw.nextElementSibling.classList.toggle('o');e.stopPropagation()}return}
|
|
if(br)return;S(n)
|
|
};
|
|
dv.appendChild(rw)
|
|
}
|
|
function onPath(t) { if(!t)return false; if(t===n)return true; var p=t._p; while(p){if(p===n)return true;p=p._p}return false; }
|
|
if(br){var kd=document.createElement('div');kd.className='chd'+(onPath(N)?' o':'');
|
|
for(var i=0;i<n.children.length;i++){n.children[i]._p=n;RN(kd,n.children[i],d+1)}
|
|
dv.appendChild(kd)
|
|
}
|
|
if(ver&&n.secs){var kd=document.createElement('div');kd.className='chd';
|
|
if(n===N||(N&&N._p===n))kd.className='chd o';
|
|
for(var j=0;j<n.secs.length;j++){var s=n.secs[j],sc=SEC[s];if(!sc)continue;
|
|
var sn={id:n.id+'-'+s,label:sc.label,_sid:s,_p:n};RN(kd,sn,d+1)}
|
|
dv.appendChild(kd)
|
|
}
|
|
c.appendChild(dv)
|
|
}
|
|
RN(el,TREE,0)
|
|
}
|
|
|
|
function S(n){
|
|
N=n;CS=null;RT();$('search').value='';HI();$('bd').innerHTML='';
|
|
var t=$('os-title'),s=$('os-sub'),c=$('cmds');
|
|
if(n._sid){var sc=SEC[n._sid];if(sc){t.textContent=(n._p.label.fr||'')+' > '+sc.label.fr;s.textContent=sc.cmds.length+' commandes';SC(sc.cmds)}return}
|
|
if(n.secs&&n.secs.length>0){var s0=n.secs[0],sc0=SEC[s0];if(sc0){t.textContent=n.label.fr;s.textContent=n.secs.length+' sections . '+CC(n)+' commandes';SC(sc0.cmds)}return}
|
|
t.textContent=n.label.fr;s.textContent='Aucune donnee';c.innerHTML='<div class="emp"><h3>'+n.label.fr+'</h3><p>Pas encore de commandes</p></div>'
|
|
}
|
|
|
|
function SH(){N=null;CS=null;RT();$('search').value='';
|
|
$('home').style.display='block';$('tabs').style.display='none';$('stats-bar').style.display='none';$('cmd-box').style.display='none';
|
|
$('bd').innerHTML='';$('os-title').textContent='SysCmd';$('os-sub').textContent='';$('fh').textContent='Cliquez sur un OS pour explorer ses commandes';
|
|
RH()
|
|
}
|
|
function HI(){$('home').style.display='none';$('tabs').style.display='flex';$('stats-bar').style.display='flex';$('cmd-box').style.display='block';$('fh').textContent='Cliquez sur une commande pour la copier'}
|
|
|
|
function RH(){RS();RCS()}
|
|
function RS(){
|
|
var tc=ALL.length,ts=0;for(var k in SEC)ts++;
|
|
var lv=CL(TREE,[]),tos=0;for(var i=0;i<lv.length;i++)if(lv[i].secs)tos++;
|
|
$('stats-row').innerHTML='<div class="sb"><div class="n">'+tc+'</div><div class="l">commandes</div></div><div class="sb"><div class="n">'+ts+'</div><div class="l">sections</div></div><div class="sb"><div class="n">'+tos+'</div><div class="l">OS renseignes</div></div><div class="sb"><div class="n" style="color:#94a3b8">'+(lv.length-tos)+'</div><div class="l">placeholders</div></div>'
|
|
}
|
|
|
|
var CARDS=[
|
|
{id:'deb',l:'Debian',i:'D',c:'#0f172a',d:t('Distribution stable','Stable'),cat:'os'},
|
|
{id:'ubu',l:'Ubuntu',i:'U',c:'#dc2626',d:t('Base Debian LTS','Debian LTS'),cat:'os',gr:true},
|
|
{id:'ora',l:'Oracle Linux',i:'O',c:'#b9141e',d:t('Linux UEK+SELinux','UEK+SELinux'),cat:'os'},
|
|
{id:'win',l:'Windows',i:'W',c:'#0078d4',d:t('CMD+PS','CMD+PS'),cat:'os',gr:true},
|
|
{id:'sol',l:'Solaris',i:'S',c:'#b46400',d:t('Solaris+ZFS+DTrace','Solaris'),cat:'os'},
|
|
{id:'rhel',l:'RHEL/CentOS',i:'R',c:'#e63946',d:t('Enterprise Linux standard','Standard Enterprise Linux'),cat:'os'},
|
|
{id:'fed',l:'Fedora',i:'F',c:'#94a3b8',d:t('RHEL-based','RHEL-based'),cat:'os',ph:1},
|
|
{id:'mac',l:'macOS',i:'M',c:'#94a3b8',d:t('macOS','macOS'),cat:'os',ph:1},
|
|
{id:'dcc',l:'Docker Compose',i:'D',c:'#0ea5e9',d:t('Multi-conteneurs','Multi-container'),cat:'dk',ph:1},
|
|
{id:'dcs',l:'Docker Swarm',i:'S',c:'#0ea5e9',d:t('Cluster natif','Cluster'),cat:'dk',ph:1},
|
|
{id:'dcf',l:'Dockerfile',i:'F',c:'#0ea5e9',d:t('Build','Build'),cat:'dk',ph:1},
|
|
{id:'cis',l:'Cisco',i:'C',c:'#8b5cf6',d:t('Reseau Cisco','Cisco'),cat:'oth',ph:1},
|
|
{id:'my',l:'MySQL/MariaDB',i:'S',c:'#8b5cf6',d:t('Bases SQL','SQL'),cat:'oth',ph:1},
|
|
{id:'pg',l:'PostgreSQL',i:'P',c:'#8b5cf6',d:t('Base avancee','Advanced DB'),cat:'oth',ph:1},
|
|
{id:'ans',l:'Ansible',i:'A',c:'#8b5cf6',d:t('Automatisation','Automation'),cat:'oth',ph:1},
|
|
{id:'k8',l:'Kubernetes',i:'K',c:'#8b5cf6',d:t('Orchestration','Orchestration'),cat:'oth',ph:1}];
|
|
|
|
function RCS(){
|
|
var cats={os:{l:t('Systemes d exploitation','Operating Systems'),h:''},dk:{l:t('Docker/Conteneurs','Docker/Containers'),h:''},oth:{l:t('Reseau, BDD, DevOps','Network, DB, DevOps'),h:''}};
|
|
CARDS.forEach(function(cd){
|
|
var nd=FN(TREE,cd.id),cnt=nd?CC(nd):0,ph=cd.ph&&cnt===0;
|
|
if(!cats[cd.cat])cats[cd.cat]={l:cd.cat,h:''};
|
|
var h='<div class="oc'+(ph?' ph':'')+'" data-card="'+cd.id+'">'+
|
|
'<div style="display:flex;gap:12px;margin-bottom:12px">'+
|
|
'<div class="ic" style="background:'+(ph?'#e2e8f0':cd.c)+';color:'+(ph?'#94a3b8':'#fff')+'"><span style="font-weight:700;font-size:13px">'+cd.i+'</span></div>'+
|
|
'<div style="flex:1;min-width:0"><div style="font-weight:600;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">'+(cd.gr?cd.l+' >':cd.l)+'</div>'+
|
|
'<div class="sl">'+cd.d.fr+'</div></div></div>'+
|
|
'<div style="display:flex;gap:8px;font-size:11px">'+(cnt>0?'<span style="font-weight:600;color:#0f172a">'+cnt+'</span><span style="color:#94a3b8">commandes</span>':'<span style="color:#cbd5e1">'+(ph?'A venir':'via sidebar')+'</span>')+'</div></div>';
|
|
cats[cd.cat].h+=h
|
|
});
|
|
var html='';
|
|
Object.keys(cats).forEach(function(k){html+='<div class="cl">'+cats[k].l.fr+'</div>'+cats[k].h});
|
|
$('grid').innerHTML=html;
|
|
// Bind clicks
|
|
$('grid').querySelectorAll('[data-card]').forEach(function(el){
|
|
el.onclick=function(){
|
|
var id=el.dataset.card,cd=null;
|
|
for(var i=0;i<CARDS.length;i++)if(CARDS[i].id===id){cd=CARDS[i];break}
|
|
if(!cd)return;
|
|
var nd=FN(TREE,cd.id);
|
|
if(cd.gr&&nd&&nd.children&&nd.children.length>0)S(nd.children[0]);
|
|
else if(nd)S(nd)
|
|
}
|
|
})
|
|
}
|
|
|
|
function SC(cmds){
|
|
var el=$('cmds'),sv=$('search').value.trim().toLowerCase();
|
|
var c2=sv?cmds.filter(function(x){return x.d.fr.indexOf(sv)!==-1||x.d.en.indexOf(sv)!==-1||x.c.indexOf(sv)!==-1}):cmds;
|
|
$('shown').textContent=''+c2.length;
|
|
if(c2.length===0){el.innerHTML='<div class="p8">Aucune commande trouvee</div>';return}
|
|
el.innerHTML='';
|
|
c2.forEach(function(x,i){
|
|
var r=document.createElement('div');r.className='scmd'+(i%2===0?' alt':'');
|
|
r.innerHTML='<div class="d">'+x.d.fr+'</div><div class="t"><span class="cp"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg></span><span>'+x.c+'</span></div>';
|
|
r.querySelector('.t').onclick=function(){
|
|
navigator.clipboard.writeText(x.c).then(function(){
|
|
var ic=r.querySelector('.cp');
|
|
ic.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="#22c55e" stroke-width="2.5" width="14" height="14"><polyline points="20 6 9 17 4 12"/></svg>';
|
|
setTimeout(function(){ic.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg>'},1200)
|
|
})
|
|
};
|
|
el.appendChild(r)
|
|
})
|
|
}
|
|
|
|
function onSearch(v){
|
|
$('fi').textContent=v.trim()?'Filtre: "'+v+'"':'Aucun filtre';
|
|
if(N&&N._sid){SC(SEC[N._sid].cmds);return}
|
|
if(N&&N.secs&&N.secs.length>0){SC(SEC[N.secs[0]].cmds);return}
|
|
if(!N&&v.trim()){
|
|
var r=ALL.filter(function(x){return x.d.fr.indexOf(v.trim().toLowerCase())!==-1||x.d.en.indexOf(v.trim().toLowerCase())!==-1||x.c.indexOf(v.trim().toLowerCase())!==-1});
|
|
$('gs').style.display='block';
|
|
var h='<div class="cmdbox"><div class="s">'+r.length+' resultat(s)</div>';
|
|
if(r.length===0)h+='<div class="p8">Aucun resultat</div>';
|
|
else{r.forEach(function(x,i){
|
|
h+='<div class="scmd'+(i%2===0?' alt':'')+'"><div class="d">'+x.d.fr+'</div><div class="t"><span class="cp"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg></span><span>'+x.c+'</span></div></div>'
|
|
})}
|
|
h+='</div>';$('gs').innerHTML=h;$('grid').style.display='none';$('stats-row').style.display='none'
|
|
}else if(!N){$('gs').style.display='none';$('grid').style.display='grid';$('stats-row').style.display='grid'}
|
|
}
|
|
|
|
RT();
|
|
SH();
|
|
</script>
|
|
</body>
|
|
</html>
|