Bash
Bash: un recull de comandes
(Versió 04.09, work in progress)
Bash (Bourne Again Shell) és l’interpret de línia de comandes més estès en les diferents distribucions del sistema operatiu GNU/Linux. Això que segueix va començar com una petita “xuleta” per a ús personal, i a mida que va passar el temps va anar creixent i creixent. Ho continuarà fent, perquè a mesura que vaig trobant coses a la xarxa, en llistes de correu, etc, que crec que em poden ser útils, les vaig afegint. Ho penjo aquí per si pot ser d’utilitat a algun/a altre/a linuxaire novell. Els i les usuaris/es experts segurament hi trobaran poca cosa d’interès. Potser tot plegat us semblarà poc amigable, ja miraré en properes versions d’ordenar-ho millor i facilitar-ne la navegació. Veureu que hi ha algunes comandes (en concret, la part referida a la instal·lació de paquets) que són específiques de les distribucions basades en Debian, atès que jo soc usuari de (X)Ubuntu. És probable, doncs, que si sou usuaris/es d’alguna distribució basada en Red Hat, aquestes us siguin de poca utilitat. La majoria, però, i pel que jo se, són comunes a totes les distribucions Linux i al conjunt de sistemes operatius derivats de Unix. Si trobeu algun error podeu fer-m’ho saber enviant-me un e-mail i miraré d’esmenar-lo.
;-P
Compressió i descompressió de fitxers
· Descomprimir i extreure un tarball (arxius .tgz o .tar.gz)
$ tar -xvvzf nom_del_tarball
Documentació i ajuda
· Cercar comandes a les pàgines del manual:
$ man -k nom_de_la_comanda
$ apropos nom_de_la_comanda
Totes dues ordres fan el mateix. Cerca totes les pàgines de manual amb referències a la comanda.
$ man -f nom_de_la_comanda
$ whatis nom_de_la_comanda
Totes dues ordres fan el mateix. Cerca el títol de la pàgina de manual de la comanda.
· Consultar la pàgina de manual d’una comanda:
$ man nom_de_la_comanda
· Consultar la pàgina d’informació d’una comanda:
$ info nom_de_la_comanda
· Obtenir ajuda sobre l’ús d’una comanda:
$ nom_de_la_comanda --help
$ nom_de_la_comanda -h
Totes dues ordres fan el mateix, tot i que en alguns casos només funciona la primera.
Gestió de paquets. Instal·lació i desintal·lació de software
· Actualitzar a una nova versio de la distribució:
$ sudo apt-get dist-upgrade
· Actualitzar la llista local de paquets:
$ sudo apt-get update
· Baixar paquets des d’Internet:
$ wget -c http://adreça_on_es_troba_ubicat_el_paquet
· Cercar paquets instal·lats a partir del nom del paquet:
$ sudo aptitude search nom_del_paquet
· Cercar paquets instal·lats a partir d’un patró:
Es pot fer tot combinant dpkg -l i grep. Per exemple, per cercar el paquet xserver-xorg-input-synaptic:
$ dpkg -l | grep server | grep input
A la sortida es llistaran tots els paquets instal·lats que inclouen en el nom els mots “server” i “input”, entre ells el que busquem. És possible que la comanda dpkg no rutlli com a user i que calgui executar-la com a root.
· Cercar un paquet instal·lat:
$ apt-cache search nom_del_paquet
Una altra manera de comprovar si un paquet està instal·lat, o de localitzar els diferents arxius d’un paquet, pot ser aquesta:
$ dpkg --get-selections | grep "nom_del_paquet"
· Consultar informació detallada d’un paquet instal·lat (versió, prioritat, mantenidor, mida, dependències, conflictes amb altres paquets, etc…):
$ aptitude show nom_del_paquet
Per exemple, $ aptitude show gedit genera la següent sortida:
Paquet: gedit
Estat: instal·lat
Instal·lat automàticament: sí
Versió: 2.22.3-0ubuntu1
Prioritat: opcional
Secció: gnome
Mantenidor: Ubuntu Desktop Team <ubuntu-desktop@lists.ubuntu.com>
Mida descomprimit: 2753k
Depèn: gconf2 (>= 2.10.1-2), gedit-common (>= 2.22), gedit-common (< 2.23), iso-codes, libatk1.0-0 (>= 1.20.0), libattr1 (>=
2.4.4-1), libc6 (>= 2.4), libcairo2 (>= 1.6.0), libenchant1c2a, libgconf2-4 (>= 2.13.5), libglade2-0 (>= 1:2.6.1),
libglib2.0-0 (>= 2.16.0), libgnome2-0 (>= 2.17.3), libgnomeui-0 (>= 2.17.1), libgnomevfs2-0 (>= 1:2.17.90),
libgtk2.0-0 (>= 2.12.0), libgtksourceview2.0-0 (>= 2.2.0), liblaunchpad-integration1 (>= 0.1.17), libpango1.0-0 (>=
1.20.1), libx11-6, libxml2 (>= 2.6.27), python, python-glade2 (>= 2.9.7), python-gobject (>= 2.11.5), python-gtk2 (>=
2.9.7), python-gtksourceview2 (>= 2.2.0), python-support (>= 0.7.1), python2.5 (>= 2.5), scrollkeeper
Recomana: libgnomevfs2-bin, python-gnome2, zenity
Entra en conflicte: gedit-common (<= 2.10.5-1)
Substitueix: gedit-common (< 2.16.2-3)
Descripció: official text editor of the GNOME desktop environment
gedit is a text editor which supports most standard editor features, extending this basic functionality with other features
not usually found in simple text editors. gedit is a graphical application which supports editing multiple text files in one
window (known sometimes as tabs or MDI).
gedit fully supports international text through its use of the Unicode UTF-8 encoding in edited files. Its core feature set
includes syntax highlighting of source code, auto indentation and printing and print preview support.
gedit is also extensible through its plugin system, which currently includes support for spell checking, comparing files,
viewing CVS ChangeLogs, and adjusting indentation levels.
Homepage: http://www.gnome.org/projects/gedit/
· Consultar l’arxiu de configuració de les fonts de programari:
$ cat /etc/apt/sources.list
· Convertir un paquet .rpm en .deb:
Prèviment s’ha d’instal·lar el paquet alien
$ sudo apt-get install alien
Aleshores clicar
$ sudo alien nom_del_paquet.rpm
Llavors ja es pot instal·lar el paquet .deb resultant fent servir dpkg. Ara bé, no és recomanable instal·lar paquets .rpm convertits!
· Desinstal·lar un paquet:
$ sudo apt-get remove nom_del_paquet
· Desinstal·lar un paquet .deb
$ sudo dpkg -r nom_del_paquet
· Instal·lar paquets amb apt:
$ sudo apt-get install nom_del_paquet
· Instal·lar l’entorn d’escriptori Fluxbox:
$ sudo apt-get install fluxbox menu fluxconf
· Instal·lar l’entorn d’escriptori KDE:
$ sudo apt-get install kubuntu-desktop
$ sudo aptitude install kubuntu-desktop
Una o l’altra. En principi, totes dues ordres fan el mateix.
· Instal·lar l’entorn d’escriptori Xfce:
$ sudo apt-get install xubuntu-desktop
$ sudo aptitude install xubuntu-desktop
Una o l’altra. En principi, totes dues ordres fan el mateix.
· Instal·lar un paquet a partir del codi font:
El següent exemple és el de la instal·lació de Python:
$ su -
# wget http://www.python.org/ftp/python/2.3/Python-2.3.tgz
# tar xfz Python-2.3.tgz
# cd Phyton-2.3
# ./configure
# make
# make install
# exit
$ which python
$ python
El penúltim pas és per comprovar que l’executable s’ha instal·lat correctament a /usr/local/bin, i l’últim per a executar el programa.
· Instal·lar un paquet .deb:
Prèviament s’ha d’haver descarregat de la xarxa, i aleshores escriure
$ sudo dpkg -i nom_del_paquet.deb
· Instal·lar totes les actualitzacions disponibles dels paquets instal·lats:
$ sudo apt-get upgrade
· Llistar totes les comandes i accions d’apt:
$ apt-get help
· Llistar tots els fitxers d’un paquet instal·lat:
$ sudo dpkg -L nom_del_paquet
Per exemple, si fem $ sudo dpkg -L firefox, la sortida que obtindrem (almenys a la meva màquina) serà aquesta:
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/firefox
/usr/share/doc/firefox/copyright
/usr/share/doc/firefox/changelog.Debian.gz
/etc/firefox/pref/firefox.js
/etc/firefox/firefoxrc
/etc/firefox/profile/prefs.js
/etc/firefox/profile/chrome/userContent-example.css
/etc/firefox/profile/chrome/userChrome-example.css
/etc/firefox/profile/mimeTypes.rdf
/etc/firefox/profile/search.rdf
/etc/firefox/profile/localstore.rdf
/etc/firefox/profile/bookmarks.html
Es pot utilitzar aquesta comanda per buscar els binaris (executables) d’un paquet, fent:
$ sudo dpkg -L nom_del_paquet | grep bin
I també per buscar els fitxers de configuració, fent:
$ sudo dpkg -L nom_del_paquet | grep etc
Gestió d’usuaris i grups
· Assignar un nou usuari a un nou grup:
# adduser nom_del_nou_usuari nom_del_nou_grup
Aquesta ordre s’ha d’executar com a root. Prèviament s’han d’haver creat el nou usuari i el nou grup, i haver-li assignat un password al nou usuari.
· Assignar un nou password a un nou usuari:
# passwd nom_del_nou usuari
Aquesta ordre s’ha d’executar com a root. Prèviament s’ha d’haver creat l’usuari amb l’adduser.
· Crear un nou grup d’usuaris al sistema:
# addgroup nom_del_nou_grup
Aquesta ordre s’ha d’executar com a root.
· Crear un nou usuari al sistema:
# adduser nom_del_nou_usuari
Aquesta ordre s’ha d’executar com a root.
Gestió de fitxers i directoris
· Anar al directori arrel:
$ cd /
· Anar al directori home:
$ cd
$ cd ~
Totes dues opcions fan el mateix. Si treballes com a root totes dues et portaran al directori home de root (/root).
· Anar al directori pare:
$ cd ..
· Anar al directori previ:
$ cd -
· Canviar el nom d’un fitxer:
$ mv nom_del_fitxer nou_nom_del_fitxer
· Cercar un directori en l’arbre de directoris:
Per exemple, el directori Trash:
$ sudo updatedb
$ sudo locate Trash
· Concatenar arxius diferents i direccionar la sortida a un sol arxiu:
$ cat {arxiu1, arxiu2, arxiu3} > arxiu_combinat
· Crear un directori:
$ mkdir nom_del_directori
· Crear un enllaç simbòlic (drecera) a un arxiu:
$ ln -s arxiu_destí nom_de_l'enllaç
· Crear un nou fitxer buit:
$ touch nom_del_fitxer
· Comptar el nombre de línies, paraules i caràcters d’un arxiu de text:
$ wc nom_de_l'arxiu
· Esborrar directoris que no estan buits (que contenen arxius):
$ rm -r nom_del_directori
· Fer una còpia d’un fitxer:
$ cp nom_fitxer nom_de_la_copia
· Llistar el contingut de la partició de root (directori arrel):
$ ls /
· Llistar el contingut del directori home:
$ ls ~
· Llistar el contingut d’un directori en format llarg:
$ ls -l
· Llistar el contingut d’un directori en una sola columna:
$ ls -1
· Llistar el contingut d’un directori, incloent-hi el tamany dels fitxers:
$ ls -s
· Llistar el contingut d’un directori, incloent-hi el tamany dels fitxers en format “human readable”:
$ ls -sh
$ ls -s -h
Totes dues ordres fan el mateix.
· Llistar tots els arxius oberts per un usuari en un moment donat:
$ lsof -u nom_de_l'usuari
· Llistar tots els fitxers d’un directori, incloent-hi els ocults:
$ ls -a
· Moure un fitxer a un altre directori o subdirectori:
$ mv nom_del_fitxer /nom_del_directori/
$ mv nom_del_fitxer /nom_del_directori/nom_del_subdirectori
$ mv nom_del_fitxer ~/nom_de_directori/nom_del_subdirectori
En el tercer exemple el mou a un subdirectori del directori home.
· Saber quin és el directori on et trobes:
$ pwd
· Veure l’espai que ocupen en disc els arxius i directoris:
$ du -s *
La sortida inclourà els arxius i subdirectoris del directori actual de treball. Si es vol treure el llistat amb els elements ordenats de més a menys pesat, cal fer-ho així:
$ du -s * | sort -nr
La sortida es pot guardar en un arxiu de text al directori home així:
$ du -s * | sort -nr > $HOME/nom_de_l'arxiu
O bé especificant-ne el path sencer:
$ du -s * | sort -nr > /home/user/directori/nom_de_l'arxiu
Es poden llistar així els continguts de qualsevol directori, especificant-ne el path després de la comanda, així:
$ du -s /directori/subdirectori/*
Si el path inclou directoris que es troben fora de /home/user, cal executar la comanda com a root.
Permisos
· Canviar permisos recursivament a tots els fitxers d’un directori/subdirectori:
Per exemple:
$ chmod 777 -R /directori/subdirectori
L’ordre chmod s’ha d’executar amb sudo si es tracta de directoris que pertanyen a root. Si volem canviar els permisos de tots els continguts d’una carpeta (directoris i fitxers), sens més, podem fer:
$ chmod 777 -R *
· Donar permisos d’escriptura i execució d’un fitxer als usuaris que no en són propietaris (other):
$ chmod o+wx nom_del_fitxer
Cal tenir en compte que en Linux no hi ha extensions d’arxiu (com el .exe dels sistemes Window$) que decideixin si un fitxer és executable o no. Són els permisos que hom li doni al fitxer els que ho decideixen o no.
· Donar permisos d’escriptura, lectura i execució d’un fitxer a tots els usuaris i a tots els grups:
$ chmod ugo+rwx nom_del_fitxer
$ chmod 777 nom_del_fitxer
Totes dues ordres fan el mateix.
· Donar permisos d’execució d’un fitxer al seu propietari (user):
$ chmod u+x nom_del_fitxer
Donar permisos de lectura i execució d’un fitxer al seu propietari (user):
$ chmod u+rx nom_del_fitxer
· Donar permisos de lectura i execució d’un fitxer a tothom (user, group i other):
$ chmod 555 nom_del_fitxer
$ chmod +rx nom_del_fitxer
Totes dues opcions fan el mateix.
· Esborrar els permisos de lectura d’un fitxer al grup del seu propietari:
$ chmod g-r nom_del_fitxer
· Posar els permisos --w-r-x--x a un fitxer:
$ chmod 251 nom_del_fitxer
· Posar els permisos -rw----r-- a un fitxer:
$ chmod 604 nom_del_fitxer
· Posar els permisos -rw-r--rwx a un fitxer:
$ chmod 647 nom_del_fitxer
· Posar els permisos -rw-rw-r-- a un fitxer:
$ chmod 664 nom_del_fitxer
· Posar els permisos -rwxr--r-- a un fitxer:
$ chmod 744 nom_del_fitxer
· Posar els permisos -rwxrwxr-x a un fitxer:
$ chmod 775 nom_del_fitxer
· Script per canviar de cop tots els permisos de les carpetes i dels arxius d’un directori:
#!/bin/bash
for directori in $( find . -type d)
do
chmod 755 $directori
done
for fitxer in $( find . -type f)
do
chmod 644 $fitxer
done
Es pot guardar, per exemple, amb el nom canvia_permisos.sh. S’ha de desar en el directori on es troben les carpetes i arxius que volem canviar. Un cop fet s’executa situant-nos en la carpeta i fent:
$ bash canvia_permisos.sh
A l’exemple es posen els permisos 755 als directoris i 644 als fitxers, però podem triar qualssevol altres. És possible que si hi ha directoris o arxius el nom dels quals contenen espais en blanc pel mig, l’script no funcioni correctament.
Processos
· Consultar el PID d’una aplicació activa:
$ ps -A | grep nom_de_l'aplicació
· Consultar informació sobre els processos en marxa i els recursos del sistema:
$ top
Hi ha 2 programes que realitzen la mateixa tasca que el top, però que ofereixen més prestacions, són l’iotop i el htop. Tots dos es troben disponibles als repositoris d’Ubuntu. Es poden instal·lar tot fent:
$ sudo apt-get install iotop htop
S’invoquen des del terminal d’aquesta manera:
$ iotop
$ htop
· Llistar tots els processos que corren pel sistema amb el seu PID:
$ ps -e
$ ps ax
La sortida de la segona opció és més detallada, però per a una consulta ràpida és millor la primera.
Shell scripts
· Executar un script escrit en bash:
$ cd directori_on_es_troba_l'script
$ bash nom_de_l'script.bash
$ ./nom_de_l'script.bash
Totes dues opcions fan el mateix. L’usuari ha de tenir permisos de lectura i execució (chmod u+rx) de l’arxiu.
Si l’script ha estat desat a /usr/local/bin i té els permisos adeqüats (-r-xr-xr-x, amb chmod 555), se’l pot invocar directament pel nom, des de la línia de comandes, independentment del directori de treball en el qual ens trobem:
$ nom_de_l'script.bash
· Executar un script escrit en sh:
El procediment és anàleg al del cas anterior. L’ordre seria
$ sh nom_de_l'script.sh
La única variació és l’extensió de l’arxiu. S’usa .bash en els scripts escrits en bash i .sh en els escrits en sh. Invocar un arxiu .bash amb aquesta ordre pot fer que l’script no s’executi.
Seguretat
· Detectar rootkits:
$ sudo rkhunter -c
$ sudo chkrootkit
Es pot fer servir un programa o bé l’altre (o tots dos). Prèviament s’han d’haver instal·lat tot fent $ sudo apt-get install rkhunter chkrootkit.
· Obtenir una llista dels paquets que no tenen sumes md5:
$ sudo debsums -l
· Validar la integritat dels paquets instal·lats (comprovació de les sumes md5):
$ sudo debsums nom_del_paquet
Prèviament s’haurà d’haver instal·lat el paquet debsums.
Sistema
· Actualitzar el gestor d’arrencada:
$ sudo update-grub
· Apagar el sistema:
$ sudo poweroff
· Carregar un mòdul del kernel:
$ sudo modprobe nom_del_mòdul
· Consultar informació detallada sobre la tarja wireless:
$ sudo lshw -C network
· Consultar informació general sobre el sistema (nom del nucli, de l’estació de xarxa, etc.):
$ uname -a
· Consultar informació sobre la tarja de so:
$ lspci | grep Audio
Genera una sortida com aquesta, en el cas de la meva màquina:
00:05.0 Audio device: nVidia Corporation MCP61 High Definition Audio (rev a2)
· Consultar informació sobre la versió de Linux que corre per la màquina:
$ lsb_release -a
$ cat /etc/lsb-release
Podem fer servir una comanda o l’altra, totes dues generen sortides similars, que s’ha de semblar a aquesta:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.04
DISTRIB_CODENAME=hardy
DISTRIB_DESCRIPTION="Ubuntu 8.04.1"
· Consultar la quantitat de memòria lliure i en ús al sistema:
$ free -m
· Consultar la taula de particions del disc dur:
$ sudo fdisk -l
· Consultar les configuracions del crontab:
$ cat /etc/crontab
· Consultar l’espai en ús en totes les particions:
$ df -h
· Llistar els dispositius USB:
$ lsusb
· Llistar tot el hardware i els dispositius connectats a la màquina:
$ lspci
· Llistar tots els usuaris connectats al sistema:
$ who
· Treure una llista detallada de les característiques del hardware de la màquina:
$ sudo lshw
· Utilitzar un terminal com a root:
$ sudo -i
· Veure l’estat dels mòduls del kernel:
$ lsmod
· Veure quan de temps porta el sistema funcionant:
$ uptime
Wine
· Executar programes de Window$ amb Wine:
Prèviament s’han d’haver instal·lat, i aleshores clicar
$ wine nom_de_l'arxiu.exe
· Instal·lar paquets de Window$ amb Wine:
$ cd directori_on_es_troba_l'arxiu_.exe
$ wine nom_de_l'arxiu.extensió
· Obrir el gestor de finestres de Wine:
$ winefile
Xarxa
· Comprovar el gateway i la connexió a l’exterior (Internet):
$ route -n
· Comprovar si funciona la conexió a Internet:
$ ping -c xubuntu.com
En la sortida, ha d’aparèixer d’entre les estadístiques l’expressió “0% packet loss”. Si no és així és que la conexió no funciona bé.
· Consultar informació de la conexió a la xarxa (DNS):
$ cat /etc/resolv.conf
· Consultar informació sobre les interfícies de xarxa del sistema:
$ ifconfig
· Consultar l’adreça IP de la màquina:
$ ifconfig | grep "inet addr"
· Consultar quina és la versió de Firefox instal·lada:
$ firefox -v
· Executar el Firefox en mode segur:
$ firefox -safe-mode
· Llistar les connexions actives a Internet:
$ netstat -ntp
Altres
· Afegir un nou tema a la carpeta de temes del gestor de finestres (Thunar):
Primer s’ha d’haver baixat d’Internet (del web de XFCE o de Gnome, per exemple) i descomprimit l’arxiu, després cliclar
$ sudo cp -r directori_amb_el_nou_tema /usr/share/themes/
· Buidar la paperera del teu compte d’usuari:
$ rm -r /home/nom_d_usuari/.local/share/Trash/files/*
$ rm -r /home/nom_d_usuari/.local/share/Trash/info/*
· Consultar el fitxer de configuració de X Window:
$ cat etc/X11/xorg.conf
;-P
Hi ha moltes pàgines web en les quals podeu aprofundir més els vostres coneixements de Bash. Per a usuaris/es novells és molt recomanable aquesta (en anglès, podeu trobar una traducció feta per la gent del LoCo Team català d’Ubuntu clicant aquí). També val la pena fer un cop d’ull a aquesta altra.