https://nodejs.org/en/about/releases/
http://php.net/supported-versions.php
Speed
Type Declarations (scalar typehint, strict mode, return type...)
Error Handling (type error, throwable interface)
classes anonymes
type des fonctions et type des arguments
Spaceship operator :
echo 1 <=> 1; //ouputs 0
echo 3 <=> 4; //outputs -1
echo 4 <=> 3; //outputs 1
Null Coalesce operator :
$identifiant = $_GET['utilisateur'] ?? 'aucun';
source : http://php.net/manual/fr/migration70.new-features.php
https://symfony.com/roadmap
immutable = ne change pas (état non modifié après création) != objet variable
public
protected
private
Sass / LESS
A CSS preprocessor is a program that lets you generate CSS from the preprocessor's own unique syntax. There are many CSS preprocessors to choose from, however most CSS preprocessors will add some features that don't exist in pure CSS, such as mixin, nesting selector, inheritance selector, and so on. These features make the CSS structure more readable and easier to maintain.
https://developer.mozilla.org/en-US/docs/Glossary/CSS_preprocessor
Mounting, Updating and Unmounting
render() => mounting and updating
componentDidMount() => mounted and ready
componentDidUpdate() => updating happens
componentWillUnmount() => just before the component unmounted and destroyed
React's createClass Components => var App = React.createClass({...
The createClass method provided developers with a factory method to create React class components without using a JavaScript class.
React Mixins => var App = React.createClass({ mixins: [localStorageMixin], ...
first advanced pattern for reusable component logic
React Class Components => class App extends React.Component { constructor(props) { ...
introduced with JavaScript ES6
React Higher-Order Components => const withLocalStorage = localStorageKey => Component => class WithLocalStorage extends React.Component {
popular advanced React pattern, are an alternative for React Mixins to deploy reusable logic across React components.
React Function Components => const App = () => {
equivalent of React Class Components but expressed as functions instead of classes
const EnhancedComponent = higherOrderComponent(WrappedComponent);
Concrètement, un composant d’ordre supérieur est une fonction qui accepte un composant et renvoie un nouveau composant.
https://fr.reactjs.org/docs/higher-order-components.html
Fonction qui permet de « se brancher » sur des fonctionnalités React
Hook d'état :
const [count, setCount] = useState(0);
Hook d’effet :
Si vous avez l’habitude des méthodes de cycle de vie des classes React, pensez au Hook useEffect comme à une combinaison de componentDidMount, componentDidUpdate, et componentWillUnmount.
import React, { useState, useEffect } from 'react';
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `Vous avez cliqué ${count} fois`;
});
return (
<div>
<p>Vous avez cliqué {count} fois</p>
<button onClick={() => setCount(count + 1)}>
Cliquez ici
</button>
</div>
);
}
Functional components are very useful in React, especially when you want to isolate state management from the component. Which is why they are often called stateless components.
Redux is a predictable state container for JavaScript apps.
It helps you write applications that behave consistently, run in different environments (client, server, and native), and are easy to test. On top of that, it provides a great developer experience, such as live code editing combined with a time traveling debugger.
State / Reducer
HTML is the standard markup language for Web pages.
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1>This is a Heading</h1>
<p>This is a paragraph.</p>
</body>
</html>
https://www.w3schools.com/html/default.asp
TypeScript is an open-source programming language developed and maintained by Microsoft. It is a strict syntactical superset of JavaScript, and adds optional static typing to the language.
TypeScript is designed for development of large applications and transcompiles to JavaScript.
https://en.wikipedia.org/wiki/TypeScript
Ensemble de méthodes que les classes doivent définir si elles veulent l'implémenter
Programmation par contrat
Composition signifie A UN, Héritage signifie EST UN
Exemple : Voiture a un moteur | Voiture est une automobile
source : https://waytolearnx.com/2018/08/difference-entre-heritage-et-composition.html
--- PSR-1 Basic Coding Standard ---
Les fichiers DOIVENT utiliser uniquement les tags <?php et <?= .
Les fichiers DOIVENT utiliser uniquement un encodage UTF-8 sans BOM pour le code PHP.
Les fichiers PEUVENT soit déclarer des traitements (classes, fonctions, constantes, etc.) ou modifier l'environnement (par exemple générer du contenu, changer les paramètres .ini etc.) mais ne peuvent pas faire les deux.
Les Namespaces et les classes DOIVENT suivre un "autoloading" PSR: [PSR-0, PSR-4].
Les noms de classes DOIVENT être déclarés en StudlyCaps.
les constantes de classe DOIVENT être déclarées en majuscule avec des underscore en séparateurs.
les noms des méthodes DOIVENT être déclarées en camelCase.
--- PSR-2 Coding Style Guide ---
Le code "DOIT" suivre le standard PSR 1.
Le code "DOIT" utiliser 4 espaces pour l'indentation, pas les tabulations.
il NE DOIT PAS y avoir de limite dure à la longueur de ligne. La limite de base est de 120 caractères; les lignes DEVRAIENT être de 80 caractères ou moins.
Il DOIT y avoir une ligne blanche après la déclaration du namespace, et il DOIT y avoir une ligne blanche après le block des déclarations use.
Les accolades ouvrantes pour les classes DOIVENT être sur la ligne suivante, et les accolades fermantes DOIVENT être sur la ligne suivante.
Les accolades ouvrantes pour les méthodes DOIVENT être sur la ligne suivante, et les accolades fermantes DOIVENT être sur la ligne suivante.
la visibilité DOIT être déclarées sur toutes les proprités et les méthodes; abstract et final DOIVENT être déclarées avant la visibilité; static DOIT être déclaré après la visibilité.
Les mots clés de contrôle de structure DOIVENT avoir un espace après eux; les appels aux méthodes et fonction NE DOIVENT PAS.
Les accolades ouvrantes pour les structures de contrôle DOIVENT être sur la même ligne, et les accolades fermantes DOIVENT aller sur la ligne suivante.
Les parenthèses ouvrantes des structures de contrôle NE DOIVENT PAS avoir d'espace après elles, et les parenthèses de fermeture NE DOIVENT PAS avoir d'espace avant.
--- PSR-3 Logger Interface ---
--- PSR-4 Autoloading Standard ---
--- PSR-6 Caching Interface ---
source : https://www.php-fig.org/psr/
let => Unlike variables declared with var that are function-scoped
Template String (back ticks) =>
let me = "Yannick";
let mAge = 29;
let result = `Je suis ${me} et j'ai ${mAge} ans`;
Default Parameters => function add(a=3, b=5)
for-of loop => looping over iterable objects
var colors = new Set(['rojo', 'amarillo', 'azul']);
colors.language = 'es'; // add an expando property
for (let name in colors)
alert(name); // "language" (the property name)
for (let word of colors)
alert(word); // "rojo", "amarillo", "azul" (the data)
Arrow function => Lexical this binding and Shorter syntactical form (() => {} vs. function () {})
Création : Factory Method, Abstract Factory, Builder, Prototype, Singleton
Structure : Adapter, Bridge, Composite, Decorator, Façade, Flyweight, Proxy
Comportement : Chain of responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor, Interpreter
Attention : MVC = Combinaison des patrons observateur, stratégie et composite, ce qui forme ainsi un patron d'architecture.
Un “stub” est un objet qui va simuler les différentes classes utilisées par la classe cible. Cet objet va toujours retourner la même valeur, quels que soient ses paramètres.
Un “mock” est un “stub” dans lequel on va vérifier des attentes à des appels de méthodes. Par exemple, je vérifie qu’une méthode est appelée une fois.
Taux de code source exécuté d'un programme quand une suite de test est lancée
> test unitaire
Chaque sous ensemble de l'application est testé de manière séparée.
Ces tests permettent de s'assurer que chaque élément fonctionne correctement de manière indépendante.
PHP (PHPUnit), Javascript (Mocha, Jasmine, Jest...), Python (Unittest et PyUnit), C++ (CppUnit), Java (JUnit)
> test fonctionnel
Dans cette phase, on va dérouler les processus métier de bout en bout (vision utilisateur) et s'assurer qu'ils sont conformes aux besoins du Client
BDD (Behavior Driven Development) : Behat
Ecrire chaque test avant d'écrire le code source d'un logiciel, de façon itérative
> Intégration continue
Détecte les erreurs aussi rapidement que possible
Réduit les problèmes d'intégration: les problèmes plus petits sont plus faciles à digérer
Éviter les problèmes de composition: permet aux équipes de se développer plus rapidement, avec plus de confiance
> Livraison continue
S'assure que chaque changement est fiable: testez tout, y compris le déploiement.
Réduit le risque de chaque publication: rend les publications «ennuyeuses»
Fournit de la valeur plus fréquemment: des déploiements fiables signifient plus de versions
Boucles de retour client serrées: commentaires client rapides et fréquents sur les modifications
> Solutions :
Gitlab CI
Jenkins, serveur d'intégration continue
SonarQube, logiciel de supervision de la qualité du code
Tinderbox, serveur d'intégration continue de la Mozilla Foundation
Team Foundation Server, serveur Microsoft
Chaos Monkey, outil de tests de résilience en continu
cache:clear
Après un déploiement par exemple, quelle commande permet de générer le cache afin d’améliorer les performances au lancement du site la première fois ?
cache:warmup
55 (environ 40 sans les polyfill)
https://symfony.com/components
config, console, DependencyInjection, event dispatcher, expression language, file system, finder, form, Http kernel, options resolver, routing, templating, translation, validator, varDumper, yaml
https://symfony.com/doc/3.4/forms.html
left join, inner join, right join
transactions
clés étrangères
ACID
(inconvénients : admistration plus compliquée, plus lent pour les lectures et insertion du fait de la gestion de l'intégrité des données, de pouvoir récupérer en cas de crash...)
Sur le champ texte, car la cardinalité est trop faible sur un booléen
<type>[optional scope]: <description>
[optional body]
[optional footer]
fix: a commit of the type fix patches a bug in your codebase (this correlates with PATCH in semantic versioning).
feat: a commit of the type feat introduces a new feature to the codebase (this correlates with MINOR in semantic versioning).
BREAKING CHANGE: a commit that has the text BREAKING CHANGE: at the beginning of its optional body or footer section introduces a breaking API change (correlating with MAJOR in semantic versioning). A BREAKING CHANGE can be part of commits of any type.
Others: commit types other than fix: and feat: are allowed, for example @commitlint/config-conventional (based on the Angular convention) recommends chore:, docs:, style:, refactor:, perf:, test:, and others.
https://www.conventionalcommits.org
git checkout [branche]
git tag, git tag -l
git push origin :[branche]
modèle de branches (develop, feature branchs, release, hotfix, master, tags)
> Merge
Opération non destructive. Les branches existantes ne sont aucunement altérées. Cela permet d'éviter les pièges potentiels du rebase (abordés ci-dessous).
Génération d'un commit de merge dans la branche de fonctionnalité
Pollue l'historique de la branche
> Rebase
Toute la branche de fonctionnalité sera ainsi déplacée sur la pointe de la branche master, et tous les nouveaux commits seront intégrés à master. Cependant, au lieu d'utiliser un commit de merge, le rebase consiste à réécrire l'historique du projet en créant de nouveaux commits pour chaque commit de la branche d'origine.
Historique plus propre
source : https://fr.atlassian.com/git/tutorials/merging-vs-rebasing
Like many other Version Control Systems, Git has a way to fire off custom scripts when certain important actions occur. There are two groups of these hooks: client-side and server-side. Client-side hooks are triggered by operations such as committing and merging, while server-side hooks run on network operations such as receiving pushed commits. You can use these hooks for all sorts of reasons.
https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
example: pre-commit for eslint check
GET (read), POST (create), PUT (update), DELETE (delete), PATCH
HTTP methods mapped as follows:
GET /tickets - Retrieves a list of tickets
GET /tickets/12 - Retrieves a specific ticket
POST /tickets - Creates a new ticket
PUT /tickets/12 - Updates ticket #12
PATCH /tickets/12 - Partially updates ticket #12
DELETE /tickets/12 - Deletes ticket #12
GET /tickets/12/messages - Retrieves list of messages for ticket #12
GET /tickets/12/messages/5 - Retrieves message #5 for ticket #12
POST /tickets/12/messages - Creates a new message in ticket #12
PUT /tickets/12/messages/5 - Updates message #5 for ticket #12
PATCH /tickets/12/messages/5 - Partially updates message #5 for ticket #12
DELETE /tickets/12/messages/5 - Deletes message #5 for ticket #12
https://martinfowler.com/articles/richardsonMaturityModel.html
200 : succès de la requête ;
301 et 302 : redirection, respectivement permanente et temporaire ;
401 : utilisateur non authentifié ;
403 : accès refusé ;
404 : page non trouvée ;
500 et 503 : erreur serveur ;
504 : le serveur n'a pas répondu.
Protocole libre qui permet d'autoriser un site web, un logiciel ou une application (dite « consommateur ») à utiliser l'API sécurisée d'un autre site web (dit « fournisseur ») pour le compte d'un utilisateur
Auth0 (prononcer “auth zero”) permet de proposer différents types d’authentification :
Standard : login + password
Connexion avec les réseaux sociaux : Google, Facebook, Twitter, Microsoft Account, LinkedIn, GitHub, Box, Salesforce…
Intégration avec un annuaire d’entreprise existant: LDAP, Google Apps, Office 365…
Touch ID : qui utilise le lecteur d’empreinte de votre smartphone
Codes ou liens générés utilisés une seule fois et reçus par SMS ou email
Vous disposez d’un tableau de bord pour visualiser des logs et statistiques sur vos utilisateurs.
source : https://blog.humancoders.com/introduction-auth0-authentification-saas-2187/
Amazon Cognito vous permet d'ajouter facilement et rapidement l'inscription et la connexion des utilisateurs ainsi que le contrôle d'accès à vos applications Web et mobiles. Amazon Cognito s'adapte à des millions d'utilisateurs et prend en charge la connexion avec les fournisseurs d'identité sociale tels que Facebook, Google et Amazon, et les fournisseurs d'identité d'entreprise via SAML 2.0.
JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA.
> Authorization
> Information Exchange
Structure :
> Header : { "alg": "HS256", "typ": "JWT" }
> Payload : { "sub": "1234567890", "name": "John Doe", "admin": true }
> Signature : HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
Authorization: Bearer <token>
source : https://jwt.io/
Une seule clé est utilisée pour chiffrer les données. Une fois chiffrés avec la clé, les données peuvent être déchiffrées à l'aide de la même clé. Si, par exemple, Mary chiffre un message à l'aide de la clé "my-secret" et l'envoie à John, il sera en mesure de déchiffrer correctement le message avec la même clé "my-secret".
Deux clés sont utilisées pour chiffrer et déchiffrer les messages. Alors qu'une clé (publique) est utilisée pour chiffrer le message, l'autre clé (privée) ne peut être utilisée que pour le déchiffrer. Ainsi, John peut générer des clés publiques et privées, puis envoyer uniquement la clé publique à Mary pour chiffrer son message. Le message ne peut être déchiffré qu'à l'aide de la clé privée.
Ces algorithmes ne sont PAS utilisés pour chiffrer / déchiffrer des données. Ils sont plutôt utilisés pour vérifier l'origine ou l'authenticité des données. Lorsque Mary doit envoyer un message ouvert à Jhon et qu'il doit vérifier que le message provient bien de Mary, vous pouvez utiliser le HS256 ou le RS256.
Le HS256 peut créer une signature pour un échantillon de données donné en utilisant une clé unique. Lorsque le message est transmis avec la signature, la partie destinataire peut utiliser la même clé pour vérifier que la signature correspond au message.
RS256 utilise une paire de clés pour faire la même chose. Une signature ne peut être générée qu'à l'aide de la clé privée. Et la clé publique doit être utilisée pour vérifier la signature. Dans ce scénario, même si Jack trouve la clé publique, il ne peut pas créer de message d'usurpation portant une signature pour imiter Mary.
Transparence : langage commun entre l'équipe et le management
Inspection : itération pour faire le point
Adaptation : flexibilité si anomalie
Rôles : le propriétaire du produit (product owner), le scrum master et le développeur
^ Commence par ^Bonjour !Attention! peut vouloir dire négation => m[^oai]ts => ne contient pas oai comme caractère
$ Fini par revoir$
| ou Bonjour|revoir
[a-z] [abcdefghijklmonpqrstuvwxyz] Lettres minuscules de a à z
[A-Z] [ABCDEFGHIJKLMNOPQRSTUVWXYZ] Lettres majuscules de A à Z
[0-9] [0123456789] Chiffres de 0 à 9
[a-z0-9] [abcdefghijklmonpqrstuvwxyz0123456789] Lettres minuscules de a à z ou chiffres de 0 à 9
. Absolument n'importe quel charactère
\w [a-zA-Z0-9_]
\d [0-9]
\n Un retour à la ligne
\t Une tabulation
\S
* 0 ou plusieurs répétitions {0,}
+ 1 ou plusieurs répétitions {1,}
? 0 ou 1 répétition {,1}
\ échappement pour matcher ces caractères ^ $ \ | { } [ ] ( ) ? # ! + * .
( ou ) créer des suites (ou groupe)
exemples:
url : https?://[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}(/\S*)?
téléphone : (0|\+33)[1-9]( *[0-9]{2}){4}
source: https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres
$ docker ps # Visualiser les conteneurs actifs
$ docker ps -a # Visualiser tous les conteneurs
$ docker rm [container] # Supprimer un conteneur inactif
$ docker rm -f [container] # Forcer la suppression d'un conteneur actif
$ docker images # Lister les images existantes
$ docker rmi [image] # Supprimer une image docker
$ docker exec -t -i [container] /bin/bash # Exécuter des commandes dans un conteneur actif
$ docker inspect [container] # Inspecter la configuration d'un conteneur
$ docker build -t [image] . # Construire une image à partir d'un Dockerfile
$ docker history [image] # Visualiser l'ensemble des couches d'une image
$ docker logs --tail 5 [container] # Visualiser les logs d'un conteneur (les 5 dernières lignes)
# Intéractions avec le registry
$ docker login # Se connecter au registry
$ docker search [name] # Rechercher une image
$ docker pull [image] # Récupérer une image
$ docker push [image] # Pouser une image du cache local au registry
$ docker tag [UUID] [image]:[tag] # Tagger une image
Ordre | Instruction | Description |
---|---|---|
1 | FROM | Image parente |
2 | MAINTAINER | Auteur |
3 | ARG | Variables passées comme paramètres à la construction de l'image |
4 | ENV | Variable d'environnement |
4 | LABEL | Ajout de métadonnées |
5 | VOLUME | Crée un point de montage |
6 | RUN | Commande(s) utilisée(s) pour construire l'image |
6 | COPY | Ajoute un fichier dans l'image |
6 | WORKDIR | Permet de changer le chemin courant |
7 | EXPOSE | Port(s) écouté(s) par le conteneur |
8 | USER | Nom d'utilisateur ou UID à utiliser |
9 | ONBUILD | Instructions exécutées lors de la construction d'images enfants |
10 | CMD | Exécuter une commande au démarrage du conteneur |
10 | ENTRYPOINT | Exécuter une commande au démarrage du conteneur |
git add -vA # ajoute tous les changements au commit, verbeux
git rm [fichiers] # supprime les fichiers du dépôt
git add -p [fichier] # permet de préciser quels morceaux de code d'un fichier sont à ajouter au commit
git pull # met à jour ses fichiers locaux à partir d'un dépôt distant (cela effectue un fetch puis un merge)
git pull -r
git push # Pousse les modifications locales sur un dépôt distant
git push -f # force à pousser ses modifications locales sur un dépôt distant. À utiliser avec précaution.
git stash # mettre de côté ses fichiers modifiés afin de pouvoir faire un pull
git stash pop # réintégrer les fichiers ayant été mis de côté par un stash
git reflog # afficher toutes les actions ayant été effectuées sur le dépôt
git reset HEAD [nom_du_fichier] # permet de retirer un fichier du stage (fichiers à committer) sans perdre ses modifs
git reset --hard HEAD@{1} # revenir à l'état spécifié (obtenu par reflog)
git reset --soft HEAD@{1} # revenir à l'état spécifié (obtenu par reflog), mais en gardant ses dernières modifications
git branch [branche] # créer une branche
git checkout [branche] # switcher d'une branche à une autre
git checkout [branche_distante] # récupère une branche distante (raccourci)
git checkout -b [branche] # crée une branche et fait un checkout sur cette dernière (raccourci)
git push origin [branche] # pousse cette branche sur le dépôt distant précisé
git branch -d [branche] # supprime une branche en local
git push origin :[branche_distante] # supprime une branche sur le dépôt distant
git branch --track [branche] origin/[nom_de_la_branche] # récupère une branche distante
git merge [branche] --no-ff # fusionne les modifications de la branche donnée sur la branche en cours, pas d'avance rapide
git log --pretty="%s" --no-merges v1..v2 # affiche les différences entre deux tags, à la ligne et sans les merge
git log --all --grep='my-feature' # retrouve les commits contenant le texte donné dans son message de commit
git log --pretty=oneline -S'some code'
git blame [fichier] -L 1,5 # affiche l'utilisateur ayant modifié les lignes 1 à 5 du fichier spécifié
git commit --amend -m "new commit name" # modifie le dernier commit (ne pas avoir poussé auparavant)
git fetch -p # après récupération des branches distantes, supprime les branches n'existant plus sur le dépôt distant
git cherry-pick <commit> # permet de transférer un commit en particulier d'une branche à une autre
git tag # affiche la liste des tags
git tag 1.0 # crée le tag 1.0
git push --tags # pousse les tags créés
git branch -m [nouveau_nom] # renomme la branche courante
git merge --squash [branche] # merge les commits provenant d'une autre branche en les regroupant en un seul commit
git tag -l | xargs git tag -d && git fetch -t # supprime les tags en local et récupère les remote tags
git clean -fd # supprime les fichiers et répertoires non trackés
git config -e # édition de la configuration du projet
git config -e --global # édition de la configuration globale de Git
git config -l --global # liste la configuration globale de Git
git config --global user.name "John Doe" # paramétrage du nom de l'utilisateur
git config --global user.email [email protected] # paramétrage de l'email de l'utilisateur
git config --global color.ui true # active la coloration au sein du terminal
git config --global push.default current # force à pousser seulement la branche courante
git config --global core.editor vi # indique l'éditeur par défaut (messages de commit, résolution de conflits, édition de la configuration...)
git config --global pull.rebase true # rebase auto lors d'un pull
git config --global help.autocorrect 1 # lance la commande en cas de typo si il n'y a qu'une seule commande qui peut matcher
git config core.filemode false # les droits des fichiers ne seront pas pris en compte
git config core.excludesfile ~/.gitignore # exclure des fichiers sans polluer le .gitignore du projet
apt-show-versions -b > pkg-list.txt # Récupère la liste des paquets installés
ls -al # Si l'alias ll n'existe pas
uname -a # Affiche le nom de l'OS courant
uname -r # Affiche la version du noyau linux
cat /proc/version # affiche le nom de la distribution
ssh-keygen -t rsa # Génère une clé privée et une clé publique dans ~/.ssh/
ssh-keygen -l # Affiche le fingerprint de la clé ssh
alias d='cd ~/dev' # Crée un alias
useradd -G {group-name} username # ajoute un user à un groupe
echo -n password | sha1sum | awk '{print $1}'
ls -al | grep -E 'DocumentGeneratorManager|OperationManager'
ulimit -a # affiche les limitations de mémoires pour l'utilisateur courant
ulimit -n 2048 # attribue une valeur à l'option spécifiée
find . -name "*.php" -exec grep -l "guess" {} \;
curl http://domain.com/file.tar.gz | tar zx
curl -O http://domain.com/file.tar.gz # Télécharge le fichier avec le nom original
tar -cvf foo.tar foo/
gzip foo.tar
gzip -d file.gz # Décompacte un fichier gzip
unzip file.zip # Décompacte un fichier zip
woof filename # Partager un fichier http://www.home.unix-ag.org/simon/woof.html
cat /etc/passwd | awk -F: '{print $ 1}' # Affiche la liste des utilisateurs
cat /etc/group | awk -F: '{print $ 1}' # Affiche la liste des groupes
sudo apt-get install ubuntu-restricted-extras
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade / sudo do-release-upgrade
$ sudo apt-get install makepasswd
$ makepasswd -minchars 8
screen -S test
ctrl+a+d pour detacher
screen -r test
(exit dans un terminal pour le kill)
https://doc.ubuntu-fr.org/screen
$ composer clear-cache
$ rm vendor/composer/installed.json
$ vi ~/.bashrc
alias ll='ls -alF'
$ source ~/.bashrc
sudo swapoff -a && sudo swapon -a
$ sudo apt-get install sysbench
$ touch sysbench.txt && sysbench --test=cpu --cpu-max-prime=20000 run >> sysbench.txt && sysbench --test=cpu --cpu-max-prime=20000 --num-threads=4 run >> sysbench.txt && sysbench --test=memory run >> sysbench.txt && sysbench --test=memory --num-threads=4 run >> sysbench.txt
Source : https://gist.github.com/jpchateau