El comando ls nos permite listar el contenido de un directorio.
Su sintaxis es:
ls {opciones} {directorio}
Si no se especifica un argumento para el parámetro directorio, por defecto se listará el contenido del directorio donde nos encontremos ubicados .
Por ejemplo si estamos ubicados en el directorio ~/GitLab/EDcampBogota2017 y no especificamos un argumento para el parámetro directorio, el comando ls listará el contenido del directorio actual ~/GitLab/EDcampBogota2017
$ ls
app database package-lock.json routes
artisan docker phpunit.xml server.php
bootstrap docker-compose.yml.example public storage
composer.json lib README.md tests
config package.json resources webpack.mix.js
Si queremos listar el contenido de la carpeta ~/GitLab/EDcampBogota2017/app sin movernos de nuestra ubicación actual, entonces pasamos como argumento ~/GitLab/EDcampBogota2017/app al parámetro directorio:
$ ls ~/GitLab/EDcampBogota2017/app
Console Exceptions Http Models Providers
También podemos utilizar un patrón como argumento para el parámetro directorio para filtrar la lista de ficheros, por ejemplo para listar los ficheros con extensión .json podemos utilizar:
$ ls *.json
composer.json package.json package-lock.json
El comando ls cuenta con una variedad de opciones, en este post te contaré acerca de las más utilizadas:
ls -a
La opción -a nos permite listar todos los ficheros incluyendo los ficheros ocultos, los cuales comienzan su nombre con un .
$ ls -a
. database .gitignore resources
.. docker lib routes
app docker-compose.yml.example package.json server.php
artisan .editorconfig package-lock.json storage
bootstrap .env.example phpunit.xml tests
composer.json .git public webpack.mix.js
config .gitattributes README.md
ls -l
La opción -l nos permite listar los ficheros en formato de una sola columna, listando un fichero por cada línea con la siguiente información: permisos del fichero, el número de enlace, nombre del propietario, nombre del grupo al que pertenece, tamaño en bytes, una marca de tiempo y nombre del fichero.
Por defecto la marca de tiempo corresponde a la fecha de última modificación.
$ ls -l
drwxrwxr-x 7 alejandro alejandro 4096 nov 4 2017 app
-rw-rw-r-- 1 alejandro alejandro 1646 nov 4 2017 artisan
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 bootstrap
-rw-rw-r-- 1 alejandro alejandro 1376 nov 4 2017 composer.json
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 config
drwxrwxr-x 6 alejandro alejandro 4096 nov 4 2017 database
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 docker
-rw-rw-r-- 1 alejandro alejandro 472 nov 4 2017 docker-compose.yml.example
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 lib
-rw-rw-r-- 1 alejandro alejandro 1117 nov 4 2017 package.json
-rw-rw-r-- 1 alejandro alejandro 306461 nov 4 2017 package-lock.json
-rw-rw-r-- 1 alejandro alejandro 1055 nov 4 2017 phpunit.xml
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 public
-rw-rw-r-- 1 alejandro alejandro 2250 dic 8 08:24 README.md
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 resources
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 routes
-rw-rw-r-- 1 alejandro alejandro 563 nov 4 2017 server.php
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 storage
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 tests
-rw-rw-r-- 1 alejandro alejandro 434 nov 4 2017 webpack.mix.js
También puedes utilizar una combinación de opciones, por ejemplo para mostrar una lista de ficheros detallada incluyendo los ficheros ocultos, puedes utilizar el comando ls -l -a en donde se indica cada opción por separado, o si lo prefieres puedes agrupar las opciones así: ls -la.
En adelante usaré la agrupación de opciones para listar los ficheros de forma detallada -l junto con la opción que se esté explicando.
ls -t
Por defecto los ficheros son listados por orden alfabético, para listar los ficheros por orden de la marca de tiempo (fecha de modificación por defecto), utilizamos la opción -t
$ ls -lt
-rwxrwxr-x 1 alejandro alejandro 16296233 dic 8 08:37 cursos
-rw-rw-r-- 1 alejandro alejandro 2250 dic 8 08:24 README.md
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 resources
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 routes
-rw-rw-r-- 1 alejandro alejandro 563 nov 4 2017 server.php
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 storage
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 tests
-rw-rw-r-- 1 alejandro alejandro 434 nov 4 2017 webpack.mix.js
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 public
-rw-rw-r-- 1 alejandro alejandro 1117 nov 4 2017 package.json
-rw-rw-r-- 1 alejandro alejandro 306461 nov 4 2017 package-lock.json
-rw-rw-r-- 1 alejandro alejandro 1055 nov 4 2017 phpunit.xml
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 docker
-rw-rw-r-- 1 alejandro alejandro 472 nov 4 2017 docker-compose.yml.example
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 lib
drwxrwxr-x 7 alejandro alejandro 4096 nov 4 2017 app
-rw-rw-r-- 1 alejandro alejandro 1646 nov 4 2017 artisan
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 bootstrap
-rw-rw-r-- 1 alejandro alejandro 1376 nov 4 2017 composer.json
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 config
drwxrwxr-x 6 alejandro alejandro 4096 nov 4 2017 database
ls -r
Para revertir el orden de clasificación utilizamos la opción r, como el orden por defecto es alfabético de A-Z, la opción -r revierte el orden a Z-A.
$ ls -lr
-rw-rw-r-- 1 alejandro alejandro 434 nov 4 2017 webpack.mix.js
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 tests
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 storage
-rw-rw-r-- 1 alejandro alejandro 563 nov 4 2017 server.php
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 routes
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 resources
-rw-rw-r-- 1 alejandro alejandro 2250 dic 8 08:24 README.md
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 public
-rw-rw-r-- 1 alejandro alejandro 1055 nov 4 2017 phpunit.xml
-rw-rw-r-- 1 alejandro alejandro 306461 nov 4 2017 package-lock.json
-rw-rw-r-- 1 alejandro alejandro 1117 nov 4 2017 package.json
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 lib
-rw-rw-r-- 1 alejandro alejandro 472 nov 4 2017 docker-compose.yml.example
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 docker
drwxrwxr-x 6 alejandro alejandro 4096 nov 4 2017 database
-rwxrwxr-x 1 alejandro alejandro 16296233 dic 8 08:37 cursos
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 config
-rw-rw-r-- 1 alejandro alejandro 1376 nov 4 2017 composer.json
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 bootstrap
-rw-rw-r-- 1 alejandro alejandro 1646 nov 4 2017 artisan
drwxrwxr-x 7 alejandro alejandro 4096 nov 4 2017 app
Si usamos una combinación de las opciones -t y -r, la opción -r revierte el orden, listando los ficheros del más antiguo al más reciente.
$ ls -ltr
drwxrwxr-x 6 alejandro alejandro 4096 nov 4 2017 database
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 config
-rw-rw-r-- 1 alejandro alejandro 1376 nov 4 2017 composer.json
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 bootstrap
-rw-rw-r-- 1 alejandro alejandro 1646 nov 4 2017 artisan
drwxrwxr-x 7 alejandro alejandro 4096 nov 4 2017 app
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 lib
-rw-rw-r-- 1 alejandro alejandro 472 nov 4 2017 docker-compose.yml.example
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 docker
-rw-rw-r-- 1 alejandro alejandro 1055 nov 4 2017 phpunit.xml
-rw-rw-r-- 1 alejandro alejandro 306461 nov 4 2017 package-lock.json
-rw-rw-r-- 1 alejandro alejandro 1117 nov 4 2017 package.json
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 public
-rw-rw-r-- 1 alejandro alejandro 434 nov 4 2017 webpack.mix.js
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 tests
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 storage
-rw-rw-r-- 1 alejandro alejandro 563 nov 4 2017 server.php
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 routes
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 resources
-rw-rw-r-- 1 alejandro alejandro 2250 dic 8 08:24 README.md
-rwxrwxr-x 1 alejandro alejandro 16296233 dic 8 08:37 cursos
ls -h
Como el tamaño de los ficheros es listado en bytes no comprensible para humanos, la opción -h (human-readable) añade una letra indicando el tamaño para facilitarnos la lectura.
$ ls -lh
drwxrwxr-x 7 alejandro alejandro 4,0K nov 4 2017 app
-rw-rw-r-- 1 alejandro alejandro 1,7K nov 4 2017 artisan
drwxrwxr-x 3 alejandro alejandro 4,0K nov 4 2017 bootstrap
-rw-rw-r-- 1 alejandro alejandro 1,4K nov 4 2017 composer.json
drwxrwxr-x 2 alejandro alejandro 4,0K nov 4 2017 config
-rwxrwxr-x 1 alejandro alejandro 16M dic 8 08:37 cursos
drwxrwxr-x 6 alejandro alejandro 4,0K nov 4 2017 database
drwxrwxr-x 4 alejandro alejandro 4,0K nov 4 2017 docker
-rw-rw-r-- 1 alejandro alejandro 472 nov 4 2017 docker-compose.yml.example
drwxrwxr-x 3 alejandro alejandro 4,0K nov 4 2017 lib
-rw-rw-r-- 1 alejandro alejandro 1,1K nov 4 2017 package.json
-rw-rw-r-- 1 alejandro alejandro 300K nov 4 2017 package-lock.json
-rw-rw-r-- 1 alejandro alejandro 1,1K nov 4 2017 phpunit.xml
drwxrwxr-x 4 alejandro alejandro 4,0K nov 4 2017 public
-rw-rw-r-- 1 alejandro alejandro 2,2K dic 8 08:24 README.md
drwxrwxr-x 5 alejandro alejandro 4,0K nov 4 2017 resources
drwxrwxr-x 2 alejandro alejandro 4,0K nov 4 2017 routes
-rw-rw-r-- 1 alejandro alejandro 563 nov 4 2017 server.php
drwxrwxr-x 5 alejandro alejandro 4,0K nov 4 2017 storage
drwxrwxr-x 4 alejandro alejandro 4,0K nov 4 2017 tests
-rw-rw-r-- 1 alejandro alejandro 434 nov 4 2017 webpack.mix.js
ls -S
Así como podemos organizar la lista de ficheros por nombre y fecha de modificación, también podemos organizar la lista de ficheros por tamaño haciendo uso de la opción -S
$ ls -lhS
-rwxrwxr-x 1 alejandro alejandro 16M dic 8 08:37 cursos
-rw-rw-r-- 1 alejandro alejandro 300K nov 4 2017 package-lock.json
drwxrwxr-x 7 alejandro alejandro 4,0K nov 4 2017 app
drwxrwxr-x 3 alejandro alejandro 4,0K nov 4 2017 bootstrap
drwxrwxr-x 2 alejandro alejandro 4,0K nov 4 2017 config
drwxrwxr-x 6 alejandro alejandro 4,0K nov 4 2017 database
drwxrwxr-x 4 alejandro alejandro 4,0K nov 4 2017 docker
drwxrwxr-x 3 alejandro alejandro 4,0K nov 4 2017 lib
drwxrwxr-x 4 alejandro alejandro 4,0K nov 4 2017 public
drwxrwxr-x 5 alejandro alejandro 4,0K nov 4 2017 resources
drwxrwxr-x 2 alejandro alejandro 4,0K nov 4 2017 routes
drwxrwxr-x 5 alejandro alejandro 4,0K nov 4 2017 storage
drwxrwxr-x 4 alejandro alejandro 4,0K nov 4 2017 tests
-rw-rw-r-- 1 alejandro alejandro 2,2K dic 8 08:24 README.md
-rw-rw-r-- 1 alejandro alejandro 1,7K nov 4 2017 artisan
-rw-rw-r-- 1 alejandro alejandro 1,4K nov 4 2017 composer.json
-rw-rw-r-- 1 alejandro alejandro 1,1K nov 4 2017 package.json
-rw-rw-r-- 1 alejandro alejandro 1,1K nov 4 2017 phpunit.xml
-rw-rw-r-- 1 alejandro alejandro 563 nov 4 2017 server.php
-rw-rw-r-- 1 alejandro alejandro 472 nov 4 2017 docker-compose.yml.example
-rw-rw-r-- 1 alejandro alejandro 434 nov 4 2017 webpack.mix.js
ls -X
Esta opción nos permite organizar los ficheros alfabéticamente por la extensión del fichero.
$ ls -lX
drwxrwxr-x 7 alejandro alejandro 4096 nov 4 2017 app
-rw-rw-r-- 1 alejandro alejandro 1646 nov 4 2017 artisan
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 bootstrap
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 config
-rwxrwxr-x 1 alejandro alejandro 16296233 dic 8 08:37 cursos
drwxrwxr-x 6 alejandro alejandro 4096 nov 4 2017 database
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 docker
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 lib
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 public
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 resources
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 routes
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 storage
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 tests
-rw-rw-r-- 1 alejandro alejandro 472 nov 4 2017 docker-compose.yml.example
-rw-rw-r-- 1 alejandro alejandro 434 nov 4 2017 webpack.mix.js
-rw-rw-r-- 1 alejandro alejandro 1376 nov 4 2017 composer.json
-rw-rw-r-- 1 alejandro alejandro 1117 nov 4 2017 package.json
-rw-rw-r-- 1 alejandro alejandro 306461 nov 4 2017 package-lock.json
-rw-rw-r-- 1 alejandro alejandro 2250 dic 8 08:24 README.md
-rw-rw-r-- 1 alejandro alejandro 563 nov 4 2017 server.php
-rw-rw-r-- 1 alejandro alejandro 1055 nov 4 2017 phpunit.xml
ls -F
La opción F agrega a cada nombre de directorio un / y tras cada nombre de un ejecutable un \*
$ ls -lF
drwxrwxr-x 7 alejandro alejandro 4096 nov 4 2017 app/
-rw-rw-r-- 1 alejandro alejandro 1646 nov 4 2017 artisan
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 bootstrap/
-rw-rw-r-- 1 alejandro alejandro 1376 nov 4 2017 composer.json
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 config/
-rwxrwxr-x 1 alejandro alejandro 16296233 dic 8 08:37 cursos*
drwxrwxr-x 6 alejandro alejandro 4096 nov 4 2017 database/
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 docker/
-rw-rw-r-- 1 alejandro alejandro 472 nov 4 2017 docker-compose.yml.example
drwxrwxr-x 3 alejandro alejandro 4096 nov 4 2017 lib/
-rw-rw-r-- 1 alejandro alejandro 1117 nov 4 2017 package.json
-rw-rw-r-- 1 alejandro alejandro 306461 nov 4 2017 package-lock.json
-rw-rw-r-- 1 alejandro alejandro 1055 nov 4 2017 phpunit.xml
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 public/
-rw-rw-r-- 1 alejandro alejandro 2250 dic 8 08:24 README.md
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 resources/
drwxrwxr-x 2 alejandro alejandro 4096 nov 4 2017 routes/
-rw-rw-r-- 1 alejandro alejandro 563 nov 4 2017 server.php
drwxrwxr-x 5 alejandro alejandro 4096 nov 4 2017 storage/
drwxrwxr-x 4 alejandro alejandro 4096 nov 4 2017 tests/
-rw-rw-r-- 1 alejandro alejandro 434 nov 4 2017 webpack.mix.js
Recuerda que puedes utilizar una combinación de todas estas opciones para listar tus ficheros de acuerdo a tus necesidades, por ejemplo si necesitamos listar de forma detallada sólo los ficheros .json del directorio actual, ordenandolos por el tamaño de los ficheros del menos pesado al más pesado, utilizarías un comando como el siguiente:
$ ls -lhSr *.json
-rw-rw-r-- 1 alejandro alejandro 1,1K nov 4 2017 package.json
-rw-rw-r-- 1 alejandro alejandro 1,4K nov 4 2017 composer.json
-rw-rw-r-- 1 alejandro alejandro 300K nov 4 2017 package-lock.json
