2.4 Bài 1
Chứng chỉ: |
Linux Essentials |
---|---|
Phiên bản: |
1.6 |
Chủ đề: |
2 Tìm đường trong Hệ thống Linux |
Mục tiêu: |
2.4 Tạo, di chuyển và xóa Tệp |
Bài: |
1 trên 1 |
Giới thiệu
Trong bài học này, chúng ta sẽ cùng nói về vấn đề quản lý tệp và thư mục trên Linux bằng các công cụ dòng lệnh.
Tệp là một tập hợp dữ liệu có tên và một tập hợp các thuộc tính. Ví dụ: bạn chuyển một số hình ảnh từ điện thoại sang máy tính và đặt tên mô tả cho chúng, kết quả là bạn sẽ có một loạt các tệp hình ảnh trên máy tính của mình. Các tệp này có các thuộc tính như thời gian tệp được truy cập hoặc sửa đổi lần cuối.
Thư mục là một loại tệp đặc biệt được sử dụng để tổ chức các tệp. Có thể hình dung các thư mục giống như các bìa hồ sơ được dùng để lưu trữ giấy tờ trong tủ hồ sơ. Khác với các tập hồ sơ giấy, ta có thể dễ dàng đặt các thư mục này bên trong các thư mục khác.
Dòng lệnh là cách hiệu quả nhất để quản lý tệp trên hệ thống Linux. Vỏ và các công cụ dòng lệnh có các tính năng giúp người dùng sử dụng dòng lệnh nhanh chóng và dễ dàng hơn so với trình quản lý tệp đồ họa.
Trong phần này, chúng ta sẽ sử dụng các lệnh ls
, mv
, cp
, pwd
, find
, touch
, rm
, rmdir
, echo
, cat
, và mkdir
để quản lý và sắp xếp các tệp và thư mục.
Phân biệt Chữ hoa và Chữ thường
Không giống như Microsoft Windows, tên tệp và thư mục trên hệ thống Linux phải phân biệt chữ hoa và chữ thường. Điều này có nghĩa là tên /etc/
và /ETC/
là các thư mục hoàn toàn khác nhau. Hãy thử các lệnh sau:
$ cd / $ ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr $ cd ETC bash: cd: ETC: No such file or directory $ pwd / $ cd etc $ pwd /etc
pwd
sẽ cho biết vị trí thư mục hiện tại của bạn. Như có thể thấy, việc thay đổi thành /ETC
không khả dụng vì không có thư mục như vậy. Nếu thay đổi thành thư mục /etc
(thư mục có tồn tại) thì lệnh sẽ hoạt động bình thường.
Tạo Thư mục
Lệnh mkdir
được sử dụng để tạo thư mục.
Hãy tạo một thư mục mới trong thư mục chính:
$ cd ~ $ pwd /home/user $ ls Desktop Documents Downloads $ mkdir linux_essentials-2.4 $ ls Desktop Documents Downloads linux_essentials-2.4 $ cd linux_essentials-2.4 $ pwd /home/emma/linux_essentials-2.4
Trong suốt bài học này, tất cả các lệnh sẽ diễn ra ở trong thư mục này hoặc một trong các thư mục con của nó.
Để dễ dàng quay lại thư mục của bài học từ bất kỳ vị trí nào khác trong hệ thống tệp của bạn, bạn có thể sử dụng lệnh sau:
$ cd ~/linux_essentials-2.4
Vỏ sẽ hiểu ký tự ~
là thư mục chính của bạn.
Khi bạn đang ở trong thư mục của bài học, hãy tạo thêm một số thư mục mà chúng ta sẽ sử dụng cho các bài tập. Bạn có thể thêm tất cả các tên thư mục được phân tách bằng dấu cách vào mkdir
:
$ mkdir creating moving copying/files copying/directories deleting/directories deleting/files globs mkdir: cannot create directory ‘copying/files’: No such file or directory mkdir: cannot create directory ‘copying/directories’: No such file or directory mkdir: cannot create directory ‘deleting/directories’: No such file or directory mkdir: cannot create directory ‘deleting/files’: No such file or directory $ ls creating globs moving
Hãy lưu ý về các thông báo lỗi và việc chỉ có moving
, globs
và creating
được tạo. Các thư mục copying
và deleting
chưa tồn tại. Theo mặc định, mkdir
sẽ không tạo thư mục bên trong một thư mục không tồn tại. Tùy chọn -p
hoặc --parents
sẽ hướng dẫn mkdir
tạo các thư mục mẹ nếu chúng không tồn tại. Hãy thử lệnh mkdir
tương tự với tùy chọn -p
:
$ mkdir -p creating moving copying/files copying/directories deleting/directories deleting/files globs
Bây giờ thì bạn sẽ không nhận được bất kỳ thông báo lỗi nào nữa. Hãy xem thử xem những thư mục nào hiện đang tồn tại:
$ find . ./creating ./moving ./globs ./copying ./copying/files ./copying/directories ./deleting ./deleting/directories ./deleting/files
Chương trình find
thường được sử dụng để tìm kiếm các tệp và thư mục; nhưng khi không có bất kỳ tùy chọn nào, chương trình sẽ hiển thị cho bạn danh sách tất cả các tệp, thư mục và thư mục con của thư mục hiện tại.
Tip
|
Khi liệt kê nội dung của một thư mục bằng |
Tạo Tệp
Thông thường, các tệp sẽ được tạo bởi các chương trình làm việc với dữ liệu được lưu trữ trong tệp. Một tệp trống có thể được tạo bằng lệnh touch
. Nếu bạn chạy touch
trên một tệp hiện có, nội dung của tệp sẽ không bị thay đổi nhưng dấu thời gian sửa đổi tệp sẽ được cập nhật.
Hãy chạy lệnh sau để tạo một số tệp cho bài học khớp mẫu khối (globbing):
$ touch globs/question1 globs/question2012 globs/question23 globs/question13 globs/question14 $ touch globs/star10 globs/star1100 globs/star2002 globs/star2013
Bây giờ, hãy xác minh tất cả các tệp tồn tại trong thư mục globs
:
$ cd globs $ ls question1 question14 question23 star1100 star2013 question13 question2012 star10 star2002
Hãy lưu ý cách mà touch
đã tạo các tệp. Bạn có thể xem nội dung của tệp văn bản bằng lệnh cat
. Hãy thử nó trên một trong những tệp bạn vừa tạo:
$ cat question14
Vì touch
tạo ra các tệp trống nên sẽ không có đầu ra. Bạn có thể sử dụng echo
với >
để tạo các tệp văn bản đơn giản. Hãy thử:
$ echo hello > question15 $ cat question15 hello
echo
sẽ hiển thị văn bản trên dòng lệnh. Ký tự >
hướng dẫn vỏ ghi đầu ra của lệnh vào tệp đã được chỉ định thay vì vào cửa sổ dòng lệnh. Điều này dẫn đến đầu ra của echo
, trong trường hợp này là hello
, sẽ được ghi vào tệp question15
. Cách sử dụng này không chỉ áp dụng với echo
mà có thể được sử dụng với bất kỳ lệnh nào.
Warning
|
Hãy cẩn thận khi sử dụng |
Đổi tên Tệp
Các tệp có thể được di chuyển và đổi tên bằng lệnh mv
.
Hãy đặt thư mục làm việc của bạn thành thư mục moving
:
$ cd ~/linux_essentials-2.4/moving
Hãy tạo một số tệp để thực hành. Đến bây giờ, bạn đã khá quen thuộc với các lệnh này:
$ touch file1 file22 $ echo file3 > file3 $ echo file4 > file4 $ ls file1 file22 file3 file4
Giả sử tên file22
là một lỗi đánh máy, đáng ra phải là file2
. Ta sẽ sửa nó bằng lệnh mv
. Khi đổi tên tệp, đối số đầu tiên sẽ là tên hiện tại, đối số thứ hai là tên mới:
$ mv file22 file2 $ ls file1 file2 file3 file4
Hãy cẩn thận với lệnh mv
. Nếu bạn đổi tên một tệp thành tên của một tệp khác đã có, nó sẽ ghi đè lên tệp đó. Hãy thử kiểm tra điều này với file3
và file4
:
$ cat file3 file3 $ cat file4 file4 $ mv file4 file3 $ cat file3 file4 $ ls file1 file2 file3
Hãy chý ý việc nội dung của file3
bây giờ đã là file4
. Hãy sử dụng tùy chọn -i
để mv
nhắc bạn nếu bạn sắp ghi đè lên một tệp hiện có. Hãy thử như sau:
$ touch file4 file5 $ mv -i file4 file3 mv: overwrite ‘file3’? y
Di chuyển Tệp
Các tệp có thể được di chuyển từ thư mục này sang thư mục khác bằng lệnh mv
.
Hãy tạo một vài thư mục để di chuyển tệp vào:
$ cd ~/linux_essentials-2.4/moving $ mkdir dir1 dir2 $ ls dir1 dir2 file1 file2 file3 file5
Di chuyển file1
vào dir1
:
$ mv file1 dir1 $ ls dir1 dir2 file2 file3 file5 $ ls dir1 file1
Hãy lưu ý việc đối số cuối cùng của mv
chính là thư mục đích. Bất cứ khi nào đối số cuối cùng của mv
là một thư mục, các tệp sẽ được chuyển vào đó. Ta có thể chỉ định nhiều tệp trong một lệnh mv
:
$ mv file2 file3 dir2 $ ls dir1 dir2 file5 $ ls dir2 file2 file3
Cũng có thể sử dụng mv
để di chuyển và đổi tên thư mục. Hãy thử đổi tên dir1
thành dir3
:
$ ls dir1 dir2 file5 $ ls dir1 file1 $ mv dir1 dir3 $ ls dir2 dir3 file5 $ ls dir3 file1
Xóa Tệp và Thư mục
Lệnh rm
có thể xóa các tệp và thư mục, trong khi lệnh rmdir
chỉ có thể xóa các thư mục. Hãy dọn sạch thư mục moving
bằng cách xóa file5
:
$ cd ~/linux_essentials-2.4/moving $ ls dir2 dir3 file5 $ rmdir file5 rmdir: failed to remove ‘file5’: Not a directory $ rm file5 $ ls dir2 dir3
Theo mặc định, rmdir
chỉ có thể xóa các thư mục trống, do đó chúng ta sẽ phải sử dụng rm
để xóa một tệp thông thường. Hãy thử xóa thư mục deleting
:
$ cd ~/linux_essentials-2.4/ $ ls copying creating deleting globs moving $ rmdir deleting rmdir: failed to remove ‘deleting’: Directory not empty $ ls -l deleting total 0 drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 files
Theo mặc định, rmdir
sẽ từ chối xóa thư mục có dữ liệu. Hãy thử sử dụng rmdir
để xóa một trong các thư mục con trống của thư mục deleting
:
$ ls -a deleting/files . .. $ rmdir deleting/files $ ls -l deleting directories
Việc xóa một số lượng lớn tệp hoặc một cấu trúc thư mục sâu với nhiều thư mục con nghe có vẻ hơi mất công nhưng thực ra lại rất dễ dàng. Theo mặc định, rm
sẽ chỉ hoạt động trên các tệp thông thường. Tùy chọn -r
được sử dụng để đè lệnh này. Hãy cẩn thận bởi rm -r
là một con dao hai lưỡi! Khi bạn sử dụng tùy chọn -r
, rm
sẽ không chỉ xóa bất kỳ thư mục nào mà còn xóa mọi nội dung bên trong nó, bao gồm cả các thư mục con và nội dung của chúng. Hãy tự kiểm chứng cách rm -r
hoạt động:
$ ls copying creating deleting globs moving $ rm deleting rm: cannot remove ‘deleting’: Is a directory $ ls -l deleting total 0 drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories $ rm -r deleting $ ls copying creating globs moving
Hãy lưu ý việc deleting
đã biến mất dù là nó không hề trống? Giống như mv
, rm
có tùy chọn -i
để nhắc bạn trước khi làm bất cứ điều gì. Hãy sử dụng rm -ri
để xóa các thư mục không còn cần thiết khỏi phần moving
:
$ find . ./creating ./moving ./moving/dir2 ./moving/dir2/file2 ./moving/dir2/file3 ./moving/dir3 ./moving/dir3/file1 ./globs ./globs/question1 ./globs/question2012 ./globs/question23 ./globs/question13 ./globs/question14 ./globs/star10 ./globs/star1100 ./globs/star2002 ./globs/star2013 ./globs/question15 ./copying ./copying/files ./copying/directories $ rm -ri moving rm: descend into directory ‘moving’? y rm: descend into directory ‘moving/dir2’? y rm: remove regular empty file ‘moving/dir2/file2’? y rm: remove regular empty file ‘moving/dir2/file3’? y rm: remove directory ‘moving/dir2’? y rm: descend into directory ‘moving/dir3’? y rm: remove regular empty file ‘moving/dir3/file1’? y rm: remove directory ‘moving/dir3’? y rm: remove directory ‘moving’? y
Sao chép Tệp và Thư mục
Lệnh cp
được sử dụng để sao chép tệp và thư mục. Hãy thử sao chép một số tệp vào thư mục copy
:
$ cd ~/linux_essentials-2.4/copying $ ls directories files $ cp /etc/nsswitch.conf files/nsswitch.conf $ cp /etc/issue /etc/hostname files
Nếu đối số cuối cùng là một thư mục, cp
sẽ tạo một bản sao của các đối số trước đó bên trong thư mục. Giống như mv
, lệnh này có thể chỉ định nhiều tệp cùng một lúc, miễn là đích đến là một thư mục.
Khi cả hai toán hạng của cp
đều là tệp và cả hai tệp đều tồn tại, cp
sẽ ghi đè lên tệp thứ hai bằng một bản sao của tệp đầu tiên. Hãy thực hành điều này bằng cách ghi đè tệp hostname
lên tệp issue
:
$ cd ~/linux_essentials-2.4/copying/files $ ls hostname issue nsswitch.conf $ cat hostname mycomputer $ cat issue Debian GNU/Linux 9 \n \l $ cp hostname issue $ cat issue mycomputer
Bây giờ, hãy thử tạo một bản sao của thư mục files
trong thư mục directories
:
$ cd ~/linux_essentials-2.4/copying $ cp files directories cp: omitting directory ‘files’
Như có thể thấy, cp
theo mặc định chỉ hoạt động trên các tệp riêng lẻ. Để sao chép một thư mục, ta phải sử dụng tùy chọn -r
. Hãy nhớ rằng tùy chọn -r
sẽ khiến cp
cũng sao chép cả nội dung của thư mục bạn đang sao chép:
$ cp -r files directories $ find . ./files ./files/nsswitch.conf ./files/fstab ./files/hostname ./directories ./directories/files ./directories/files/nsswitch.conf ./directories/files/fstab ./directories/files/hostname
Bạn có chú ý thấy khi một thư mục hiện có được sử dụng làm thư mục đích, cp
sẽ tạo một bản sao của thư mục nguồn bên trong thư mục đó không? Nếu đích đến không tồn tại, nó sẽ tạo ra bản sao và lấp đầy nó với nội dung của thư mục nguồn:
$ cp -r files files2 $ find . ./files ./files/nsswitch.conf ./files/fstab ./files/hostname ./directories ./directories/files ./directories/files/nsswitch.conf ./directories/files/fstab ./directories/files/hostname ./files2 ./files2/nsswitch.conf ./files2/fstab ./files2/hostname
Khớp mẫu khối
Cái thường được gọi là khớp mẫu khối (globbing) là một ngôn ngữ khớp mẫu đơn giản. Các vỏ dòng lệnh trên hệ thống Linux sử dụng ngôn ngữ này để chỉ các nhóm tệp có tên khớp với một mẫu cụ thể. POSIX.1-2017 chỉ định các ký tự khớp mẫu sau:
*
-
Khớp với bất kỳ số nào của bất kỳ ký tự nào, kể cả khi không có ký tự nào
?
-
Khớp với bất kỳ một ký tự nào
[]
-
Khớp với một lớp ký tự
Điều này có nghĩa là bạn có thể yêu cầu vỏ khớp với một mẫu thay vì một chuỗi văn bản. Thông thường, người dùng Linux có thể chỉ định nhiều tệp bằng một khối khớp mẫu thay vì nhập từng tên tệp. Hãy thử chạy các lệnh sau:
$ cd ~/linux_essentials-2.4/globs $ ls question1 question14 question2012 star10 star2002 question13 question15 question23 star1100 star2013 $ ls star1* star10 star1100 $ ls star* star10 star1100 star2002 star2013 $ ls star2* star2002 star2013 $ ls star2*2 star2002 $ ls star2013* star2013
Vỏ sẽ mở rộng *
thành một số lượng bất kỳ của bất cứ một cái gì; do đó, vỏ của bạn sẽ diễn giải star*
có nghĩa là bất kỳ thứ gì trong ngữ cảnh có liên quan bắt đầu bằng star
. Khi bạn chạy lệnh ls star*
, vỏ sẽ không chạy chương trình ls
với đối số là star*
; nó sẽ tìm các tệp trong thư mục hiện tại khớp với mẫu star*
(bao gồm chỉ star
) và biến từng tệp khớp với mẫu thành một đối số cho ls
:
$ ls star*
theo như ls
tương đương với
$ ls star10 star1100 star2002 star2013
Ký tự *
không có ý nghĩa gì đối với ls
. Để chứng minh cho điều này, hãy chạy lệnh sau:
$ ls star\* ls: cannot access star*: No such file or directory
Khi bạn đặt \
trước một ký tự, bạn đang nói với vỏ rằng đừng diễn giải ký tự đó. Khi đặt như vậy, bạn đang muốn ls
có đối số là star*
thay vì kết quả của khối khớp mẫu star*
.
?
có thể mở rộng thành bất kỳ ký tự đơn nào. Hãy thử các lệnh sau để kiểm chứng:
$ ls question1 question14 question2012 star10 star2002 question13 question15 question23 star1100 star2013 $ ls question? question1 $ ls question1? question13 question14 question15 $ ls question?3 question13 question23 $ ls question13? ls: cannot access question13?: No such file or directory
Dấu ngoặc []
được sử dụng để khớp với các phạm vi hoặc lớp ký tự. Các dấu ngoặc []
hoạt động giống như trong các biểu thức chính quy POSIX, ngoại trừ việc với các khối khớp mẫu thì ^
được sử dụng thay cho !
.
Hãy tạo một số tệp để thử nghiệm:
$ mkdir brackets $ cd brackets $ touch file1 file2 file3 file4 filea fileb filec file5 file6 file7
Các phạm vi trong dấu ngoặc []
sẽ được thể hiện bằng dấu -
:
$ ls file1 file2 file3 file4 file5 file6 file7 filea fileb filec $ ls file[1-2] file1 file2 $ ls file[1-3] file1 file2 file3
Nhiều phạm vi có thể được chỉ định:
$ ls file[1-25-7] file1 file2 file5 file6 file7 $ ls file[1-35-6a-c] file1 file2 file3 file5 file6 filea fileb filec
Dấu ngoặc vuông cũng có thể được sử dụng để khớp với một bộ ký tự cụ thể.
$ ls file[1a5] file1 file5 filea
Bạn cũng có thể sử dụng ký tự ^
làm ký tự đầu tiên để khớp với mọi thứ trừ một số ký tự nhất định.
$ ls file[^a] file1 file2 file3 file4 file5 file6 file7 fileb filec
Điều cuối cùng chúng ta sẽ đề cập đến trong bài học này là các lớp ký tự. Để khớp với một lớp ký tự, ta sẽ sử dụng [:classname:]
. Ví dụ: để sử dụng lớp ký tự số khớp với các chữ số, bạn sẽ làm như sau:
$ ls file[[:digit:]] file1 file2 file3 file4 file5 file6 file7 $ touch file1a file11 $ ls file[[:digit:]a] file1 file2 file3 file4 file5 file6 file7 filea $ ls file[[:digit:]]a file1a
Khối khớp mẫu file[[:digit:]a]
khớp với file
theo sau bởi một ký tự số (digit) hoặc a
.
Các lớp ký tự được hỗ trợ sẽ tùy thuộc vào ngôn ngữ hiện tại của bạn. POSIX yêu cầu các lớp ký tự sau cho tất cả các ngôn ngữ:
[:alnum:]
-
Chữ và số.
[:alpha:]
-
Chữ hoa hoặc chữ thường.
[:blank:]
-
Các khoảng trắng và tabs.
[:cntrl:]
-
Ký tự điều khiển; ví dụ: xóa lùi, chuông, NAK, thoát.
[:chữ số:]
-
Chữ số (
0123456789
). [:graph:]
-
Ký tự đồ họa (tất cả các ký tự ngoại trừ
ctrl
và ký tự khoảng trắng) [:lower:]
-
Chữ thường (
a-z
). [:print:]
-
Các ký tự có thể in được (
alnum
,punct
và ký tự khoảng trắng). [:punct:]
-
Các ký tự dấu câu, tức
!
,&
,"
. [:dấu cách:]
-
Các ký tự khoảng trắng; ví dụ: tab, dấu cách, dòng mới.
[:upper:]
-
Chữ hoa (
A-Z
). [:xdigit:]
-
Số thập lục phân (thường là
0123456789abcdefABCDEF
).
Bài tập Hướng dẫn
-
Cho các thông tin sau, hãy chọn các thư mục sẽ được tạo bằng lệnh
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
$ pwd /tmp $ find . ./outfiles ./outfiles/text
/tmp
/tmp/outfiles
/tmp/outfiles/text
/tmp/outfiles/text/today
/tmp/infiles
/tmp/infiles/text
/tmp/infiles/text/today
-
Tuỳ chọn
-v
trong các lệnhmkdir
,rm
vàcp
sẽ làm gì? -
Điều gì sẽ xảy ra nếu bạn vô tình sao chép ba tệp trên cùng một dòng lệnh vào một tệp đã tồn tại thay vì một thư mục?
-
Điều gì sẽ xảy ra khi bạn sử dụng
mv
để di chuyển một thư mục vào chính nó? -
Bạn sẽ xóa tất cả các tệp trong thư mục hiện tại bắt đầu bằng
old
như thế nào? -
Tệp
log_[a-z]_201?_*_01.txt
khớp với tệp nào sau đây?log_3_2017_Jan_01.txt
log_+_2017_Feb_01.txt
log_b_2007_Mar_01.txt
log_f_201A_Wednesday_01.txt
-
Hãy tạo một vài khối khớp mẫu để khớp với danh sách tên tệp sau:
doc100 doc200 doc301 doc401
Bài tập Mở rộng
-
Hãy sử dụng trang hướng dẫn của
cp
để tìm hiểu cách tạo một bản sao của tệp có các quyền và thời gian sửa đổi khớp với bản gốc. -
Lệnh
rmdir -p
thực hiện tác vụ gì? Hãy thử và giải thích xem nó khác vớirm -r
như thế nào. -
KHÔNG ĐƯỢC THỰC SỰ THỰC HIỆN LỆNH NÀY: Bạn nghĩ
rm -ri /*
sẽ thực hiện tác vụ gì? (ĐỪNG CỐ GẮNG THỬ!) -
Ngoài việc sử dụng
-i
, ta có thể ngănmv
ghi đè lên các tệp đích không? -
Hãy giải thích lệnh
cp -u
.
Tóm tắt
Môi trường dòng lệnh Linux cung cấp các công cụ để quản lý tệp. Một số lệnh thường được sử dụng là cp
, mv
, mkdir
, rm
và rmdir
. Những công cụ này khi kết hợp với các khối khớp mã sẽ cho phép người dùng hoàn thành rất nhiều công việc một cách nhanh chóng.
Nhiều lệnh sẽ có tùy chọn -i
để cảnh báo bạn trước khi thực hiện bất kỳ điều gì. Lời nhắc nhở này có thể giúp bạn tránh được rất nhiều rắc rối nếu bạn nhập sai lệnh.
Rất nhiều lệnh có tùy chọn -r
. Tùy chọn -r
thường thường được hiểu theo nghĩa là đệ quy. Trong toán học và khoa học máy tính, một hàm đệ quy là một hàm sử dụng chính nó trong định nghĩa của nó. Khi nói đến các công cụ dòng lệnh, điều này thường có nghĩa là áp dụng lệnh cho một thư mục và toàn bộ nội dung ở bên trong đó.
Các lệnh đã được dùng trong bài học này:
cat
-
Đọc và xuất nội dung của một tệp.
cp
-
Sao chép tệp hoặc thư mục.
echo
-
Xuất một chuỗi.
find
-
Duyệt qua cây hệ thống tệp và tìm kiếm các tệp khớp với một bộ tiêu chí cụ thể.
ls
-
Hiển thị thuộc tính của tệp và thư mục cũng như liệt kê nội dung của thư mục.
mkdir
-
Tạo một thư mục mới
mv
-
Di chuyển hoặc đổi tên tệp hoặc thư mục.
pwd
-
Xuất thư mục làm việc hiện tại.
rm
-
Xóa tệp hoặc thư mục.
rmdir
-
Xóa thư mục.
touch
-
Tạo một tệp trống hoặc cập nhật ngày sửa đổi của tệp hiện có.
Đáp án Bài tập Hướng dẫn
-
Cho các thông tin sau, hãy chọn các thư mục sẽ được tạo bằng lệnh
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
$ pwd /tmp $ find . ./outfiles ./outfiles/text
Các thư mục được đánh dấu sẽ được tạo. Các thư mục
/tmp
,/tmp/outfiles
và/tmp/outfiles/text
đã tồn tại, vì vậymkdir
sẽ bỏ qua chúng./tmp
/tmp/outfiles
/tmp/outfiles/text
/tmp/outfiles/text/today
X
/tmp/infiles
X
/tmp/infiles/text
X
/tmp/infiles/text/today
X
-
Tuỳ chọn
-v
trong các lệnhmkdir
,rm
vàcp
sẽ làm gì?Thông thường, `-v`sẽ bật chế độ hiển thị đầu ra chi tiết. Nó khiến các chương trình tương ứng xuất ra thông tin chi tiết về những gì chúng đang thực hiện trong thời gian thực hiện chính những thứ đó:
$ rm -v a b removed 'a' removed 'b' $ mv -v a b 'a' -> 'b' $ cp -v b c 'b' -> 'c'
-
Điều gì sẽ xảy ra nếu bạn vô tình sao chép ba tệp trên cùng một dòng lệnh vào một tệp đã tồn tại thay vì một thư mục?
cp
sẽ từ chối thực hiện bất cứ một tác vụ nào và đưa ra thông báo lỗi:$ touch a b c d $ cp a b c d cp: target 'd' is not a directory
-
Điều gì sẽ xảy ra khi bạn sử dụng
mv
để di chuyển một thư mục vào chính nó?Bạn sẽ nhận được thông báo lỗi cho biết
mv
không thể làm được điều đó.$ mv a a mv: cannot move 'a' to a subdirectory of itself, 'a/a'
-
Bạn sẽ xóa tất cả các tệp trong thư mục hiện tại bắt đầu bằng
old
như thế nào?Sử dụng khối khớp mẫu
old*
vớirm
:$ rm old*
-
Tệp
log_[a-z]_201?_*_01.txt
khớp với tệp nào sau đây?log_3_2017_Jan_01.txt
log_+_2017_Feb_01.txt
log_b_2007_Mar_01.txt
log_f_201A_Wednesday_01.txt
X
$ ls log_[a-z]_201?_*_01.txt log_f_201A_Wednesday_01.txt
log_[a-z]
khớp vớilog_
theo sau bởi bất kỳ chữ cái viết thường nào, vì vậy cả chuỗilog_f_201A_Wednesday_01.txt
vàlog_b_2007_Mar_01.txt
đều khớp._201?
khớp với bất kỳ ký tự đơn nào, vì vậy chỉ cólog_f_201A_Wednesday_01.txt
khớp. Cuối cùng,*_01.txt
khớp với mọi chuỗi kết thúc bằng_01.txt
, vì vậy tùy chọn còn lại của chúng ta khớp. -
Hãy tạo một vài khối khớp mẫu để khớp với danh sách tên tệp sau:
doc100 doc200 doc301 doc401
Ở đây ta có nhiều giải pháp. Dưới đây là một vài ví dụ trong số đó:
doc* doc[1-4]* doc?0? doc[1-4]0?
Đáp án Bài tập Mở rộng
-
Hãy sử dụng trang hướng dẫn của
cp
để tìm hiểu cách tạo một bản sao của tệp có các quyền và thời gian sửa đổi khớp với bản gốc.Bạn sẽ sử dụng tùy chọn
-p
. Từ trang hướng dẫn:$ man cp -p same as --preserve=mode,ownership,timestamps --preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,time‐ stamps), if possible additional attributes: context, links, xattr, all
-
Lệnh
rmdir -p
thực hiện tác vụ gì? Hãy thử và giải thích xem nó khác vớirm -r
như thế nào.Nó khiến
rmdir
hoạt động tương tự nhưmkdir -p
. Nếu đi qua một cây thư mục trống, nó sẽ xóa tất cả.$ find . ./a ./a/b ./a/b/c $ rmdir -p a/b/c $ ls
-
KHÔNG ĐƯỢC THỰC SỰ THỰC HIỆN LỆNH NÀY: Bạn nghĩ
rm -ri /*
sẽ thực hiện tác vụ gì? (ĐỪNG CỐ GẮNG THỬ!)Nó sẽ xóa tất cả các tệp và thư mục mà tài khoản người dùng của bạn có thể ghi. Điều này bao gồm bất kỳ hệ thống tệp mạng nào.
-
Ngoài việc sử dụng
-i
, có thể ngănmv
ghi đè lên các tệp đích không?Có, tùy chọn
-n
hoặc--no-clobber
ngănmv
ghi đè tệp.$ cat a a $ cat b b $ mv -n a b $ cat b b
-
Hãy giải thích lệnh
cp -u
.Tùy chọn
-u
khiếncp
chỉ sao chép tệp nếu đích đến bị thiếu hoặc cũ hơn tệp nguồn.$ ls -l total 24K drwxr-xr-x 123 emma student 12K Feb 2 05:34 .. drwxr-xr-x 2 emma student 4.0K Feb 2 06:56 . -rw-r--r-- 1 emma student 2 Feb 2 06:56 a -rw-r--r-- 1 emma student 2 Feb 2 07:00 b $ cat a a $ cat b b $ cp -u a b $ cat b b $ cp -u a c $ ls -l total 12 -rw-r--r-- 1 emma student 2 Feb 2 06:56 a -rw-r--r-- 1 emma student 2 Feb 2 07:00 b -rw-r--r-- 1 emma student 2 Feb 2 07:00 c