Các lệnh hệ thống tệp UNIX

Hướng dẫn ngắn gọn về các lệnh hệ thống tệp UNIX

Tôi viết sổ tay hướng dẫn này với mục tiêu giúp bạn dễ dàng tìm hiểu, ghi nhớ và tham khảo các tiện ích chính của hệ thống tệp UNIX. macOS và GNU / Linux đều là hệ thống UNIX, về mặt thực tế. macOS là UNIX được chứng nhận, dựa trên BSD UNIX, trong khi GNU / Linux giống UNIX hoặc một dẫn xuất UNIX.

Sau phần giới thiệu về hệ thống tệp và cách nó hoạt động, tôi sẽ trình bày chi tiết về các lệnh sau:

Làm việc với các thư mục và tệp

  • mkdir
  • cd
  • pwd
  • rmdir
  • ls
  • touch
  • mv
  • cp
  • ln

Quyền

  • chmod
  • chown
  • chgrp

Nội dung tệp

  • cat
  • less
  • find
  • cpio
  • dd
  • wc

Cách thức hoạt động của Hệ thống tập tin

Mọi hệ thống máy tính hiện đại đều dựa vào hệ thống tệp để lưu trữ và truy xuất các chương trình. Không phải mọi thứ đều có thể được lưu giữ trong bộ nhớ, đây là tài nguyên quý giá và có giới hạn, và chúng ta cần một nơi an toàn để lưu trữ dữ liệu khi máy tính khởi động lại hoặc tắt. Bộ nhớ bị xóa hoàn toàn bất cứ khi nào máy tính khởi động lại, trong khi cấu trúc đĩa vẫn tồn tại.

Trong hướng dẫn này, tôi đặc biệt kiểm tra hệ thống tệp UNIX, có thể được tìm thấy trên các máy macOS và GNU / Linux. Hệ thống tệp Windows khác nhau, mặc dù Windows 10 vớiHệ thống con Windows dành cho Linuxđược cài đặt cho phép bạn sử dụng các tiện ích tương tự mà tôi mô tả ở đây.

Một hệ thống tệp bắt đầu từ/. Đây là nút gốc lưu trữ các thư mục cấp đầu tiên.

Các thư mục thông thường mà bạn sẽ tìm thấy trong hệ thống UNIX là

  • /binchứa các lệnh hệ thống chính
  • /etcchứa cấu hình hệ thống
  • /devchứa các thiết bị hệ thống
  • /usrchứa các tệp người dùng
  • /tmpchứa các tệp tạm thời

… Còn nhiều thứ nữa, nhưng bạn hiểu rồi đấy.

Số lượng bao nhiêu tùy thuộc vào loại hệ thống được sử dụng. Linux đã chuẩn hóa các thư mục bằng nỗ lực Cơ sở Tiêu chuẩn Linux của nó và bạn thường có:

  • /bincác lệnh hệ thống chính
  • /bootcác tệp được sử dụng để khởi động máy (không tồn tại trên macOS)
  • /devhệ thống thiết bị
  • /etctệp cấu hình hệ thống
  • /etc/opttệp cấu hình chương trình người dùng
  • /homethư mục chính của người dùng (/ Người dùng trong macOS)
  • /libthư viện hệ thống (không tồn tại trên macOS)
  • /mnthệ thống tập tin được gắn kết
  • /optchương trình người dùng
  • /procngười dùng theo nhân và quy trình (không tồn tại trên macOS)
  • /rootthư mục chính của người dùng root (không tồn tại trên macOS)
  • /run(không tồn tại trên macOS)
  • /sbinngười dùng mã nhị phân hệ thống để khởi động hệ thống
  • /tmpHồ sơ tạm thời
  • /usrnắm giữ phần mềm người dùng, thư viện và công cụ
  • /usr/binnhị phân người dùng
  • /usr/includetệp tiêu đề người dùng
  • /usr/libthư viện người dùng
  • /usr/localđược phần mềm người dùng sử dụng để lưu trữ các bản cài đặt, chẳng hạn như Homebrew trên macOS
  • /usr/sbinhệ thống nhị phân
  • /usr/sharechứa dữ liệu độc lập với kiến trúc. Nó có thể chứa rất nhiều thứ linh tinh bao gồm tài liệu và trang người
  • /usr/srcchứa mã nguồn của các gói đã cài đặt (không tồn tại trong macOS)
  • /varchứa các tệp tạm thời, nhật ký và hơn thế nữa

