English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Linux 文件與目錄管理

We know that the directory structure of Linux is a tree structure, and the top-level directory is the root directory /.

Other directories can be added to the tree through mounting, and they can be removed by unmounting.

Before starting this tutorial, we need to know what absolute path and relative path are.

  • Absolute path:
    The way to write a path starts with the root directory /, for example: /usr/share/doc, this is the directory.

  • Relative path:
    The way to write a path does not start with /, for example, to go from /usr/share/doc to /usr/share/man, you can write: cd ../man, which is the writing style of relative paths.

Common commands for handling directories

Next, let's take a look at some common commands for handling directories:

  • ls (spelling in English: list files): Lists the directory and filenames

  • cd (acronimo completo: change directory): cambia directory

  • pwd (acronimo completo: print work directory): mostra la directory attuale

  • mkdir (acronimo completo: make directory): crea una nuova directory

  • rmdir (acronimo completo: remove directory): elimina una directory vuota

  • cp (acronimo completo: copy file): copia file o directory

  • rm (acronimo completo: remove): elimina file o directory

  • mv (acronimo completo: move file): sposta file e directory, o modifica il nome di file e directory

Puoi usare man [comando] per visualizzare la documentazione di ogni comando, come ad esempio: man cp.

ls (elenca directory)

Nel sistema operativo Linux, il comando ls è probabilmente quello più utilizzato.

語法:

[root@www ~]# ls [-aAdfFhilnrRSt] nome_directory
[root@www ~]# ls [--color={never,auto,always}] nome_directory
[root@www ~]# ls [--full-time] nome_directory

選項與參數:

  • -a : elenca tutti i file, inclusi i file nascosti (i file che iniziano con .) (usato spesso)

  • -d : elenca solo la directory stessa, non i dati dei file all'interno della directory (usato spesso)

  • -l : elenca in modo dettagliato, inclusi gli attributi e i permessi dei file (usato spesso)

Elenca tutti i file nella directory personale (inclusi gli attributi e i file nascosti)

[root@www ~]# ls -al ~

cd (cambia directory)

cd è l'abbreviazione di Change Directory, è un comando usato per cambiare la directory di lavoro.

語法:

 cd [percorso relativo o assoluto]
# Usa il comando mkdir per creare la directory w3codebox
[root@www ~]# mkdir w3codebox
# Usa il percorso assoluto per passare alla directory w3codebox
[root@www ~]# cd /root/w3codebox/
# Usa il percorso relativo per passare alla directory w3codebox
[root@www ~]# cd ./w3codebox/
# Indica di tornare alla directory personale, ossia alla directory /root
[root@www w3codebox]# cd ~
# Indica di andare al livello superiore della directory corrente, ossia al livello superiore di /root;
[root@www ~]# cd ..

Prossimamente, dopo aver eseguito più operazioni, dovresti capire meglio il comando cd.

pwd (mostra la directory attuale)

pwd è Stampa Directory di Lavoro l'abbreviazione, ossia il comando che mostra la directory corrente.

[root@www ~]# pwd -P

選項與參數:

  • -P : Mostra il percorso effettivo, non il percorso del collegamento (link).

Esempio: Mostra semplicemente la directory di lavoro corrente:

[root@www ~]# pwd
/root <== Mostra la directory

Esempio: Mostra la directory di lavoro effettiva, non il nome della directory del file di collegamento stesso.

[root@www ~]# cd /var/mail <== Attenzione, /var/mail è un file di collegamento
[root@www mail]# pwd
/var/mail <== Elenco della directory di lavoro corrente
[root@www mail]# pwd -P
/var/spool/mail <== Cos'è successo? Senza -P c'è una grande differenza!
[root@www mail]# ls -ld /var/mail
lrwxrwxrwx 1 root root 10 Set 4 17:54 /var/mail -> spool/mail
# Ora dovresti capire perché? Perché /var/mail è un file di collegamento, collegato a /var/spool/mail 
# Quindi, aggiungendo l'opzione pwd -P, non mostrerà i dati del file di collegamento, ma mostrerà il percorso completo corretto!

mkdir (crea nuova directory)

Se vuoi creare una nuova directory, usa mkdir (crea directory)!

語法:

mkdir [-mp] nome_directory

選項與參數:

  • -m : configurazione dei permessi del file di configurazione! Configura direttamente, non è necessario guardare il permesso predefinito (umask)

  • -p : ti aiuta a creare ricorsivamente la directory necessaria (compresi i目录i superiori)!

Esempio: Prova a creare più directory nuove sotto /tmp per vedere:

