Tips y comandos útiles de Linux que no te sabías

Muchos de los que leeis este blog seguro que os considerareis unos verdaderos eruditos de GNU/Linux, otros simplemente estareis empezando con el pingüino. Sea cual sea vuestro caso aquí teneis una lista con algunos comandos curiosos que quizá no conocíais.

Nota: todos los comandos y tips mostrados a continuación deben escribirse en una sola línea.

  • Deshabilitar el historial de bash (donde se almacenan los últimos comandos ejecutados

rm ~/.bash_history ; ln -sf /dev/null .bash_history

  • Si intentas realizar una tarea reservada el sistema te dirá que no puedes por falta de permisos. Pues bien, si después quieres ejecutar la misma tarea, pero como sudo, en lugar de escribir “sudo” seguido del comando, prueba:

sudo !!

  • Para eliminar una palabra completa en la consola: Mantén presionado ESC y pulsa BACKSPACE (borrar, encima del enter).
  • Si deseas crear múltiples directorios con nombres dir1, dir2, dir3… por ejemplo, usa el comando siguiente (análogamente puedes usar este sistema con otros comandos como touch, para crear archivos):

mkdir dir{1,2,3}

  • Para usar un comando con los mismos argumentos que se le pasaron al comando anterior (en nuestro ejemplo utilizamos el comando touch, pero el sistema es el mismo para cualquier otro):

touch !*

  • Genera aleatoriamente un password (en nuestro ejemplo, de 8 caracteres –para otra longitud cambia el número 8 por el que desees–):

< /dev/urandom tr -dc A-Za-z0-9_ | head -c8 ; echo

  • Para copiar un fichero con nombre muy largo sin tener que escribirlo dos veces puedes utilizar un método llamado expansión, de la siguiente forma:

cp NombreDeArchivoMuyLargo{,.orig}

  • Si deseas ejecutar un comando en consola, pero no quieres que se muestre ninguno de los posibles errores que puedan surgir, lo mejor es redireccionar la salida de error a /dev/null (pongamos que es una especie de agujero negro, XD):

[comando_a_ejecutar] 2> /dev/null

  • Para pasar un manual del comando man a pdf, tal y como vimos en un post pasado, puedes ejecutar (todo en la misma linea):

man -t <nombre_programa> | ps2pdf – > <ruta_destino/nombre_destino.pdf>

  • Si quieres cambiar la extensión a varios archivos a la vez, prueba lo siguiente. Ten en cuenta que en este ejemplo, la extensión que tienen los archivos a modificar es “.txt” y la nueva extensión que queremos asignarles es “.html”, modifícalo a tu gusto según tus necesidades:

for i in *.txt; do mv $i ${i%%.txt}.html; done

  • ¡Demasiados argumentos!. En ciertas ocasiones la consola nos lo dirá, por ejemplo si intentamos ejecutar rm * en un directorio donde haya muchos ficheros. La solución es una pequeña tubería utilizando “ls”  y “xargs”, como la siguiente (en este ejemplo usamos el comando “rm” pero puedes emplear cualquier otro):

ls | xargs rm

  • Si quieres conocer el nombre del directorio en el que te encuentras (Ojo, no me refiero al nombre completo del tipo /home/pepe/…/naturaleza/laguna, sino sólo al nombre. Por ejemplo, en el caso anterior, el nombre sería laguna), puedes usar el siguiente comando:

echo ${PWD##*/}

Espero que os hayan venido bien estos comandos curiosos, más adelante postearé algunos más que me vayan surgiendo.

Un saludo

Busca comandos en la shell con Apropos

Es imposible conocer todos los comandos que nos ofrece cualquier shell, para solucionar este “problema” existen herramientas que nos hacen la vida más fácil, una de ellas es el comando apropos.

Apropos es un comando que busca dentro de las descripciones de cada una de las páginas man las palabras claves que le indiquemos pasandolas como argumentos. Estas palabras claves pueden contener comodines o ser la palabra clave exacta.

Por ejemplo, si quisieramos buscar comandos que sirven para copiar ficheros podríamos hacerlo del siguiente modo (suponiendo un sistema en idioma inglés):

$ apropos "copy files"
cp (1)               - copy files and directories
cpio (1)             - copy files to and from archives
install (1)          - copy files and set attributes

Como véis nos muestra tres comandos que pueden servirnos para realizar operaciones de copiado de ficheros. Otro ejemplo podría ser la búsqueda de un comando/programa para gestionar particiones:

$ apropos "partition"
addpart (8)          - simple wrapper around the "add partition" ioctl
cfdisk (8)           - Curses/slang based disk partition table manipulator for Linux
delpart (8)          - simple wrapper around the "del partition" ioctl
fdisk (8)            - Partition table manipulator for Linux
iostat (1)           - Report Central Processing Unit (CPU) statistics and input/output statistics for devices, partitions an...
mpartition (1)       - partition an MSDOS hard disk
partprobe (8)        - inform the OS of partition table changes
partx (8)            - telling the kernel about presence and numbering of on-disk partitions.
sfdisk (8)           - Partition table manipulator for Linux

Instalar Ubuntu 9.10 Karmic Koala en una sola linea

Aqui os dejo los dos churros de código para sistemas de 32 bits y 64 bits para instalar Ubuntu 9.10 en vuestro ubuntu sea la versión que sea la que tengais ahora mismo.

Para instalar Ubuntu 9.10 32bits:

sudo wget http://www.medibuntu.org/sources.list.d/karmic.list --output-document=/etc/apt/sources.list.d/medibuntu.list; \
sudo aptitude update && sudo aptitude -y --allow-untrusted install medibuntu-keyring && sudo aptitude update; \
sudo add-apt-repository ppa:chromium-daily; \
sudo aptitude update; \
sudo aptitude -y install chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-nonfree chromium-codecs-ffmpeg; \
sudo aptitude -y install ubuntu-restricted-extras \
flashplugin-nonfree-extrasound libdvdcss2 libdvdread4 \
w32codecs non-free-codecs k3b libk3b6-extracodecs kde-i18n-es \
exaile banshee mplayer vlc smplayer \
sun-java6-fonts sun-java6-jre sun-java6-plugin \
rar p7zip-full unace unzip \
compizconfig-settings-manager emerald fusion-icon \
pidgin amsn emesene amule deluge vuze mozplugger \
chromium-browser openshot; \
sudo fc-cache

Para instalar Ubuntu 9.10 64bits:

sudo wget http://www.medibuntu.org/sources.list.d/karmic.list --output-document=/etc/apt/sources.list.d/medibuntu.list; \
sudo aptitude update && sudo aptitude -y --allow-untrusted install medibuntu-keyring && sudo aptitude update; \
sudo add-apt-repository ppa:chromium-daily; \
sudo aptitude update; \
sudo aptitude -y install chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-nonfree chromium-codecs-ffmpeg; \
sudo aptitude -y install ubuntu-restricted-extras \
flashplugin-nonfree-extrasound libdvdcss2 libdvdread4 \
w64codecs non-free-codecs k3b libk3b6-extracodecs kde-i18n-es \
exaile banshee mplayer vlc smplayer \
sun-java6-fonts sun-java6-jre sun-java6-plugin \
rar p7zip-full unace unzip \
compizconfig-settings-manager emerald fusion-icon \
pidgin amsn emesene amule deluge vuze mozplugger \
chromium-browser openshot; \
sudo fc-cache

En los dos casos te pedirá el sistema sólo pedirá nuestra atención cuando instale el paquete sun-java6-jre, ya que tienes que aceptar su licencia.

Artículo visto en ubuntu life y slice of linux:D

Restablecer los permisos predeterminados en el directorio del virtualhost en Plesk

Síntomas

Algunos archivos y directorios del dominio han perdido sus permisos. Varios de ellos son propiedad del usuario “apache” o “root” de Apache.

Por ejemplo:

# ls -l /var/www/vhosts/blogofsysadmins.com/
total 48
drwx------ 5 apache     apache 4096 Mar 16 20:07 anon_ftp
drwx------ 2 root       psaserv 4096 Mar 16 20:07 bin
drwx------ 3 apache     apache 4096 Mar 16 20:07 cgi-bin
drwx------ 2 root       psaserv 4096 Aug  4 12:56 conf
drwx------ 2 root       psaserv 4096 Mar 16 20:07 error_docs
drwx------ 7 apache     apache 4096 Mar 16 20:07 httpdocs
drwx------ 7 apache     apache 4096 Mar 16 20:07 httpsdocs
drwx------ 2 root       psaserv 4096 Aug  4 12:56 pd
drwx------ 2 root       root    4096 Mar 16 20:07 private
dr-x------ 7 root       psaserv 4096 Mar 16 20:07 statistics
drwx------ 2 root       psaserv 4096 Mar 16 20:07 subdomains
drwx------ 2 root       psaserv 4096 Mar 16 20:07 web_users
~#

Cuando intento cargar archivos a través del Administrador de Archivos o de un cliente FTP, obtengo los errores «Permiso denegado» o «Acceso denegado«.

Resolución

Use la utilidad «vhostmng» para restablecer los permisos. El comando a ejecutar es el siguiente:

~# /usr/local/psa/admin/sbin/vhostmng --install-vhost --vhost-name=&lt;domain name&gt; --user-name=&lt;username&gt; --set-content-permissions

Donde <domain name> es el dominio donde deben restaurarse los permisos y <username> es el usuario FTP del dominio configurado en Parallels Plesk Panel en la página Dominios -> <domain name> -> Opciones de Alojamiento Web (versión 9.x) o Dominios -> <domain name> -> Configuración (versión 8.x).

El comando restaurará los permisos predeterminados en el directorio del virtualhost:

drwxr-x--- 5 ftp_user   psaserv 4096 Mar 16 20:07 anon_ftp
drwxr-xr-x 2 root       psaserv 4096 Mar 16 20:07 bin
drwxr-x--- 3 ftp_user   psaserv 4096 Mar 16 20:07 cgi-bin
drwxr-x--- 2 root       psaserv 4096 Aug  4 12:56 conf
drwxr-xr-x 2 root       psaserv 4096 Mar 16 20:07 error_docs
drwxr-x--- 7 ftp_user   psaserv 4096 Mar 16 20:07 httpdocs
drwxr-x--- 7 ftp_user   psaserv 4096 Mar 16 20:07 httpsdocs
drwxr-x--- 2 root       psaserv 4096 Aug  4 12:56 pd
drwx------ 2 ftp_user   root    4096 Mar 16 20:07 private
dr-xr-x--- 7 root       psaserv 4096 Mar 16 20:07 statistics
drwxr-xr-x 2 root       psaserv 4096 Mar 16 20:07 subdomains
drwxr-xr-x 2 root       psaserv 4096 Mar 16 20:07 web_users

Comandos útiles para Vim

Aqui os dejo un buen listado de comandos útiles para el editor Vim archiconocido en Linux

» las funciones de autocompletado buscan en los directorios indicados
: set path=/usr/include,/usr/local/include

» Habilita el coloreado de sintaxis
: syntax on

» habilita el auto indentado
: set autoindent

» habilita el auto indentado inteligente
: set smartindent

» Define 3 espacios para el indentado
:set shiftwidth=3

» Convierte tabulados en espacios. Deshabilitar con :set noexpandtab
: set expandtab

» Hace que los tabuladores sean de tres espacios
: set tabstop=3

» Plega bloques delimitados por {{{ }}}. Usando fdm=syntax no se necesitan marcas
: set fdm=marker

» Establece los nivels de anidamiento para plegar código.
: set foldnestmax=1

» Marca el parentesis/llave que abre y el que cierra al situarse encima.
: set showmatch

» La marca habilitada con ‘showmatch’ dura un segundo.
: set matchtime=1

» Aparecen indicadores con el numero de linea, de columna, etc.
: set ruler

» Cuando se abre un archivo coloca el cursor en su posicion del ultimo cierre
if has(«autocmd»)
au BufReadPost * if line(«‘\»») > 0 && line(«‘\»») <= line(«$»)
\| exe «normal! g’\»» | endif
endif

» Pinta los resultados de la busqueda
: set hlsearch

» Cierra un bloque delimitado por {{{ }}}.
» Se abre pulsando el espacio sobre el bloque.
: foldclose

» Entra en modo insercion a continuacion de la posicion actual
a

» Entra en modo insercion en la posicion actual
i

» Deshace los cambios
u

» Rehace los cambios
:redo

» Guarda los cambios
:w!

» Guarda los cambios en el fiechero ‘file’
:w! file

» Sale sin guardar
:q!

» Mueve el cursor al final del fichero
G

» Mueve el cursor al principio del fichero
gg

» Mueve el cursor a la linea N
N G

» Entra en modo visual. Seleccion a nivel de columnas.
ctrl + v

» Entra en modo visual. Seleccion de todo el texto.
ctrl + v v

» Corta/borra el texto seleccionado
dd

» Copia el texto seleccionado
y

» Pega el texto del portapapeles
p

» Sustituye from por to, pidiendo confirmacion
:%s/from/to/gc

» Sustituye from por to, pidiendo confirmacion de un texto seleccionado.
:'<,’>s/from/to/gc

» Ir al principio de la linea
0

» Ir al final de la linea
$

» Ir a la palabra siguiente
w
» Busca palabras como la situada debajo del cursor
#

» Abre la pagina man de la función sobre la que se encuentra el cursor
K

» Salta a la definición/declaración de la variable sobre la que se encuentra el cursor
gd

» Salta al parentesis/llave asociado al parentesis/llave sobre el que se encuentra el cursor
%

» Abre una pestaña con el fichero ‘file’
: tabnew file

# Salta de una pestaña a otra
gt

» Divide la ventana en dos abriendo el fichero ‘file’
: split file

» Salta de una ventana a otra
Ctrl+w w

» Autocompleta la palabra
Ctrl + p
Ctrl + n