diferentes maneras de conectarse a ssh y sftp con terminal en ubuntu
¿Qué es SSH?
SSH o Secure Shell, es un protocolo de administración remota que permite a los usuarios controlar y modificar sus servidores remotos a través de Internet. El servicio se creó como un reemplazo seguro para el Telnet sin cifrar y utiliza técnicas criptográficas para garantizar que todas las comunicaciones hacia y desde el servidor remoto sucedan de manera encriptada. Proporciona un mecanismo para autenticar un usuario remoto, transferir entradas desde el cliente al host y retransmitir la salida de vuelta al cliente.
La imagen de abajo muestra una ventana típica de SSH. Cualquier usuario de Linux o macOS puede hacer SSH en su servidor remoto directamente desde la ventana del terminal. Los usuarios de Windows pueden aprovechar los clientes SSH como Putty. Puede ejecutar comandos shell de la misma manera que lo haría si estuviera operando físicamente el equipo remoto.
SFTP:
Sus siglas significan SSH File Transfer Protocol, es completamente diferente del protocolo FTP (File Transfer Protocol). SFTP fue contruído desde cero y añade la característica de FTP a SSH. Sólo usa un canal de comunicación, envía y recibe los mensajes en binario (y no en formato texto como hace FTP).
FTPS:
Es una extensión de FTP mediante SSL para el cifrado de los datos, utiliza dos canales de , envía y recibe los mensajes en formato texto. FTPS normalmente es más conocido ya que usa los mismos comandos que FTP.
Ambos protocolos utilizan un algoritmo asimétrico (RSA, DSA), un algoritmo simétrico (AES por ejemplo), y un algoritmo de intercambio de claves. Para la autenticación, FTPS utiliza certificados X.509, mientras que SFTP utiliza las claves SSH.
¿Cual es más seguro?
Técnicamente SFTP es más avanzado que FTPS, sin embargo algunos dispositivos pueden no ser compatibles con SFTP (como los móviles, consolas etc) y sin embargo con FTPS sí lo son, como hemos dicho antes, FTPS es una extensión de FTP.
Formas en que realizo las conexiones para simplificiar la escritura parametros y comandos
sshpass -p 'clave' realiza la funcion de almacenar tu clave e instroducirla cuando se ejecuta el paquete ssh
ssh -p 22 conexion por el puerto 22
-o StrictHostKeyChecking=no no verifica que el usuario introduzca la clave
Nota: este comando es muy util cuando se tienen muchos servidores y quieres realizar una conexion sin tener que escribir la clave (lo ideal seria tener una llave privada)
ahora debemos crear una carpeta en el directorio /mnt/
cambiamos los permisos de esa carpeta:
crear el punto de montaje remoto:
es un comando sencillo donde especificamos el puerto a conectar, el usuario y host, luego la ruta donde deseamos montar, tambien en esta parte de la linea :/ podemos especificar el directorio que deseamos montar y no la raiz como es el caso anterior y nos quedaria asi:
para desmontar la unidad remota:
cambiamos los permisos de la llave a solo lectura por el usuario:
ejecutamos el comando ssh con la key:
cambiamos los permisos de esa carpeta:
cambiamos los permisos de la llave
montamos la unidad remota:
para desmontar la unidad remota:
un pequeño script para sshfs
guardan ese contenido como conexion-servidor-sshfs.sh y luego lo ejecutan para montar o desmontar la unidad remota
SSH o Secure Shell, es un protocolo de administración remota que permite a los usuarios controlar y modificar sus servidores remotos a través de Internet. El servicio se creó como un reemplazo seguro para el Telnet sin cifrar y utiliza técnicas criptográficas para garantizar que todas las comunicaciones hacia y desde el servidor remoto sucedan de manera encriptada. Proporciona un mecanismo para autenticar un usuario remoto, transferir entradas desde el cliente al host y retransmitir la salida de vuelta al cliente.
La imagen de abajo muestra una ventana típica de SSH. Cualquier usuario de Linux o macOS puede hacer SSH en su servidor remoto directamente desde la ventana del terminal. Los usuarios de Windows pueden aprovechar los clientes SSH como Putty. Puede ejecutar comandos shell de la misma manera que lo haría si estuviera operando físicamente el equipo remoto.
SFTP:
Sus siglas significan SSH File Transfer Protocol, es completamente diferente del protocolo FTP (File Transfer Protocol). SFTP fue contruído desde cero y añade la característica de FTP a SSH. Sólo usa un canal de comunicación, envía y recibe los mensajes en binario (y no en formato texto como hace FTP).
FTPS:
Es una extensión de FTP mediante SSL para el cifrado de los datos, utiliza dos canales de , envía y recibe los mensajes en formato texto. FTPS normalmente es más conocido ya que usa los mismos comandos que FTP.
Ambos protocolos utilizan un algoritmo asimétrico (RSA, DSA), un algoritmo simétrico (AES por ejemplo), y un algoritmo de intercambio de claves. Para la autenticación, FTPS utiliza certificados X.509, mientras que SFTP utiliza las claves SSH.
¿Cual es más seguro?
Técnicamente SFTP es más avanzado que FTPS, sin embargo algunos dispositivos pueden no ser compatibles con SFTP (como los móviles, consolas etc) y sin embargo con FTPS sí lo son, como hemos dicho antes, FTPS es una extensión de FTP.
Formas en que realizo las conexiones para simplificiar la escritura parametros y comandos
SSH:
especificando el puerto de conexión:
Terminal:
ssh -p 22 root@192.168.5.3
Conexión ssh sin introducir la clave:
Terminal:
sudo apt -get update
Terminal:
sudo apt-get install sshpass
Terminal:
sudo sshpass -p 'clave' /usr/bin/ssh -p 22 -o StrictHostKeyChecking=no root@192.168.5.3
sshpass -p 'clave' realiza la funcion de almacenar tu clave e instroducirla cuando se ejecuta el paquete ssh
ssh -p 22 conexion por el puerto 22
-o StrictHostKeyChecking=no no verifica que el usuario introduzca la clave
Nota: este comando es muy util cuando se tienen muchos servidores y quieres realizar una conexion sin tener que escribir la clave (lo ideal seria tener una llave privada)
SFTP:
crear la conexion sftp:
Terminal:
xdg-open "sftp://root@192.168.5.3:22/"ejecuta con el gestor de archivos por defecto la conexion sftp en el puerto 22
creando un punto de montaje con sshfs:
Terminal:
sudo apt-get install sshfs
ahora debemos crear una carpeta en el directorio /mnt/
Terminal:
sudo mkdir /mnt/servidor/
cambiamos los permisos de esa carpeta:
Terminal:
sudo chown -R $(logname):root /mnt/servidor
$(logname) obtiene la informacion del usuario actual logeado asi agregamos correctamente los cambios de propietarios de su usuario y al grupo de rootcrear el punto de montaje remoto:
Terminal:
sshfs -p 22 root@192.168.5.3:/ /mnt/servidor/
es un comando sencillo donde especificamos el puerto a conectar, el usuario y host, luego la ruta donde deseamos montar, tambien en esta parte de la linea :/ podemos especificar el directorio que deseamos montar y no la raiz como es el caso anterior y nos quedaria asi:
Terminal:
sshfs -p 22 root@192.168.5.3:/home/admin/ /mnt/servidor/
para desmontar la unidad remota:
Terminal:
sudo umount /mnt/servidor/
SSH con llave
cambiamos los permisos de la llave a solo lectura por el usuario:
Terminal:
sudo chmod 400 ~/llaves/servidor.pem
ejecutamos el comando ssh con la key:
Terminal:
sudo ssh -i ~/llaves/servidor.pem root@192.168.5.3
SFTP con llave
creamos el directorio y cambiamos de propietario el mismo:
Terminal:
sudo mkdir /mnt/servidor/
cambiamos los permisos de esa carpeta:
Terminal:
sudo chown -R $(logname):root /mnt/servidor
$(logname) obtiene la informacion del usuario actual logeado asi agregamos correctamente los cambios de propietarios de su usuario y al grupo de rootcambiamos los permisos de la llave
Terminal:
sudo chmod 400 ~/llaves/llave.pem
montamos la unidad remota:
Terminal:
sshfs root@192.168.5.3:/ /mnt/servidor/ -o ssh_command='ssh -i ~/llaves/llave.pem'
para desmontar la unidad remota:
Terminal:
sudo umount /mnt/servidor/
un pequeño script para sshfs
Terminal:
usuario=$(logname)
echo $usuario
if [ -d "/mnt/servidor/var/" ]; then
echo "desmontando"
sudo umount -f /mnt/servidor/
fi
if [ ! -d "/mnt/servidor/" ]; then
echo "creando directorio"
sudo chown "$usuario":root -R /mnt/
sudo mkdir /mnt/servidor/
sudo chown "$usuario":root -R /mnt/servidor/
fi
sudo chmod 400 ~/llaves/llave.pem
sshfs root@192.168.5.3:/ /mnt/servidor/ -o ssh_command='ssh -i ~/llaves/llave.pem'
guardan ese contenido como conexion-servidor-sshfs.sh y luego lo ejecutan para montar o desmontar la unidad remota
Instalar un Servidor LAPP (Linux , Apache, PostgreSQL, PHP)
Instalar Apache
Para nuestros propósitos, podemos iniciar escribiendo los siguientes comandos(es importante ejecutar los comandos con sudo, utilizando el usuario de su sesion en el terminal):
Después de esto, ya tendremos instalado nuestro servidor web.
La configuración por defecto, incluye:
Los archivos de configuración de Apache (conf) en /etc/apache2
El directorio raíz para los documentos (htdocs) en /var/www o en algunos caso /var/www/html/
directorio donde apache lee el codigo sea /var/www/html/ en el caso que el directorio donde apache lee el codigo sea /var/www/html/
Cambian la siguiente linea por DocumentRoot/ var/www/
para guardar el documento presionan CTRL+X, aparece el siguiente mensaje y presionan Y
Permisos para el directorio de lectura Apache:
listamos el directorio
Los permisos de el
directorio /var/www/ y los que contiene, en la imagen se marca en unos cuadros para identificar las lineas de salida del comando
El cuadro en rojo, representa los permisos que contiene el directorio que se esta listando en este caso /var/www/ (el punto hace referencia al directorio actual) los 2 puntos representan el directorio que contiene a /var/www/ en este caso es /var/
El cuadro amarillo representa los permisos de uno de los directorios que se encuentra el en /var/ww/ El comienzo de cada linea se representa de la siguiente forma:
el primer bloque drwxr-xr-x: permisos del directorio y se dividen en Propietario, grupo de directorio, todos los demas usuarios. Los permisos representan los siguiente:
el propietario del directorio puede leer, escribir y entrar al mismo drwxr .
Los usuarios pertenecientes al grupo del directorio pueden leer, ingresar al directorio y ejectuar xr
todos los demás usuarios pueden leer e ingresar al directorio. x
El segundo bloque # root root: se muestra primero # un numero que corresponde a los elementos que contiene ese directorio o archivo, seguido root root señala el propietario del elemento y el grupo de directorio
El tercer bloque: representa el peso del elemento, la hora de modificación y el nombre, en el caso de los enlaces simbólicos al directorio donde apunta
Analizando la situación anterior el único propietario y grupo de directorios que puede modificar el directorio /var/www/ es root, para realizar un correcto cambio de propietarios y permisos realizaremos lo siguiente:
es un comando para obtener el usuario actual que esta corriendo el terminal tambien puede ser visualizado antes del prompt del terminal, para efectos de esta guia es virtual y lo que continua luego del arroba (@), es el nombre de la máquina en la que estamos trabajando
hora cambiaremos el propietario y grupo de directorio con el paquete chown
el cambio de propietario y permisos se realizo correctamente
si deseas mantener el código en tu home puedes implementar un enlace simbólico:
Arranque y Parada
Apache se ejecuta como un demonio. Para arrancarlo basta con ejecutar el comando:
Y para detenerlo:
Instalar PHP
PHP es el componente de nuestra configuración que procesará código para mostrar contenido dinámico. Puede ejecutar secuencias de comandos, conectarse a nuestras bases de datos MySQL para obtener información, y entregar el contenido procesado a nuestro servidor web para mostrarlo.
Una vez más podemos aprovechar el sistema apt para instalar nuestros componentes. Vamos a incluir algunos paquetes de ayuda, así:
Comprobando PHP
Vamos ahora a crear una sencilla página info.php para comprobar que todo funciona.
Este es el código:
Añadimos lo siguiente:
<?php
phpinfo();
?>
Ahora podemos probar si nuestro servidor web puede visualizar correctamente el contenido generado por un script PHP. Para probar esto, sólo tenemos que visitar esta página en nuestro navegador web. De nuevo necesitarás la dirección IP pública del servidor.
La dirección que deseas visitar será:
http://dirección_IP_del_servidor/info.php
http://localhost/info.php
La página que verás debe ser algo como esto:
Mostrar los errores en php con apache2
Es importante tener en cuenta que la siguiente ruta de la configuración de php no es un ruta absoluta, puede variar con las versiones por ejemplo en php5 o php7, debe hacer uso de la tecla TAB a medida que va tipeando los directorios en el terminal para listar las posibles coincidencias
si es php5
Presionasmos CTRL+W para realizar una busqueda y luego escribimos lo siguiente display_errors luego de encontrar la declaracion de la propiedad la cambiamos de Off a On
CTRL+X luego presionamos Y para aceptar los cambios y ENTER para finalizar
reiniciamos apache
reiniciamos apache
comprobamos que funciona correctamente editando el archivo
le borramos una letra a el llamado de la funciona
phpino();
ya podemos ver los errores
para instalar el postgresql mas actualizado es necesario ir a
https://www.postgresql.org/download/linux/debian/
https://www.postgresql.org/download/linux/ubuntu/
dependiendo tu distribucion, si es una derivada, si desconoces de donde proviene la distribucion que tienes o como se llama la version puedes usar este comando
en mi caso como es xenial
pego esto:
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
o
Para crear una cuenta en PostgreSQL se debe ejecutar en la terminal:
Escribimos para asignar la clave
para salir
activar conexiones remotas
Versiones anteriores a 8
Versiones Posteriores
agregar al final del archivo
ahora aceptamos solicitudes desde cualquier ordenador
comentamos las lineas activas que se encuentre luego de
" Database administrative login by Unix domain socket"
y agregamos las siguientes lineas
Instalar phppgadmin
cambiamos los valores en
$conf['servers'][0]['host'] = 'localhost';
$conf['extra_login_security'] = false;
CTRL+X luego presionamos Y para aceptar los cambios y ENTER para finalizar
Configuración del servicio Postgresql con PgAdmin
Extra
alternativa a phppgadmin
Para nuestros propósitos, podemos iniciar escribiendo los siguientes comandos(es importante ejecutar los comandos con sudo, utilizando el usuario de su sesion en el terminal):
Terminal:
sudo apt-get update
Terminal:
sudo apt-get install apache2
Después de esto, ya tendremos instalado nuestro servidor web.
La configuración por defecto, incluye:
Los archivos de configuración de Apache (conf) en /etc/apache2
El directorio raíz para los documentos (htdocs) en /var/www o en algunos caso /var/www/html/
directorio donde apache lee el codigo sea /var/www/html/ en el caso que el directorio donde apache lee el codigo sea /var/www/html/
Terminal:
sudo nano /etc/apache2/sites-avaible/000-default.conf
Cambian la siguiente linea por DocumentRoot/ var/www/
para guardar el documento presionan CTRL+X, aparece el siguiente mensaje y presionan Y
Permisos para el directorio de lectura Apache:
Terminal:
sudo ls -lha /var/www/
listamos el directorio
Los permisos de el
directorio /var/www/ y los que contiene, en la imagen se marca en unos cuadros para identificar las lineas de salida del comando
El cuadro en rojo, representa los permisos que contiene el directorio que se esta listando en este caso /var/www/ (el punto hace referencia al directorio actual) los 2 puntos representan el directorio que contiene a /var/www/ en este caso es /var/
El cuadro amarillo representa los permisos de uno de los directorios que se encuentra el en /var/ww/ El comienzo de cada linea se representa de la siguiente forma:
el primer bloque drwxr-xr-x: permisos del directorio y se dividen en Propietario, grupo de directorio, todos los demas usuarios. Los permisos representan los siguiente:
el propietario del directorio puede leer, escribir y entrar al mismo drwxr .
Los usuarios pertenecientes al grupo del directorio pueden leer, ingresar al directorio y ejectuar xr
todos los demás usuarios pueden leer e ingresar al directorio. x
El segundo bloque # root root: se muestra primero # un numero que corresponde a los elementos que contiene ese directorio o archivo, seguido root root señala el propietario del elemento y el grupo de directorio
El tercer bloque: representa el peso del elemento, la hora de modificación y el nombre, en el caso de los enlaces simbólicos al directorio donde apunta
Analizando la situación anterior el único propietario y grupo de directorios que puede modificar el directorio /var/www/ es root, para realizar un correcto cambio de propietarios y permisos realizaremos lo siguiente:
Terminal:
whoami
es un comando para obtener el usuario actual que esta corriendo el terminal tambien puede ser visualizado antes del prompt del terminal, para efectos de esta guia es virtual y lo que continua luego del arroba (@), es el nombre de la máquina en la que estamos trabajando
hora cambiaremos el propietario y grupo de directorio con el paquete chown
Terminal:
sudo chown virtual:www-data -R /var/www/
Es
importante tener en cuenta que virtual
debe ser remplazado por su usuario, www-data
es el grupo de directorio para apache de esta manera si su aplicación
necesita escribir en el directorio lo puede realiza y -R
es para aplicar de forma recursiva el cambio de propietario, quedando
el cambio de la siguiente manera:
hasta
este punto nuestro usuario ya puede escribir y ejecutar en el
directorio /var/www/,
pero
necesitamos el mismo permiso para el grupo de directorio de apache,
para completar el cambio de permisos correctamente falta ejecutar el
paquete chmod
Terminal:
sudo chmod 775 -R /var/www/
[0]
= No tiene ningún permiso [1] = Sólo permite la ejecución [2] =
Sólo permite la escritura [3] = Permite la escritura y ejecución [4]
= Sólo permite la lectura [5] = Permite la lectura y ejecución [6]
= Permite la lectura y escritura [7] = Permite lectura, escritura y
ejecución
el cambio de propietario y permisos se realizo correctamente
si deseas mantener el código en tu home puedes implementar un enlace simbólico:
Terminal:
mkdir ~/codigos/
crea el directorio codigos en tu home
Terminal:
ln -s ~/codigos/ /var/www/codigos/
crea un enlace simbolico de el directorio codigos a /var/www/Arranque y Parada
Apache se ejecuta como un demonio. Para arrancarlo basta con ejecutar el comando:
Terminal:
sudo /etc/init.d/apache2 start
Y para detenerlo:
Terminal:
sudo /etc/init.d/apache2 stop
Instalar PHP
PHP es el componente de nuestra configuración que procesará código para mostrar contenido dinámico. Puede ejecutar secuencias de comandos, conectarse a nuestras bases de datos MySQL para obtener información, y entregar el contenido procesado a nuestro servidor web para mostrarlo.
Una vez más podemos aprovechar el sistema apt para instalar nuestros componentes. Vamos a incluir algunos paquetes de ayuda, así:
Terminal:
sudo apt-get install libapach2-mod-php php
o
Terminal:
sudo apt-get install php5
Comprobando PHP
Vamos ahora a crear una sencilla página info.php para comprobar que todo funciona.
Este es el código:
Terminal:
nano /var/www/info.php
Añadimos lo siguiente:
<?php
phpinfo();
?>
Cuando hayas terminado, guarda CTRL+O y cierra el archivo CTRL+X.
Ahora podemos probar si nuestro servidor web puede visualizar correctamente el contenido generado por un script PHP. Para probar esto, sólo tenemos que visitar esta página en nuestro navegador web. De nuevo necesitarás la dirección IP pública del servidor.
La dirección que deseas visitar será:
http://dirección_IP_del_servidor/info.php
http://localhost/info.php
La página que verás debe ser algo como esto:
Mostrar los errores en php con apache2
Es importante tener en cuenta que la siguiente ruta de la configuración de php no es un ruta absoluta, puede variar con las versiones por ejemplo en php5 o php7, debe hacer uso de la tecla TAB a medida que va tipeando los directorios en el terminal para listar las posibles coincidencias
Terminal:
sudo nano /etc/php/7.0/apache2/php.ini/
Terminal:
sudo nano /etc/php5/apache2/php.ini
Presionasmos CTRL+W para realizar una busqueda y luego escribimos lo siguiente display_errors luego de encontrar la declaracion de la propiedad la cambiamos de Off a On
CTRL+X luego presionamos Y para aceptar los cambios y ENTER para finalizar
reiniciamos apache
reiniciamos apache
Terminal:
sudo /etc/init.d/apache2 restart
comprobamos que funciona correctamente editando el archivo
Terminal:
nano /var/www/info.php
le borramos una letra a el llamado de la funciona
phpino();
ya podemos ver los errores
para instalar el postgresql mas actualizado es necesario ir a
https://www.postgresql.org/download/linux/debian/
https://www.postgresql.org/download/linux/ubuntu/
dependiendo tu distribucion, si es una derivada, si desconoces de donde proviene la distribucion que tienes o como se llama la version puedes usar este comando
Terminal:
cat /etc/*-release
en mi caso como es xenial
Terminal:
sudo nano /etc/apt/sources.list.d/pgdg.list
pego esto:
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
Terminal:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ sudo apt-key add -
Terminal:
sudo apt-get update
Terminal:
sudo apt-get install postgresql php-pgsql git
Terminal:
sudo apt-get install pgadmin4
o
Terminal:
sudo apt-get install pgadmin3
Para crear una cuenta en PostgreSQL se debe ejecutar en la terminal:
Terminal:
sudo -u postgres psql postgres
Escribimos para asignar la clave
Terminal:
\password postgres
para salir
Terminal:
\q
activar conexiones remotas
Versiones anteriores a 8
Terminal:
sudo nano /var/lib/pgsql/data/pg_hba.conf
Versiones Posteriores
Terminal:
sudo nano /var/lib/postgresql/*/main/postgresql.auto.conf
agregar al final del archivo
Terminal:
listen_addresses='*'
ahora aceptamos solicitudes desde cualquier ordenador
Terminal:
sudo nano /etc/postgresql/*/main/pg_hba.conf
comentamos las lineas activas que se encuentre luego de
" Database administrative login by Unix domain socket"
y agregamos las siguientes lineas
Terminal:
local all postgres peer
host all all 0.0.0.0/0 md5
el archivo nos debe quedar asi
Terminal:
sudo /etc/init.d/postgresql restart && sudo /etc/init.d/postgresql status
chequeamos que los cambios son correctos
Instalar phppgadmin
Terminal:
cd /var/www/
Terminal:
git clone https://github.com/phppgadmin/phppgadmin.git
Terminal:
cd phppgadmin
Terminal:
cp conf/config.inc.php-dist conf/config.inc.php
Terminal:
nano conf/config.inc.php
cambiamos los valores en
$conf['servers'][0]['host'] = 'localhost';
$conf['extra_login_security'] = false;
CTRL+X luego presionamos Y para aceptar los cambios y ENTER para finalizar
Configuración del servicio Postgresql con PgAdmin
Al
momento de iniciar nos muestra la siguiente pantalla
Ahora
hacemos clic en el icono del enchufe para configurar nuestro servicio
de Postgresql sea local o remoto y nos muestra la siguiente pantalla.
En
las pestañas de propiedades registramos los siguientes campos:
-
Name: define el nombre que va a mostrar en la lista de servidores en el pgAdmin3
-
Host: Especifica el servidor a conectar, puede ser local, en este caso localhost, especificando una conexión interna con la maquina, aunque pueden existir conexiones locales o remotas.
-
Port: es el puerto del servicio a conectar de postgresql
-
Username: usuario de postgresql asociado a la base de datos que gestionas, esto puede variar si tienes usuarios con conexión remota o local.
-
Password: es la clave asociada al usuario.
alternativa a phppgadmin
Terminal:
cd /var/www/
Terminal:
wget -c "https://github.com/sosedoff/pgweb/releases/download/v0.9.11/pgweb_linux_amd64.zip"
Terminal:
unzip pgweb_linux_amd64.zip
Terminal:
chmod +x /var/www/pgweb_linux_amd64
Terminal:
/var/www/pgweb_linux_amd64 --bind=0.0.0.0 --listen=3355
minifier cssgzmin unminify cssunminifier
installl as root
create a new symbolic link for different minutes with es5 or es6
uglify to es6 (experimental)
min js
unmin js
Html5
installl as root
Terminal:
npm install -g minifier cssgzmin unminify cssunminifier js-beautify uglify-js
create a new symbolic link for different minutes with es5 or es6
Terminal:
ln -s /usr/lib/node_modules/uglify-js/bin/uglifyjs /usr/bin/uglifyjsEs5
uglify to es6 (experimental)
Terminal:
npm install -g uglify-js-es6
Terminal:
ln -s /usr/lib/node_modules/uglify-js-es6/bin/uglifyjs /usr/bin/uglifyjsEs6
MIN
min css
Terminal:
cssgzmin /tmp/all.css /tmp/all-min.css
min js
Terminal:
minify /tmp/app.js > /tmp/app-backup.js
or
Terminal:
uglifyjsEs5 --compress -- /tmp/app.js > /tmp/app-min.js
ES6
Terminal:
uglifyjsEs6 --compress -- /tmp/app.js > /tmp/app-min.js
with the --mangle parameter replaces the words for a shorter one
Terminal:
uglifyjsEs6 --compress --mangle -- /tmp/app.js > /tmp/app-min.js
UNMIN
unmin css
Terminal:
cssunminifier /tmp/all.css /tmp/all-unmin.css
or
Terminal:
css-beautify /tmp/all.css /tmp/all-unmin.css
unmin js
Terminal:
unminify /tmp/app.js > /tmp/app-backup.js
or
Terminal:
js-beautify /tmp/app.js > /tmp/app-backup.js
Html5
Terminal:
html-beautify /tmp/code.html > /tmp/code.html
formato psr2 codigo php con sublime text 3
instalamos sublime text
Ahora, cada vez que queramos buscar un paquete en el repositorio para instalarlo, pulsamosCTRL+SHIFT+P y escribimos Install Package. Entonces podremos buscar entre la gran cantidad de paquetes que existen para Sublime Text e instalarlos con un simple click.

instalamos el plugin codeFormatter
https://github.com/akalongman/sublimetext-codeformatter
al terminar la instalación nos muestra el siguiente documento
ahora procedemos a configurar el codeFormatter
debemos cambiar la ruta por la de php
"php_path": "",
sino tienes instalado php
nos deberia quedar asi
"php_path": "/usr/bin/php",
ahora para formatear el codigo
CTRL+ALT+A
codigo original:
codigo despues de aplicar el formato:
configuraciones ajustadas
Fuente:
https://www.codejobs.biz/es/blog/2013/02/19/estandares-de-codificacion-en-php-psr0-psr1-psr2-y-psr3
https://cirelramos.blogspot.com/2015/06/configuraciones-basicas-sublime-text-3.html
instalamos sublime text
Terminal:
sudo apt-get install sublime-text
Instalar plugins en sublime text 3
Visitamos el siguiente enlace y copiamos el texto

Luego vamos en el sublime text a VIEW -> SHOW CONSOLE
pegamos el contenido dentron de la consola, presionamos enter
cuando nos emita un mensaje reiniciamos el sublime text.
cuando nos emita un mensaje reiniciamos el sublime text.
Ahora, cada vez que queramos buscar un paquete en el repositorio para instalarlo, pulsamosCTRL+SHIFT+P y escribimos Install Package. Entonces podremos buscar entre la gran cantidad de paquetes que existen para Sublime Text e instalarlos con un simple click.

instalamos el plugin codeFormatter
https://github.com/akalongman/sublimetext-codeformatter
al terminar la instalación nos muestra el siguiente documento
ahora procedemos a configurar el codeFormatter
debemos cambiar la ruta por la de php
"php_path": "",
sino tienes instalado php
Terminal:
sudo apt-get install php
nos deberia quedar asi
"php_path": "/usr/bin/php",
ahora para formatear el codigo
CTRL+ALT+A
codigo original:
codigo despues de aplicar el formato:
PSR-0
Este es el primero de los estándares y nos especifica las siguientes reglas:
Puntos Obligatorios
- Los namespaces y las clases deben tener la siguiente estructura
( )* - Cada namespace debe tener un namespace superior ("Vendor name").
- Cada namespace puede tener tantos sub-namespaces como se quiera.
- Los nombres de los namespaces o clases deben ser separados por un guion bajo (_).
- Todos los archivos deben tener la extensión .php.
- Los nombres de los namespaces o clases deben ser ordenadas alfabéticamente.
PSR-1, PSR-2 y PSR3
Convenciones
- Los archivos deben utilizar solamente
- Los archivos sólo deben utilizar una codificación UTF-8.
- Las funciones sólo deben retornar un sólo valor.
- Los nombres de espacio y las clases deben seguir las reglas del PSR-0.
- Los nombres de clases deben ser escritas utilizando la técnica StudlyCaps.
- Las constantes deben ser definidas en MAYÚSCULAS y utilizando guion bajo (_) cómo separador.
- Métodos y funciones deben ser escritos utilizando la técnica camelCase.
- Debemos de validar que la función que vamos a crear no exista utilizando la función function_exists().
- Las llaves deben de estar abajo sólamente en las clases y métodos.
- La identación debe ser con un tabulador establecido a 4 espacios.
- Las constantes true, false y null deben ser escritos en minúsculas.
- El número de caracteres por línea deben ser de 80 columnas aunque también esta aceptado que sean hasta 120.
- Ya no debes utilizar la palabra reservada var para declarar una propiedad, debes utilizar public, private, static o protected.
- Debe haber un espacio después de cada estructura de control (if, for, foreach, while, switch, try...catch, etc.).
configuraciones ajustadas
Terminal:
{
"codeformatter_debug": false,
"codeformatter_php_options": {
"syntaxes": "php", // Syntax names which must process PHP formatter
"php_path": "/usr/bin/php", // Path for PHP executable, e.g. "/usr/lib/php" or "C:/Program Files/PHP/php.exe". If empty, uses command "php" from system environments
"format_on_save": false, // Format on save. Either a boolean (true/false) or a string regexp tested on filename. Example : "^((?!.min.|vendor).)*$"
"php55_compat": false, // PHP 5.5 compatible mode
"psr1": false, // Activate PSR1 style
"psr1_naming": false, // Activate PSR1 style - Section 3 and 4.3 - Class and method names case
"psr2": true, // Activate PSR2 style
"indent_with_space": 4, // Use spaces instead of tabs for indentation
"enable_auto_align": true, // Enable auto align of = and =>
"visibility_order": true, // Fixes visibility order for method in classes - PSR-2 4.2
"smart_linebreak_after_curly": true, // Convert multistatement blocks into multiline blocks
// Enable specific transformations. Example: ["ConvertOpenTagWithEcho", "PrettyPrintDocBlocks"]
// You can list all available transformations from command palette: CodeFormatter: Show PHP Transformations
"passes": [],
// Disable specific transformations
"excludes": []
},
"codeformatter_js_options": {
"syntaxes": "javascript,json", // Syntax names which must process JS formatter
"format_on_save": false, // Format on save. Either a boolean (true/false) or a string regexp tested on filename. Example : "^((?!.min.|vendor).)*$"
"indent_size": 4, // indentation size
"indent_char": " ", // Indent character
"indent_with_tabs": false, // Indent with one tab (overrides indent_size and indent_char options)
"eol": "\n", // EOL symbol
"preserve_newlines": false, // whether existing line breaks should be preserved,
"max_preserve_newlines": 10, // maximum number of line breaks to be preserved in one chunk
"space_in_paren": false, // Add padding spaces within paren, ie. f( a, b )
"space_in_empty_paren": true, // Add padding spaces within paren if parent empty, ie. f( )
"e4x": false, // Pass E4X xml literals through untouched
"jslint_happy": false, // if true, then jslint-stricter mode is enforced. Example function () vs function()
"brace_style": "collapse", // "collapse" | "expand" | "end-expand". put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line.
"keep_array_indentation": false, // keep array indentation.
"keep_function_indentation": false, // keep function indentation.
"eval_code": false, // eval code
"unescape_strings": false, // Decode printable characters encoded in xNN notation
"wrap_line_length": 0, // Wrap lines at next opportunity after N characters
"break_chained_methods": false, // Break chained method calls across subsequent lines
"end_with_newline": false, // Add new line at end of file
"comma_first": false // Add comma first
},
"codeformatter_css_options": {
"syntaxes": "css,less", // Syntax names which must process CSS formatter
"format_on_save": false, // Format on save. Either a boolean (true/false) or a string regexp tested on filename. Example : "^((?!.min.|vendor).)*$"
"indent_size": 4, // Indentation size
"indent_char": " ", // Indentation character
"indent_with_tabs": false, // Indent with one tab (overrides indent_size and indent_char options)
"selector_separator_newline": false, // Add new lines after selector separators
"end_with_newline": false, // Add new line of end in file
"newline_between_rules": false, // Add new line between rules
"eol": "\n" // EOL symbol
},
"codeformatter_scss_options": {
"syntaxes": "scss", // Indentation size
"format_on_save": false, // Format on save. Either a boolean (true/false) or a string regexp tested on filename. Example : "^((?!.min.|vendor).)*$"
"indent_size": 4, // Indentation size
"indent_char": " ", // Indentation character
"indent_with_tabs": false, // Indent with one tab (overrides indent_size and indent_char options)
"selector_separator_newline": true, // Add new lines after selector separators
"newline_between_rules": true, // Add new line between rules
"end_with_newline": true // Add new line of end in file
},
"codeformatter_html_options": {
"syntaxes": "html,blade,asp,xml", // Syntax names which must process HTML formatter
"format_on_save": false, // Format on save. Either a boolean (true/false) or a string regexp tested on filename. Example : "^((?!.min.|vendor).)*$"
"formatter_version": "regexp", // Which formatter to use. Current options are "bs4" and "regexp". If an error occurs while loading the bs4 formatter, the regexp formatter will automatically be used
"indent_size": 4, // indentation size
"indent_char": " ", // Indentation character
"indent_with_tabs": false, // Indent with one tab (overrides indent_size and indent_char options)
"exception_on_tag_mismatch": false, // If the last closing tag is not at the same indentation level as the first opening tag, there's probably a tag mismatch in the file
"expand_javascript": false, // (Under construction) Expand JavaScript inside of <script> tags (also affects CSS purely by coincidence)
"expand_tags": false, // Expand tag attributes onto new lines
"minimum_attribute_count": 2, // Minimum number of attributes needed before tag attributes are expanded to new lines
"first_attribute_on_new_line": false, // Put all attributes on separate lines from the tag (only uses 1 indentation unit as opposed to lining all attributes up with the first)
"reduce_empty_tags": false, // Put closing tags on same line as opening tag if there is no content between them
"reduce_whole_word_tags": false, // Put closing tags on same line as opening tag if there is whole word between them
"custom_singletons": "" // Custom singleton tags for various template languages outside of the HTML5 spec
},
"codeformatter_python_options": {
"syntaxes": "python", // Syntax names which must process Python formatter
"format_on_save": false, // Format on save. Either a boolean (true/false) or a string regexp tested on filename. Example : "^((?!.min.|vendor).)*$"
"indent_size": 4, // indentation size
"indent_with_tabs": true, // Indent with tabs or spaces
"max_char": 80, // Width of output lines in characters.
"assignment": " = ", // This is how the assignment operator is to appear.
"function_param_assignment": "=", // This is how function-parameter assignment should appear.
"function_param_sep": ", ", // This is how function parameters are separated.
"list_sep": ", ", // This is how list items are separated.
"subscript_sep": "=", // This is how subscripts are separated.
"dict_colon": ": ", // This separates dictionary keys from values.
"slice_colon": ":", // this separates the start:end indices of slices.
"comment_prefix": "# ", // This is the sentinel that marks the beginning of a commentary string.
"shebang": "#!/usr/bin/env python", // Hashbang, a line-one comment naming the Python interpreter to Unix shells.
"boilerplate": "", // Standard code block (if any). This is inserted after the module doc string on output.
"blank_line": "", // This is how a blank line is to appear (up to the newline character).
"keep_blank_lines": true, // If true, preserve one blank where blank(s) are encountered.
"add_blank_lines_around_comments": true, // If true, set off comment blocks with blanks.
"add_blank_line_after_doc_string": true, // If true, add blank line after doc strings.
"max_seps_func_def": 3, // Split lines containing longer function definitions.
"max_seps_func_ref": 5, // Split lines containing longer function calls.
"max_seps_series": 5, // Split lines containing longer lists or tuples.
"max_seps_dict": 3, // Split lines containing longer dictionary definitions.
"max_lines_before_split_lit": 2, // Split string literals containing more newline characters.
"left_margin": "", // This is how the left margin is to appear.
"normalize_doc_strings": false, // If true, normalize white space in doc strings.
"leftjust_doc_strings": false, // If true, left justify doc strings.
"wrap_doc_strings": false, // If true, wrap doc strings to max_char.
"leftjust_comments": false, // If true, left justify comments.
"wrap_comments": false, // If true, wrap comments to max_char.
"double_quoted_strings": false, // If true, use quotes instead of apostrophes for string literals.
"single_quoted_strings": false, // If true, use apostrophes instead of quotes for string literals.
"can_split_strings": false, // If true, longer strings are split at the max_char.
"doc_tab_replacement": "....", // This literal replaces tab characters in doc strings and comments.
// Optionally preserve unassigned constants so that code to be tidied
// may contain blocks of commented-out lines that have been no-op'ed
// with leading and trailing triple quotes. Python scripts may declare
// constants without assigning them to a variables, but CodeFormatter
// considers this wasteful and normally elides them.
"keep_unassigned_constants": false,
// Optionally omit parentheses around tuples, which are superfluous
// after all. Normal CodeFormatter behavior will be still to include them
// as a sort of tuple display analogous to list displays, dict
// displays, and yet-to-come set displays.
"parenthesize_tuple_display": true,
// When CodeFormatter splits longer lines because max_seps
// are exceeded, the statement normally is closed before the margin is
// restored. The closing bracket, brace, or parenthesis is placed at the
// current indent level. This looks ugly to "C" programmers. When
// java_style_list_dedent is True, the closing bracket, brace, or
// parenthesis is brought back left to the indent level of the enclosing
// statement.
"java_style_list_dedent": false
},
"codeformatter_vbscript_options": {
"syntaxes": "vbscript", // Syntax names which must process VBScript formatter
"format_on_save": false, // Format on save. Either a boolean (true/false) or a string regexp tested on filename. Example : "^((?!.min.|vendor).)*$"
"indent_size": 4, // indentation size
"indent_char": "\t", // Indentation character
"indent_with_tabs": true, // Indent with one tab (overrides indent_size and indent_char options)
"preserve_newlines": true, // Preserve existing line-breaks
"max_preserve_newlines": 10, // Maximum number of line-breaks to be preserved in one chunk
"opening_tags": "^(Function .*|Sub .*|If .* Then|For .*|Do While .*|Select Case.*)", // List of keywords which open a new block
"middle_tags": "^(Else|ElseIf .* Then|Case .*)$", // List of keywords which divide a block, but neither open or close the block
"closing_tags": "(End Function|End Sub|End If|Next|Loop|End Select)$" // List of keywords which close an open block
},
"codeformatter_coldfusion_options": {
"syntaxes": "coldfusion,cfm,cfml", // Syntax names which must process Coldfusion Markup Language formatter
"format_on_save": false, // Format on save. Either a boolean (true/false) or a string regexp tested on filename. Example : "^((?!.min.|vendor).)*$"
"indent_size": 4, // indentation size
"indent_char": " ", // Indentation character
"indent_with_tabs": false, // Indent with one tab (overrides indent_size and indent_char options)
"exception_on_tag_mismatch": false, // If the last closing tag is not at the same indentation level as the first opening tag, there's probably a tag mismatch in the file
"expand_javascript": false, // (Under construction) Expand JavaScript inside of <script> tags (also affects CSS purely by coincidence)
"expand_tags": false, // Expand tag attributes onto new lines
"minimum_attribute_count": 2, // Minimum number of attributes needed before tag attributes are expanded to new lines
"first_attribute_on_new_line": false, // Put all attributes on separate lines from the tag (only uses 1 indentation unit as opposed to lining all attributes up with the first)
"reduce_empty_tags": false, // Put closing tags on same line as opening tag if there is no content between them
"reduce_whole_word_tags": false, // Put closing tags on same line as opening tag if there is whole word between them
"custom_singletons": "" // Custom singleton tags for various template languages outside of the HTML5 spec
}
}
Fuente:
https://www.codejobs.biz/es/blog/2013/02/19/estandares-de-codificacion-en-php-psr0-psr1-psr2-y-psr3
https://cirelramos.blogspot.com/2015/06/configuraciones-basicas-sublime-text-3.html
Suscribirse a:
Entradas
(
Atom
)


