macOS có nhiều thư mục khác nhau, bao gồm

  • /Applicationslưu trữ các ứng dụng của người dùng
  • /Librarygiữ thư viện (cài đặt và tài nguyên) được người dùng hệ thống sử dụng trên toàn cầu
  • /Systemgiữ các tệp hệ thống
  • /privategiữ các tệp hệ thống, nhật ký và hơn thế nữa

Mỗi thư mục chứa các tệp và thư mục, đến lượt nó có thể chứa các tệp và thư mục khác, v.v.

Tất cả các tệp và thư mục đều có tên.

Điều gì tạo nên một cái tên hợp lệ? Nó có thể dài từ 1 đến 255 ký tự và nó phải được tạo từ bất kỳ ký tự chữ và số nào (a-z/A-Z/0-9), ký tự gạch dưới (_), dấu chấm (.) và dấu phẩy (,) nhân vật.

Bạn cũng có thể sử dụng khoảng trắng, mặc dù thường không được khuyến nghị vì không gian cần được thoát bằng dấu gạch chéo ngược mỗi khi bạn phải tham chiếu đến tệp / thư mục.

Tùy thuộc vào hệ thống, hệ thống tệp có thể phân biệt chữ hoa chữ thường. Trên macOS, hệ thống tệp làkhông phảiphân biệt chữ hoa chữ thường theo mặc định, vì vậy bạn không thể đặt tên tệp / thư mụctestvà một người khác được gọi làTest. Họ là những điều tương tự.

Bây giờ tôi sẽ giới thiệu các lệnh tiện ích khác nhau. Chúng được thực thi trong ngữ cảnh của một shell, như Bash, Fish hoặc Zsh. Khi bạn bắt đầu một trình bao, bạn sẽ ở trong thư mục chính của mình. Trong macOS, điều đó được tìm thấy trong/Users/<yourname>/con đường.

Các lệnh không thay đổi nếu bạn thay đổi trình bao mà bạn sử dụng, bởi vì đó là các lệnh cơ bản, cơ bản của UNIX. Bạn có thể sẽ sử dụng các lệnh đó trong nhiều thập kỷ trừ khi một số cuộc cách mạng trong thế giới máy tính xảy ra (và chúng xảy ra, nhưng những thứ phía máy chủ đó thường di chuyển chậm). Để cung cấp cho bạn một số quan điểm,mkdirBây giờ bạn sẽ thấy lệnh đã được giới thiệu trong UNIX AT&T Phiên bản 1, vào đầu những năm 80.

Làm việc với các thư mục và tệp

mkdir

Bạn tạo các thư mục bằng cách sử dụngmkdirchỉ huy:

mkdir fruits

Bạn có thể tạo nhiều thư mục bằng một lệnh:

mkdir dogs cars

Bạn cũng có thể tạo nhiều thư mục lồng nhau bằng cách thêm-pLựa chọn:

mkdir -p fruits/apples

Các tùy chọn trong lệnh UNIX thường có dạng này. Bạn thêm chúng ngay sau tên lệnh và chúng thay đổi cách lệnh hoạt động. Bạn cũng có thể kết hợp nhiều tùy chọn.

Bạn có thể tìm thấy các tùy chọn mà một lệnh hỗ trợ bằng cách nhậpman <commandname>. Hãy thử ngay bây giờ vớiman mkdirví dụ (nhấnqchìa khóa để esc trang man). Trang người đàn ông là trợ giúp tuyệt vời được tích hợp sẵn cho UNIX.

cd

Sau khi bạn tạo một thư mục, bạn có thể di chuyển vào đó bằng cách sử dụngcdchỉ huy.cdcó nghĩactrả thùdthư mục. Bạn gọi nó chỉ định một thư mục để chuyển vào. Bạn có thể chỉ định tên thư mục hoặc toàn bộ đường dẫn.

Thí dụ:

mkdir fruits
cd fruits

Bây giờ bạn đang ở trongfruitsthư mục.