[root@www ~]# cd /tmp
[root@www tmp]# mkdir test <== Creo una nuova directory chiamata test
[root@www tmp]# mkdir test1/test2/test3/test4
mkdir: impossibile creare la directory `test1/test2/test3/test4': 
Non esiste il file o la directory <== Non posso creare direttamente questa directory!
[root@www tmp]# mkdir -p test1/test2/test3/test4

加了这个 -p 的选项,可以自行帮你创建多层目录!

示例:创建权限为 rwx--x--x 的目录。

[root@www tmp]# mkdir -m 711 test2
[root@www tmp]# ls -l
drwxr-xr-x 3 root root 4096 Jul 18 12:50 test
drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1
drwx--x--x 2 root root 4096 Jul 18 12:54 test2

上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。

如果我们使用 -m ,如上例我们给予 -m 711 来赋予新的目录 drwx--x--x 的权限。

rmdir (删除空的目录)

語法:

 rmdir [-p] 目录名称

選項與參數:

  • -p :连同上一级『空的』目录也一起删除

删除 w3codebox 目录

[root@www tmp]# rmdir w3codebox/

将 mkdir 示例中创建的目录(/tmp 之下)删除掉!

[root@www tmp]# ls -l <==看看有多少目录存在?
drwxr-xr-x 3 root root 4096 Jul 18 12:50 test
drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
[root@www tmp]# rmdir test <==可直接删除掉,没问题
[root@www tmp]# rmdir test1 <==因为尚有内容,所以无法删除!
rmdir: `test1': Directory not empty
[root@www tmp]# rmdir -p test1/test2/test3/test4
[root@www tmp]# ls -l <==您看看,底下的输出中test与test1不见了!
drwx--x--x 2 root root 4096 Jul 18 12:54 test2

利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次性删除。

不过要注意的是,这个 rmdir 只能删除空的目录,你可以使用 rm 命令来删除非空目录。

cp (复制文件或目录)

cp 表示复制文件和目录。

语法:

[root@www ~]# cp [-adfilprsu] 源文件(source) 目标文件(destination)
[root@www ~]# cp [options] source1 source2 source3 ... directory

選項與參數:

  • -a:相当于 -pdr 的意思,至于 pdr 请参考下列说明;(常用)

  • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;

  • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;

  • -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)

  • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;

  • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);

  • -r:递归持续复制,用於目录的复制行为;(常用)

  • -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;

  • -u:若 destination 比 source 旧才升级 destination !

用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc

[root@www ~]# cp ~/.bashrc /tmp/bashrc
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n <==n不覆盖,y为覆盖

rm (移除文件或目录)

語法:

 rm [-fir] 文件或目录

選項與參數:

  • -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;

  • -i :互动模式,在删除前会询问使用者是否动作

  • -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!

将刚刚在 cp 的示例中创建的 bashrc 删除掉!