Bạn có thể dùng..đường dẫn đặc biệt để chỉ ra thư mục mẹ:

cd .. #back to the home folder

Ký tự # cho biết phần bắt đầu của nhận xét, kéo dài trong toàn bộ dòng sau khi được tìm thấy.

Bạn có thể sử dụng nó để tạo đường dẫn:

mkdir fruits
mkdir cars
cd fruits
cd ../cars

Có một chỉ báo đường dẫn đặc biệt khác là.và chỉ rahiện hànhthư mục.

Bạn cũng có thể sử dụng các đường dẫn tuyệt đối, bắt đầu từ thư mục gốc/:

cd /etc

pwd

Bất cứ khi nào bạn cảm thấy bị mất trong hệ thống tệp, hãy gọipwdlệnh để biết bạn đang ở đâu:

pwd

Nó sẽ in đường dẫn thư mục hiện tại.

rmdir

Cũng như bạn có thể tạo một thư mục bằng cách sử dụngmkdir, bạn có thể xóa một thư mục bằng cách sử dụngrmdir:

mkdir fruits
rmdir fruits

Bạn cũng có thể xóa nhiều thư mục cùng một lúc:

mkdir fruits cars
rmdir fruits cars

Thư mục bạn xóa phải trống.

Để xóa các thư mục có tệp trong đó, chúng tôi sẽ sử dụngrmlệnh xóa các tệp và thư mục, sử dụng-rfcác tùy chọn:

rm -rf fruits cars

Hãy cẩn thận vì lệnh này không yêu cầu xác nhận và nó sẽ xóa ngay lập tức bất kỳ thứ gì bạn yêu cầu xóa.

Không cóthùng ráckhi xóa tệp khỏi dòng lệnh và khôi phục tệp bị mất có thể khó khăn.

ls

Bên trong một thư mục, bạn có thể liệt kê tất cả các tệp trong thư mục đó bằng cách sử dụnglschỉ huy:

ls

Nếu bạn thêm tên thư mục hoặc đường dẫn, nó sẽ in nội dung thư mục đó:

ls /bin

lschấp nhận rất nhiều lựa chọn. Một trong những kết hợp tùy chọn yêu thích của tôi là-al. Thử nó:

ls -al /bin

so với đồng bằngls, điều này trả về nhiều thông tin hơn.

Bạn có, từ trái sang phải:

  • quyền đối với tệp (và nếu hệ thống của bạn hỗ trợ ACL, bạn cũng nhận được cờ ACL)
  • số lượng liên kết đến tệp đó
  • chủ sở hữu của tệp
  • nhóm của tệp
  • kích thước tệp tính bằng byte
  • ngày giờ đã sửa đổi tệp
  • tên tập tin

Tập hợp dữ liệu này được tạo bởilLựa chọn. Cácathay vào đó, tùy chọn này cũng hiển thị các tệp ẩn.

Tệp ẩn là tệp bắt đầu bằng dấu chấm (.).

touch

Bạn có thể tạo một tệp trống bằng cách sử dụngtouchchỉ huy:

touch apple

Nếu tệp đã tồn tại, nó sẽ mở tệp ở chế độ ghi và dấu thời gian của tệp được cập nhật.

mv

Khi bạn có một tệp, bạn có thể di chuyển nó bằng cách sử dụngmvchỉ huy. Bạn chỉ định đường dẫn hiện tại của tệp và đường dẫn mới của nó:

touch test
mv pear new_pear

Cácpeartệp hiện đã được chuyển đếnnew_pear. Đây là cách bạnđổi têntệp và thư mục.

Nếu tham số cuối cùng là một thư mục, thì tệp nằm ở đường dẫn tham số đầu tiên sẽ được chuyển vào thư mục đó. Trong trường hợp này, bạn có thể chỉ định một danh sách các tệp và tất cả chúng sẽ được di chuyển trong đường dẫn thư mục được xác định bởi tham số cuối cùng:

touch pear
touch apple
mkdir fruits
mv pear apple fruits #pear and apple moved to the fruits folder

cp

Bạn có thể sao chép một tệp bằng cách sử dụngcpchỉ huy:

touch test
cp apple another_apple

Để sao chép các thư mục, bạn cần thêm-rtùy chọn để sao chép đệ quy toàn bộ nội dung thư mục:

mkdir fruits
cp -r fruits cars

ln

Bây giờ chúng ta hãy giới thiệu khái niệm liên kết. Liên kết là một tệp trỏ đến một tệp khác. Chúng tôi có những thứ đó trong tất cả các hệ điều hành chính.

Chúng ta có thể tạo hai loại liên kết: liên kết cứng và liên kết tượng trưng (mềm). Chúng tôi không thể tạo một liên kết cứng đến một thư mục, nhưng chúng tôi có thể tạo một liên kết tượng trưng. Vì lý do này, các liên kết tượng trưng (còn được gọi làliên kết tượng trưng) phổ biến hơn nhiều.

Chúng tôi tạo một liên kết tượng trưng bằng cú pháp sau:ln -s original linkname. Thí dụ:

mkdir fruits
ln -s fruits newfruits

Lưu ý cách tôi sử dụngllchỉ huy. Đây không phải là lệnh tiêu chuẩn, mà là lệnhbí danhchols -al. Trong một trình bao, bạn có thể xác định bí danh là lối tắt cho các tổ hợp lệnh và đối số chung.

Quyền

Tôi đã đề cập đến các quyền một thời gian ngắn trước đây, khi giới thiệuls -alchỉ huy.

Chuỗi kỳ lạ mà bạn thấy trên mỗi dòng tệp, nhưdrwxr-xr-x, xác định các quyền của tệp hoặc thư mục.

Hãy mổ xẻ nó.

Chữ cái đầu tiên cho biết loại tệp:

  • -có nghĩa là nó là một tập tin bình thường
  • dcó nghĩa là nó là một thư mục
  • lcó nghĩa là nó là một liên kết

Sau đó, bạn có 3 bộ giá trị:

  • Tập hợp đầu tiên đại diện cho các quyền củachủ nhâncủa tập tin
  • Tập hợp thứ hai đại diện cho quyền của các thành viên củanhómtệp được liên kết với
  • Tập hợp thứ ba đại diện cho các quyền củaMọi người khác

Các tập hợp đó được tạo bởi 3 giá trị.rwxcó nghĩa là cụ thểcá tínhcó quyền đọc, ghi và thực thi. Bất kỳ thứ gì bị xóa sẽ được hoán đổi bằng-, cho phép bạn tạo nhiều kết hợp giá trị và quyền tương đối:rw-,r--,r-x, và như thế.

Bạn có thể thay đổi các quyền được cấp cho tệp bằng cách sử dụngchmodchỉ huy.

chmodcó thể được sử dụng theo 2 cách. Đầu tiên là sử dụng các đối số tượng trưng, thứ hai là sử dụng các đối số số. Hãy bắt đầu với các biểu tượng trước, nó trực quan hơn.

Bạn gõchmodtheo sau là một khoảng trắng và một chữ cái:

  • aviết tắt củatất cả
  • uviết tắt củangười sử dụng
  • gviết tắt củanhóm
  • oviết tắt củakhác

Sau đó, bạn gõ một trong hai+hoặc là-để thêm quyền hoặc xóa quyền đó. Sau đó, bạn nhập một hoặc nhiều biểu tượng quyền (r,w,x).

Tất cả theo sau là tên tệp hoặc thư mục.

Dưới đây là một số ví dụ:

chmod a+r filename #everyone can now read
chmod a+rw filename #everyone can now read and write
chmod o-rwx filename #others (not the owner, not in the same group of the file) cannot read, write or execute the file

Bạn có thể áp dụng các quyền giống nhau cho nhiều cá tính bằng cách thêm nhiều chữ cái trước+/-:

chmod og-r filename #other and group can't read any more

Trong trường hợp bạn đang chỉnh sửa một thư mục, bạn có thể áp dụng các quyền cho mọi tệp có trong thư mục đó bằng cách sử dụng-rcờ (đệ quy).

Đối số dạng số nhanh hơn nhưng tôi thấy khó nhớ khi bạn không sử dụng chúng hàng ngày. Bạn sử dụng một chữ số đại diện cho các quyền của cá nhân. Giá trị số này có thể lớn nhất là 7 và nó được tính theo cách này:

  • 1nếu có quyền thực thi
  • 2nếu có quyền viết
  • 4nếu có quyền đọc