[root@www tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y

如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!

mv (移动文件与目录,或修改名称)

語法:

[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [opzioni] source1 source2 source3 ... directory

選項與參數:

  • -f  :Force, se il file di destinazione esiste già, non si chiederà nulla e verrà sovrascritto direttamente;

  • -i  :Se il file di destinazione (destinazione) esiste già, si chiederà se sovrascrivere!

  • -u  :Se il file di destinazione esiste già e il source è più recente, verrà aggiornato (aggiornamento)

Copia un file, crea una directory, sposta il file nella directory

[root@www ~]# cd /tmp
[root@www ~]# cp ~/.bashrc bashrc
[root@www tmp]# mkdir mvtest
[root@www tmp]# mv bashrc mvtest

Per spostare un file in una directory, fai così!

Rinomina il nome della directory appena creata in mvtest2

[root@www tmp]# mv mvtest mvtest2

Visualizzazione del contenuto dei file in Linux

Nel sistema Linux, usa i seguenti comandi per visualizzare il contenuto dei file:

  • cat  Mostra il contenuto del file dall'inizio

  • tac  Mostra dall'ultima riga, è chiaro che tac è il contrario di cat!

  • nl  Mostra anche il numero di riga durante la visualizzazione!

  • more mostra il contenuto del file pagina per pagina

  • less è simile a more, ma è meglio di more perché può tornare indietro una pagina!

  • head per vedere solo le prime righe

  • tail per vedere solo l'ultima parte delle righe

Puoi usare man [comando]per visualizzare la documentazione di ogni comando, come ad esempio: man cp.

cat

Mostra il contenuto del file dall'inizio

語法:

cat [-AbEnTv]

選項與參數:

  • -A  :Corrisponde all'opzione integrata -vET, può mostrare alcuni caratteri speciali invece che solo spazi bianchi;

  • -b  :Mostra il numero di riga, solo per le righe non vuote, le righe vuote non sono numerate!

  • -E  :Mostra il byte di fine riga $;

  • -n  :Stampa il numero di riga, inclusi gli spazi bianchi, diverso dall'opzione -b;

  • -T  :Mostra il tasto [tab] come ^I;

  • -v  :Mostra alcuni caratteri speciali non visibili

Controlla il contenuto del file /etc/issue:

[root@www ~]# cat /etc/issue
CentOS release 6.4 (Final)
Kernel \r on an \m

tac

Il comando tac è esattamente opposto a cat, mostra il contenuto del file dall'ultima riga, è chiaro che tac è il contrario di cat! Ad esempio:

[root@www ~]# tac /etc/issue
Kernel \r on an \m
CentOS release 6.4 (Final)

nl

Visualizzazione della numerazione delle righe

語法:

nl [-bnw] file

選項與參數:

  • -b  :Specifica il metodo di numerazione delle righe, ci sono due principali:
     -b a :Indica che la numerazione delle righe deve essere elencata sia per le righe vuote che per quelle piene (simile a cat -n);
     -b t :Se ci sono righe vuote, non elencare la numerazione per quella riga (valore predefinito);

  • -n  :I metodi di visualizzazione della numerazione delle righe, ci sono tre principali:
     -n ln :La numerazione delle righe è visualizzata nel lato sinistro dello schermo;
     -n rn :La numerazione delle righe è visualizzata nella colonna più a destra e non viene aggiunto 0;
     -n rz :La numerazione delle righe è visualizzata nella colonna più a destra e viene aggiunto 0;

  • -w  :Il numero di posizioni utilizzate dalla colonna di numerazione delle righe.

Esempio 1: elencare il contenuto di /etc/issue con nl

[root@www ~]# nl /etc/issue
     1  CentOS release 6.4 (Final)
     2  Kernel \r on an \m

more

Pagine una per una

[root@www ~]# more /etc/man_db.config 
#
# Generato automaticamente da man.conf.in tramite
# script di configurazione.
#
# man.conf from man-1.6d
....(testi omessi)....
--More--(28%)  <== L'attenzione è su questa riga! Il cursore ti aspetta qui per i comandi

Durante l'esecuzione del programma more, ci sono diversi tasti che puoi premere:

  • Tasto spazio (space):Rappresenta passare a una pagina inferiore;

  • Enter         :Rappresenta passare a una riga inferiore;

  • /stringa         :Rappresenta cercare la stringa specificata all'interno del contenuto visualizzato;

  • :f             :Mostra immediatamente il nome del file e il numero della riga attualmente visualizzata;

  • q             :Rappresenta uscire immediatamente da more e non mostrare più il contenuto del file.

  • b o [ctrl]-b :Rappresenta tornare alla pagina precedente, ma questo comando è utile solo per i file e non per le pipe.

less

Pagine una per una, l'esempio di output seguente mostra il contenuto del file /etc/man.config:

[root@www ~]# less /etc/man.config
#
# Generato automaticamente da man.conf.in tramite
# script di configurazione.
#
# man.conf from man-1.6d
....(testi omessi)....
: <== Qui puoi aspettare l'inserimento dei comandi!

less runtime supporta i seguenti comandi:

  • 空白鍵 :向下翻動一頁;

  • [pagedown]:向下翻動一頁;

  • [pageup] :向上翻動一頁;

  • /字串 :向下搜尋『字串』的功能;

  • ?字串 :向上搜尋『字串』的功能;

  • n :重複前一個搜尋 (與 / 或 ? 有關!)

  • N :反向的重複前一個搜尋 (與 / 或 ? 有關!)

  • q :離開 less 這個程序;

head

取出文件前面幾行

語法:

head [-n number] 文件

選項與參數:

  • -n :後面接數字,代表顯示幾行的意思

[root@www ~]# head /etc/man.config

默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:

[root@www ~]# head -n 20 /etc/man.config

tail

取出文件後面幾行

語法:

tail [-n number] 文件

選項與參數:

  • -n :後面接數字,代表顯示幾行的意思

  • -f :表示持续侦测后面所接的檔名,要等到按下[ctrl]-c才會結束tail的侦測

[root@www ~]# tail /etc/man.config
# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
[root@www ~]# tail -n 20 /etc/man.config