Điều này cho chúng ta 4 kết hợp:

  • 0không có quyền
  • 1có thể thực hiện
  • 2có thể viết
  • 3có thể viết, thực thi
  • 4có thể đọc
  • 5có thể đọc, thực thi
  • 6có thể đọc, viết
  • 7có thể đọc, viết và thực thi

Chúng tôi sử dụng chúng theo cặp 3, để đặt quyền của cả 3 nhóm hoàn toàn:

chmod 777 filename
chmod 755 filename
chmod 644 filename

Chủ sở hữu và nhóm

Bạn có thể thay đổi chủ sở hữu của tệp bằng cách sử dụngchownchỉ huy:

chown <username> <filename>

Bạn có thể thay đổi nhóm của một tệp bằng cách sử dụngchgrpchỉ huy:

chgrp <group> <filename>

Quản lý nội dung tệp

less

Cáclesslệnh là một trong những tôi sử dụng rất nhiều. Nó hiển thị cho bạn nội dung được lưu trữ bên trong một tệp, trong một giao diện người dùng đẹp và tương tác.

Sử dụng:less <filename>.

Khi bạn đã ở trong mộtlessphiên, bạn có thể thoát bằng cách nhấnq.

Bạn có thể điều hướng nội dung tệp bằng cách sử dụngupdownchìa khóa, hoặc sử dụngspace barbđể điều hướng từng trang. Bạn cũng có thể chuyển đến cuối tệp bằng cách nhấnGvà quay lại phần bắt đầu nhấng.

Bạn có thể tìm kiếm nội dung bên trong tệp bằng cách nhấn/và gõ một từ để tìm kiếm. Tìm kiếm nàyở đằng trước. Bạn có thể tìm kiếm ngược lại bằng cách sử dụng?ký hiệu và gõ một từ.

Lệnh này chỉ hiển thị nội dung của tệp. Bạn có thể mở trực tiếp trình chỉnh sửa bằng cách nhấnv. Nó sẽ sử dụng trình chỉnh sửa hệ thống, trong hầu hết các trường hợp làvim.

NhấnFchìa khóa vàotheo chế độ, hoặc làchế độ xem. Khi tệp bị người khác thay đổi, chẳng hạn như từ chương trình khác, bạn có thể xem các thay đổitrực tiếp. Theo mặc định, điều này không xảy ra và bạn chỉ thấy phiên bản tệp tại thời điểm bạn mở nó. Bạn cần nhấnctrl-Cđể thoát khỏi chế độ này. Trong trường hợp này, hành vi tương tự như chạytail -f <filename>chỉ huy.

Bạn có thể mở nhiều tệp và điều hướng qua chúng bằng cách sử dụng:n(để chuyển sang tệp tiếp theo) và:p(để chuyển đến phần trước).

tail

Tôi vừa đề cậptailtrong lệnh trước, vì vậy hãy sử dụng cơ hội này để giải thích những gì nó làm.

Trường hợp sử dụng tốt nhất của nó theo ý kiến của tôi là khi được gọi với-fLựa chọn. Nó mở tệp ở cuối và theo dõi các thay đổi của tệp. Bất kỳ lúc nào có nội dung mới trong tệp, nó sẽ được in trong cửa sổ. Điều này rất tốt để xem các tệp nhật ký, ví dụ:

tail -f /var/log/system.log

Để thoát, nhấnctrl-C.

Bạn có thể in 10 dòng cuối cùng trong một tệp:

tail -n 10 <filename>

Bạn có thể in toàn bộ nội dung tệp bắt đầu từ một dòng cụ thể bằng cách sử dụng+trước số dòng:

tail -n +10 <filename>

tailcó thể làm được nhiều hơn nữa và như mọi khi, lời khuyên của tôi là kiểm traman tail.

cat

Tương tự vớitailtheo một cách nào đó, chúng tôi cócat. Ngoại trừcatcũng có thể thêm nội dung vào một tệp và điều này làm cho nó trở nên siêu mạnh mẽ.

Trong cách sử dụng đơn giản nhất,catin nội dung của tệp ra đầu ra tiêu chuẩn:

cat file

Bạn có thể in nội dung của nhiều tệp:

cat file1 file2

và sử dụng toán tử chuyển hướng đầu ra>bạn có thể nối nội dung của nhiều tệp vào một tệp mới:

cat file1 file2 > file3

Sử dụng>>bạn có thể nối nội dung của nhiều tệp vào một tệp mới, tạo nội dung đó nếu nó không tồn tại:

cat file1 file2 >> file3

Khi xem các tệp mã nguồn, thật tuyệt khi thấy số dòng và bạn có thể cócatin chúng bằng cách sử dụng-nLựa chọn:

cat -n file1

Bạn chỉ có thể thêm một số vào các dòng không trống bằng cách sử dụng-bhoặc bạn cũng có thể xóa tất cả nhiều dòng trống bằng cách sử dụng-s.

catthường được sử dụng kết hợp với người vận hành đường ống|để cung cấp nội dung tệp làm đầu vào cho một lệnh khác:cat file1 | anothercommand.

wc

wccó nghĩasố từ. Đây là cách sử dụng phổ biến nhất:

  • wc -l file1đếm dòng
  • wc -w file1đếm từ
  • wc -c file1đếm ký tự
  • wc -m file1đếm các ký tự có hỗ trợ multibyte (tức là các biểu tượng cảm xúc được tính là 1, không phải là nhiều ký tự)

Bạn có thể chạywccung cấp nhiều tệp, trong trường hợp đó, nó sẽ thực hiện các phép tính trên từng tệp riêng biệt và sau đó in bản tóm tắt:

find

Cácfindlệnh có thể được sử dụng để tìm các tệp hoặc thư mục phù hợp với một mẫu tìm kiếm cụ thể. Nó tìm kiếm đệ quy.

Hãy tìm hiểu nó bằng ví dụ.

Tìm tất cả các tệp trong cây hiện tại có.jsmở rộng và in đường dẫn tương đối của từng tệp đối sánh:

find . -name '*.js'

Điều quan trọng là sử dụng dấu ngoặc kép xung quanh các ký tự đặc biệt như*để tránh lớp vỏ diễn giải chúng.

Tìm các thư mục dưới cây hiện tại khớp với tên “src”:

find . -type d -name src

Sử dụng-type fđể chỉ tìm kiếm các tệp hoặc-type lđể chỉ tìm kiếm các liên kết tượng trưng.

-namephân biệt chữ hoa chữ thường. sử dụng-inameđể thực hiện tìm kiếm không phân biệt chữ hoa chữ thường.

Bạn có thể tìm kiếm dưới nhiều gốc cây:

find folder1 folder2 -name filename.txt

Tìm các thư mục dưới cây hiện tại khớp với tên “node_modules” hoặc “public”:

find . -type d -name node_modules -or -name public

Bạn cũng có thể loại trừ một đường dẫn bằng cách sử dụng-not -path:

find . -type d -name '*.md' -not -path 'node_modules/*'

Bạn có thể tìm kiếm các tệp có hơn 100 ký tự (byte) trong đó:

find . -type f -size +100c

Tìm kiếm các tệp lớn hơn 100KB nhưng nhỏ hơn 1MB:

find . -type f -size +100k -size -1M

Tìm kiếm tệp đã chỉnh sửa hơn 3 ngày trước

find . -type f -mtime +3

Tìm kiếm các tệp đã chỉnh sửa trong 24 giờ qua

find . -type f -mtime -1

Bạn có thể xóa tất cả các tệp phù hợp với tìm kiếm bằng cách thêm-deleteLựa chọn. Thao tác này sẽ xóa tất cả các tệp đã chỉnh sửa trong 24 giờ qua:

find . -type f -mtime -1 -delete

Bạn có thể thực hiện một lệnh trên mỗi kết quả tìm kiếm. Trong ví dụ này, chúng tôi chạycatđể in nội dung tệp:

find . -type f -exec cat {} \;

thông báo kết thúc\;.{}được điền với tên tệp tại thời điểm thực thi.

Tải xuống miễn phí của tôiSổ tay lệnh Linux


Thêm các hướng dẫn về cli: