Tài liệu dành cho sinh viên về dòng lệnh

Dòng lệnh là một cách điều khiển máy tính mà không cần giao diện người dùng đồ hoạ. Trong bài học này, chúng ta sẽ tìm hiểu các lệnh cơ bản để tương tác với máy tính.

Những điểm chính cần ghi nhớ

  • Học viên sẽ di chuyển trên máy tính bằng các lệnh.
  • Học viên sẽ tạo, di chuyển, sao chép và xoá tệp cũng như thư mục.

Dòng lệnh là gì?

Hầu hết người dùng thường xuyên sử dụng Giao diện người dùng đồ hoạ (GUI) để tương tác với máy tính. Giao diện người dùng đồ hoạ thường dựa vào chuột hoặc thao tác chạm để điều khiển các cửa sổ có biểu tượng, nút, thanh cuộn, v.v.

Dòng lệnh là một chế độ xem thay thế cho máy tính. Đôi khi được gọi là "shell", "terminal", "bash" hoặc "giao diện văn bản", dòng lệnh là:

  • Một phương thức tương tác với chương trình máy tính, trong đó người dùng nhập các lệnh. Ví dụ:
open README.txt
  • Một cách để thao tác và điều khiển máy tính mà không cần dùng chuột.
  • Một cách không dùng đồ hoạ để tạo, đọc, cập nhật, thao tác và xoá các tệp và thư mục. Ví dụ:
mv README.txt readme.txt

Giao diện người dùng đồ hoạ và Dòng lệnh đang xem xét cùng một vấn đề! Đây là những cách tương tác khác nhau với máy tính.

Khi nào chúng ta sử dụng dòng lệnh?

Các nhà phát triển thường ưu tiên giao diện dòng lệnh:

  • Chúng cung cấp một phương tiện ngắn gọn hơn để kiểm soát một chương trình hoặc hệ điều hành. Tại sao? Vì mọi thứ diễn ra trong cùng một cửa sổ, nên khi đã quen, bạn sẽ tốn ít công sức hơn so với việc tìm và thao tác mọi thứ bằng chuột.
  • Chúng dễ dàng hiển thị các lựa chọn để kiểm soát một lệnh. Tại sao? Trình đơn trong giao diện người dùng đồ hoạ (GUI) cung cấp một số lượng rất nhỏ các lựa chọn. Trong dòng lệnh, có hàng trăm lệnh và một vài ký tự được thêm vào một lệnh có thể khiến lệnh đó thực hiện nhiều việc khác nhau. Ví dụ:
  • ls Tệp danh sách cơ bản
  • ls -a Liệt kê tất cả các tệp, kể cả các tệp thường bị ẩn
  • ls -l Danh sách dài, cho thấy thông tin về từng tệp
  • ls -R Đệ quy, liệt kê nội dung của các thư mục
  • ls -la Liệt kê tất cả các tệp
  • Các thao tác này giúp bạn dễ dàng xử lý nhiều tệp cùng lúc theo những cách phức tạp.
for i in *.png; do pngtogif $i `echo $i | sed s/png/gif/`; done
  • Chúng cung cấp một phương tiện để lập trình hệ điều hành (chương trình shell), ví dụ: Ví dụ trên là một chương trình shell rất đơn giản được thiết kế để sửa đổi hình ảnh có tên tệp kết thúc bằng .png.

Dòng lệnh trong thực tế

Các phần của lệnh dòng lệnh

Tất cả các lệnh đều có 3 phần:

  • Lệnh (hoặc tiện ích) luôn được ưu tiên.
  • Cờ là không bắt buộc, tuỳ thuộc vào tiện ích mà bạn đang sử dụng. Cờ luôn bắt đầu bằng dấu - (dấu trừ).
  • Đối số là những thứ mà lệnh sẽ tác động đến hoặc thông tin cần thiết. Thường là tên tệp.

Đóng khung

Bối cảnh và mục đích

Dòng lệnh là một cách điều khiển máy tính mà không cần chuột hoặc GUI (Giao diện người dùng đồ hoạ). Trước khi Apple Computer bắt đầu sản xuất các thiết bị có biểu tượng và thư mục mà bạn có thể nhấp vào, cách duy nhất để tương tác với máy tính là thông qua dòng lệnh.

Là nhà phát triển, chúng tôi sử dụng dòng lệnh vì dòng lệnh nhanh hơn và mạnh mẽ hơn nhiều so với GUI – không cần lãng phí thời gian nhấp chuột. Dòng lệnh có thể cho phép bạn thực hiện hầu hết mọi thao tác tương tác với máy tính.

Vì thiết bị đầu cuối là một giao diện đơn giản hơn nhiều, nên thiết bị này có lợi thế lớn hơn so với GUI khi bạn cần kết nối từ xa với một máy tính qua đường liên kết mạng. Đây là điều mà nhà phát triển thường xuyên làm, chẳng hạn như khi đi du lịch.

Trong bài học này, chúng ta sẽ tìm hiểu các lệnh cơ bản để tương tác với máy tính bằng cách: tạo tệp và thư mục, di chuyển thư mục, thay đổi thư mục và liệt kê nội dung của một thư mục.

Mục tiêu học tập

Học viên sẽ có thể

  • Sử dụng Terminal để di chuyển giữa các tệp và thư mục
  • Liệt kê nội dung của một thư mục
  • Tạo tệp và thư mục trên dòng lệnh
  • Di chuyển tệp và thư mục
  • Sao chép tệp và thư mục
  • Xoá tệp và thư mục

Bắt đầu

Truy cập vào Terminal

Khung hình và mục đích của phần

Terminal cung cấp Giao diện dòng lệnh (CLI) cho hệ điều hành. Nhờ đó, bạn có thể đưa ra hướng dẫn trực tiếp bằng văn bản cho máy tính.

Để làm việc này, chúng ta cần khởi chạy thiết bị đầu cuối dựa trên hệ thống mà bạn đang sử dụng.

Khi khởi động, thiết bị đầu cuối sẽ bắt đầu trong thư mục chính của máy tính (bất kể bạn đặt tên cho máy tính là gì). Thư mục chính của bạn được biểu thị bằng dấu dấu ngã ~.

Khi thảo luận về thế giới của chúng ta trong Terminal, Thư mục cũng giống như Thư mục (đôi khi chúng ta chỉ gọi chúng là Thư mục).

Thay đổi thư mục

Khung hình và mục đích của phần

Để giao tiếp với máy tính trong Terminal và cho máy tính biết chúng ta muốn làm gì, chúng ta cần nói một ngôn ngữ chung. Dòng lệnh hiểu các lệnh được viết bằng ngôn ngữ kịch bản bash. Các lệnh này là từ viết tắt hoặc chữ viết tắt của các từ tiếng Anh.

Khi điều hướng trong thiết bị đầu cuối, bạn cần biết vị trí của mình (điều này cũng áp dụng trực tiếp cho cuộc sống thực – nếu muốn đến một nơi nào đó, trước tiên bạn phải biết vị trí hiện tại của mình).

# See your current location - abbreviation for 'print working directory'
pwd

Liệt kê các tệp và thư mục có sẵn

Trong thư mục làm việc, có thể có một số tệp mà bạn có thể truy cập. Thông thường, chúng ta dựa vào các tín hiệu trực quan như biểu tượng để biết những gì có sẵn, nhưng sẽ rất khó để thao tác trên máy tính nếu chúng ta chỉ đoán vị trí của tệp và thư mục. Trong dòng lệnh, chúng ta sẽ sử dụng một lệnh cụ thể để liệt kê những gì chúng ta có thể truy cập từ một thư mục làm việc bất kỳ / vị trí bất kỳ.

Để xem những tệp hoặc thư mục nào nằm trong thư mục hiện tại, hãy dùng lệnh ls (viết tắt của list) để xem chế độ xem danh sách nội dung.

# See files and folders in current location - abbreviation for 'list'
ls

Thay đổi thư mục đang làm việc

Nếu cần truy cập vào một tệp hoặc thư mục không có trong danh sách, bạn có thể muốn thay đổi thư mục làm việc để dễ dàng truy cập hơn.

Cú pháp để yêu cầu Dòng lệnh chuyển bạn đến một thư mục mới (còn gọi là thư mục) là cd, theo sau (trên cùng một dòng) là đường dẫn đến thư mục mới.

Nếu bạn chuyển đến một thư mục nằm trong thư mục bạn đang truy cập (tức là một thư mục con của thư mục làm việc), hãy dùng lệnh cd, theo sau là tên của thư mục.

# Change your current working directory (current location)
# Abbreviation for 'change directory'
cd Documents

Bạn cũng có thể chuyển đến thư mục ~ gốc.

# Add a `~/` to begin from the home directory.
cd ~/Downloads

Nếu bạn đã thay đổi thư mục nhưng cần thay đổi lại thành thư mục chính, hãy thực hiện bằng cách chuyển hướng trực tiếp về thư mục chính bằng cách sử dụng ~ hoặc sử dụng .. để chuyển hướng lên một cấp.

# Option 1: navigate directly to the home directory
cd ~

# Option 2: navigate back one level
cd ..

Xin lưu ý rằng cd .. chỉ đi lên (trở về) một cấp, vì vậy, nếu đã thay đổi thư mục 3 lần (xuống 3 cấp), bạn sẽ cần sử dụng cd .. 3 lần để quay lại thư mục gốc, nhưng chỉ cần sử dụng cd ~ một lần.

Thử thách nhỏ

  • Sử dụng ls để xem nội dung trong thư mục hiện tại.
  • Chuyển về thư mục gốc rồi dùng ls để xem nội dung của thư mục gốc.
  • Chọn tên của một trong các thư mục nằm trong thư mục chính rồi chuyển đến thư mục mới này.
  • Sử dụng lệnh list để xem nội dung bên trong.

Mẹo hay: Tự động hoàn thành bằng tab

Khi thay đổi thư mục bằng lệnh cd, chỉ cần một lỗi chính tả sẽ khiến lệnh không thực thi đúng cách. Tuy nhiên, khi sử dụng phím tab, hệ thống sẽ tự động hoàn thành tên của mọi thư mục có sẵn nằm trong thư mục hiện tại của bạn. Vì vậy, thay vì nhập cd Documents, bạn chỉ cần nhập cd Do rồi nhấn phím tab. Lúc này, thiết bị đầu cuối sẽ tự động hoàn thành lệnh cd Documents/ cho bạn (/ ở cuối là không bắt buộc nhưng cho bạn biết rằng đích đến là một thư mục).

Tính năng tự động hoàn thành này không chỉ giúp bạn tiết kiệm thời gian khi hoạt động mà còn cung cấp thông tin có giá trị khi không hoạt động. Nếu nút tab không tự động hoàn thành, có thể bạn đã gặp phải một trong 3 vấn đề thường gặp sau:

  1. Bạn không thể truy cập vào thư mục mà bạn muốn chuyển đến từ thư mục đang hoạt động hiện tại.
  2. Có hai thư mục có tên bắt đầu tương tự nhau (chẳng hạn như DocumentsDownloads) và bạn chưa cung cấp đủ thông tin để tính năng tự động hoàn thành biết bạn muốn thư mục nào. Nhấn tab lần nữa để xem danh sách các thư mục có thể khớp với nội dung bạn đã nhập. Sau đó, hãy nhập thêm một chút (đủ để chỉ có một kết quả trùng khớp) rồi nhấn lại tab.
  3. Bạn đã mắc lỗi chính tả trong nửa đầu của từ.

Bạn càng sớm có thói quen sử dụng phím Tab để tự động hoàn thành các lệnh, thì bạn càng có nhiều khả năng xử lý những tình huống khó chịu khi các lệnh của bạn dường như không hoạt động.

Thư mục mẹ và thư mục con

Các thư mục và tệp có thể có mối quan hệ conmẹ với nhau. Nếu directory_b nằm trong directory_a, thì directory_b được gọi là thành phần con của directory_a. directory_a sau đó được gọi là mẹ của directory_b. Nếu một mục thứ ba, my_file, nằm trong directory_b, thì mục đó được xem là con của directory_b và là cháu của directory_a.

Những mối quan hệ này thường được minh hoạ trên các diễn đàn bằng một sơ đồ văn bản, chẳng hạn như:

directory_a/
  directory_b/
    my_file

Xin lưu ý rằng tên thư mục kết thúc bằng / trong khi tên tệp thì không. Cấu trúc phân cấp này thường được gọi là cấu trúc cây của một hệ thống tệp.

Anh chị em

Nếu có nhiều tệp hoặc thư mục ở cùng một cấp, thì chúng được gọi là thư mục ngang hàng. Ví dụ: Nếu file_bfile_c nằm trong directory_a thì chúng là anh chị em.

Sơ đồ văn bản đó sẽ có dạng như sau:

directory_a/
  file_b
  file_c

Xin lưu ý rằng vì file_b và file_c là anh em họ, nên chúng được thụt vào cùng một khoảng.

Đường dẫn tệp

Sau đây là một sơ đồ văn bản phức tạp hơn, có cả mối quan hệ mẹ con và mối quan hệ anh chị em.

north_america/
  united_states/
    new_york/
      new_york_city/
        manhattan
        queens
        staten_island
        bronx
        brooklyn
    california/
      mountain_view
      los_angeles
    illinois/
      chicago
  mexico/
    mexico_city

Trong ví dụ này, new_york_city/ là tên thư mục, nhưng cũng có một đường dẫn, trong đó nêu chi tiết cách truy cập vào thư mục đó: ~/north_america/united_states/new_york/new_york_city/.

Để thay đổi thư mục thành new_york_city/,, bạn có thể chuyển đổi từng bước bằng cách sử dụng tên hoặc bạn có thể chuyển đổi một lần bằng cách sử dụng đường dẫn.

# Option 1: in four steps, using directory names.
cd ~ # navigate home, where these folders are located
cd north_america/
cd united_states/
cd new_york/
cd new_york_city/

# Option 2: in one step, using the path.
cd ~/north_america/united_states/new_york/new_york_city/

Tóm tắt các lệnh điều hướng

# See your current location - abbreviation for 'print working directory'
pwd

# Change to a new location - abbreviation for 'change directory'
cd ~/Downloads

# Navigates into a child directory called `some_directory`
# Only works if `some_directory` is a child of the current directory
cd some_directory

# Navigates into the parent of the current directory
# `..` is shorthand for parent.
cd ..

# Will take you back home
cd

Thử thách nhỏ

  • Sử dụng pwd để biết thư mục hiện tại mà bạn đang truy cập.
  • Thay đổi sang một thư mục khác và xác nhận vị trí mới.
  • Hãy thử lại và chuyển đến một thư mục khác. Sử dụng các lệnh mới để xem vị trí của bạn cũng như xem các tệp trong thư mục này.

Tạo tệp và thư mục

Khung hình và mục đích của phần

Là nhà phát triển, chúng ta sẽ cần tạo các tệp có mã. Để sắp xếp các tệp đó, chúng ta cần tạo thư mục / thư mục để lưu trữ các tệp.

Hãy chú ý đến vị trí của bạn trong thiết bị đầu cuối trước khi tạo tệp và thư mục.

# See your current location.
pwd

Để tạo một tệp, hãy dùng lệnh touch , sau đó là tên tệp.

# `touch` creates a new file.
touch style.css

Khi tạo tệp, hãy thêm phần mở rộng tên tệp để chỉ định loại tệp. Ví dụ về các loại tệp:

  • .js dưới dạng tệp JavaScript
  • .html tạo tệp HTML
  • .css tạo một tệp CSS
  • .md tạo một tệp Markdown

Tên tệp không được có dấu cách.

# make a file - this will create a file in the current folder
touch my_text_file.txt

# make a file - this will create a file on the desktop
touch ~/Desktop/my_new_style_sheet.css

Tạo nhiều tệp

Bạn có thể tạo nhiều tệp cùng một lúc bằng cách thêm khoảng trắng giữa mỗi tên.

# make multiple files - this will create multiple files in the current folder
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html

Tạo thư mục

Để tạo một thư mục, hãy dùng lệnh mkdir (viết tắt của "make directory" – tạo thư mục), sau đó nhập tên của thư mục.

# make a folder - this will create a directory in the current folder
mkdir my_new_folder

# make a folder - this will create a directory on your desktop
mkdir ~/Desktop/my_new_desktop_folder

Tạo nhiều thư mục

Bạn có thể tạo nhiều thư mục cùng một lúc bằng cách thêm dấu cách giữa mỗi tên.

# make multiple folders - this will create multiple folders in the current
# directory
mkdir folder_one folder_two folder_three

Thử thách nhỏ

  • Tạo một tệp mới.
  • Tạo một số tệp bằng một lệnh.
  • Tạo một thư mục mới.
  • Tạo thêm một vài thư mục mới. Hãy thử dùng chỉ một lệnh để thực hiện việc này.
  • Dựa vào những gì bạn biết về cách điều hướng thư mục và tạo tệp cũng như thư mục, hãy tạo một "family_tree" trên máy tính bằng cách sử dụng tệp và thư mục.

Di chuyển và sao chép

Di chuyển tệp và thư mục

Khung hình và mục đích của phần

Chúng ta có thể di chuyển một tệp hoặc thư mục trên dòng lệnh, nhưng luôn cần chỉ định 3 điều:

  1. Chúng ta sử dụng lệnh mv (viết tắt của move).
  2. Theo sau lệnh di chuyển là tên của tệp hoặc thư mục mà bạn muốn di chuyển.
  3. Theo sau tên tệp là đích đến mà bạn muốn di chuyển tệp đến.

Ví dụ: nếu bạn có cấu trúc tệp như sau:

my_child_folder/
my_parent_folder/

Bạn có thể thấy rằng nó không được sắp xếp như lẽ ra phải có – chúng là anh chị em ruột trong khi lẽ ra phải là cha mẹ và con cái. Sử dụng lệnh sau:

# move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder
mv my_child_folder/ my_parent_folder/

Cấu trúc kết quả sẽ có dạng như sau.

my_parent_folder/
  my_child_folder/

Sau đây là một số biến thể khác của lệnh mv:

# move a directory - this will move the folder `my_folder` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_folder ~/Desktop/my_desktop_folder

# move a file - this will move the file `my_file.txt` into the file named
# `my_folder` that is in the current folder
mv my_file.txt my_folder

# move a file - this will move the file `my_file.txt` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_file.txt ~/Desktop/my_desktop_folder

Cảnh báo: mv cũng là lệnh đổi tên tệp bằng cú pháp mv old_name new_name. Điều đó có nghĩa là nếu bạn di chuyển một tệp đến một thư mục không tồn tại hoặc nếu bạn viết sai tên đích đến, thì bản thân tệp đó sẽ được đổi tên thay vì di chuyển.

Thử thách nhỏ

  1. Tạo 5 tệp văn bản (.txt).
  2. Tạo một thư mục mới.
  3. Di chuyển 5 tệp bạn đã tạo vào thư mục.
  4. Tạo một thư mục rồi di chuyển thư mục mới này vào một thư mục khác.

Sao chép tệp và thư mục

Khung hình và mục đích của phần

Khi tạo các ứng dụng web, có thể chúng ta muốn sao chép một tệp (nếu đang tạo hai trang web tương tự, có thể chúng ta không muốn bắt đầu lại từ đầu) và cú pháp cho lệnh cp (sao chép) thực sự tương tự như cú pháp mv.

Sao chép tệp

Lệnh sao chép có 3 phần:

  1. Lệnh cp – viết tắt của copy (sao chép)
  2. Tên của tệp cần sao chép
  3. Tên của bản sao (nếu vẫn ở trong cùng một thư mục) hoặc vị trí và tên (nếu chuyển sang một thư mục khác).
# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`
# The copy will be located in your Documents folder.
cp my_file.txt ~/Documents/my_file_copy.txt

# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`.
# Since no directory was specified, this will occur within the same folder.
cp my_file.txt my_file_copy.txt

Nếu muốn bản sao giữ nguyên tên như bản gốc, bạn có thể chỉ định vị trí sao chép mà không cần tên tệp.

# Copy a file named `my_file.txt` to your Documents folder.
# The destination ends with a directory, so the copy will have the same name.
cp my_file.txt ~/Documents/

Việc có nhiều tệp trùng tên có thể gây nhầm lẫn, vì vậy, bạn chỉ nên sử dụng phương thức này nếu chắc chắn đây là phương thức bạn cần.

Sao chép thư mục

Việc sao chép một thư mục hoặc thư mục con sẽ phức tạp hơn một chút, vì có thể bạn muốn sao chép không chỉ thư mục mà còn cả mọi thứ bên trong thư mục đó.

  1. Lệnh cp -R – viết tắt của copy recursive (sao chép đệ quy) – dùng lệnh này cho cả thư mục trống và không trống
  2. Tên nguồn (thư mục hoặc tệp mà chúng ta muốn di chuyển)
  3. Tên của bản sao (nếu vẫn ở trong cùng một thư mục) hoặc vị trí và tên (nếu chuyển sang một thư mục khác).

Cảnh báo: Khi bạn chỉ định tên cho bản sao, nếu tệp hoặc thư mục chưa được tạo trước đó, thì tệp hoặc thư mục đó sẽ được tạo khi bạn tạo bản sao. Nếu tệp được tạo trước khi bạn chạy lệnh sao chép, thì tệp đó sẽ ghi đè mọi nội dung có trong tệp trước đó, vì vậy hãy cẩn thận!

# copy a directory named `my_folder` from your Desktop folder to a folder
# called `my_folder_copy` in your Documents folder
cp -R ~/Desktop/my_folder ~/Documents/my_folder_copy

# copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder
cp -R my_folder my_folder_copy

Lưu ý: thành phần -R của cp -R được gọi là cờ. Cờ luôn bắt đầu bằng dấu gạch ngang và được dùng kết hợp với các lệnh để đưa ra hướng dẫn cụ thể hơn về cách thực thi lệnh đó.

Thử thách nhỏ

  1. Tạo một tệp có tên là my_original.txt
  2. Tạo một bản sao của my_original.txt và đặt tên mới cho bản sao đó trong cùng thư mục.
  3. Tạo một thư mục mới.
  4. Tạo một bản sao của thư mục đó, nhưng đặt tên khác.
  5. Tạo bản sao của tệp bạn đã sao chép (ở bước 2) nhưng đặt tệp đó vào thư mục bạn đã sao chép (ở bước 4).

Xoá tệp và thư mục

Khung hình và mục đích của phần

Chúng ta có thể xoá các tệp và thư mục trên dòng lệnh, nhưng thao tác này sẽ có hiệu lực vĩnh viễn.

Xoá tệp

Để xoá một tệp, chúng ta có thể dùng lệnh rm (viết tắt của remove) theo sau là tên của tệp.

# delete a file in the working directory
rm unwanted_file.txt

# delete a file not in the working directory
rm ~/Desktop/unwanted_file.txt

Xoá một thư mục trống

Để xoá một thư mục trống, chúng ta có thể dùng lệnh rmdir (viết tắt của remove directory (xoá thư mục)), theo sau là tên của thư mục.

# delete an empty folder
rmdir empty_directory

# delete an empty folder
rmdir ~/Documents/my_files/empty_directory

Xoá một thư mục không trống

Để xoá một thư mục không trống, chúng ta phải đặt một cờ -R (viết tắt của đệ quy) sau lệnh rm. Lệnh này sẽ yêu cầu máy tính xoá nội dung bên trong thư mục. Để cho nhanh, một số nhà phát triển sử dụng cờ -Rf để buộc xoá mọi thứ (nếu không, bạn có thể nhận được lời nhắc về việc xoá một số tệp hoặc thư mục con).

# delete a folder which contains other files or folders
rm -R directory_which_isnt_empty

# delete a folder which contains other files or folders
rm -R ~/Downloads/directory_which_isnt_empty

Cảnh báo: Việc sử dụng lệnh rm không giống như thùng rác hoặc phần nội dung đã xoá trong email của bạn. Bạn không thể dễ dàng khôi phục các tệp này. HÃY CỰC KỲ THẬN TRỌNG khi xoá tệp theo cách này.

Thử thách nhỏ

  1. Tạo 4 tệp.
  2. Xoá 2 tệp.
  3. Tạo thư mục.
  4. Tạo một thư mục khác và tạo một tệp bên trong thư mục này.
  5. Xoá cả hai thư mục.

Bạn có thể tìm thấy mã cho lớp học này trong thư mục sau đây bên trong kho lưu trữ của học viên mà bạn đã tải xuống từ GitHub: command-line/labs/around-the-world

Thông tin khái quát

Kỳ học ở nước ngoài sắp đến và bạn cần bắt đầu lên kế hoạch cho chuyến du lịch Châu Âu...

Trong 3 tháng tới, bạn sẽ có thời gian sinh sống thực sự. Vì vậy, bạn muốn đảm bảo rằng mình tận dụng tối đa mọi chuyến đi cuối tuần.

May mắn là bạn không phải bắt đầu từ đầu và bạn bè đã cung cấp cho bạn một số hoạt động yêu thích của họ trong học kỳ ở nước ngoài. Rất tiếc, một số tệp đã bị lẫn lộn...

Đừng lo lắng, nhờ phép màu của dòng lệnh, bạn sẽ khắc phục được vấn đề trong chốc lát!

Việc cần làm

Đảm bảo rằng mọi thành phố đều thuộc đúng quốc gia và mỗi thư mục thành phố đều có các địa danh phù hợp bên trong. Hãy cẩn thận nếu không bạn có thể kết thúc ở Amsterdam khi đang tìm Tháp Eiffel!

Nếu bạn cảm thấy THỰC SỰ tự tin với điều này, hãy ẩn GUI và đối mặt với thử thách này ngay từ dòng lệnh. Bạn nên ở trong thư mục chung trên toàn thế giới trong khi thực hiện tất cả những việc này, tức là sử dụng đường dẫn tuyệt đối khi tham chiếu đến các thư mục và tệp!

Khi bạn đã chắc chắn mọi thứ đều ổn thoả, bạn có thể kiểm soát vài tháng tiếp theo. Hãy suy nghĩ về những thành phố, quốc gia và công trình mà bạn CẦN tham quan và thêm chúng vào cây tệp của bạn!

Xin chúc mừng! Bạn đã chính thức học được cách giao tiếp với máy tính. Bạn đã sẵn sàng tiến thêm một bước nữa chưa? Hãy cùng thảo luận về các tiện ích...

Phần mở rộng

  1. Trộn lẫn tất cả các tệp của bạn một lần nữa, sau đó chọn một thành phố mà bạn muốn đến. Sắp xếp lại các tệp trong khi vẫn ở thành phố đó.
  2. Hãy thử một trong những trò chơi dòng lệnh thú vị được liên kết bên dưới
    Trò chơi Terminus
    Trò chơi nâng cao (hãy chuẩn bị sẵn sàng để tìm kiếm trên Google)
  3. Bạn là một người hâm mộ cuồng nhiệt của Star Wars? Hãy thử chạy telnet towel.blinkenlights.nl trong dòng lệnh rồi nhấn phím Enter... (Xin lưu ý rằng trong các phiên bản MacOS gần đây, lệnh telnet không còn được cài đặt theo mặc định; trong trường hợp này, bạn có thể sử dụng lệnh nc towel.blinkenlights.nl 23 thay thế.)

Bạn có thể tìm thấy mã cho lớp học này trong thư mục sau đây bên trong kho lưu trữ của học viên mà bạn đã tải xuống từ GitHub: command-line/labs/bashing-away-repetition

Bạn đã sẵn sàng loại bỏ những thao tác lặp lại khi sử dụng dòng lệnh hằng ngày chưa? Tuyệt vời, tôi cũng vậy!

Thông tin khái quát

Nếu có một điều mà các lập trình viên ghét, thì đó là sự lặp lại. Là các nhà khoa học máy tính, công việc của chúng tôi là khiến máy tính thực hiện càng nhiều công việc của chúng tôi càng tốt. Việc viết tập lệnh bash sẽ giúp chúng ta sử dụng dòng lệnh hiệu quả hơn.

Trước tiên, Bash script là gì?

Câu hỏi RẤT HAY. Rất may là người bạn Ryan Chadwick của chúng tôi, tại nơi tuyệt vời này để tìm các hướng dẫn về dòng lệnh, đã có câu trả lời cho chúng ta.

Tập lệnh Bash cho phép chúng ta xác định một loạt hành động mà máy tính sẽ thực hiện mà không cần chúng ta phải tự nhập các lệnh. Nếu một việc cần làm cụ thể được thực hiện thường xuyên hoặc là một việc lặp đi lặp lại, thì tập lệnh có thể là một công cụ hữu ích.

Không lặp lại? Đó là điều tôi muốn nói.

Hướng dẫn

Trước hết, để có thể chạy tập lệnh, bạn cần cấp cho máy tính của mình quyền. Hãy thực hiện việc này bằng cách chạy lệnh bên dưới.

chmod 755 myScript.sh

Đã đến lúc viết chương trình đầu tiên. Chuyển đến myScript.sh (xem bạn có thể mở tệp này từ dòng lệnh hay không). Ở cuối tệp, hãy thêm:

echo "Hello World"

Chạy ngay:

./myScript.sh

trong thiết bị đầu cuối. ** TA DA ** bạn sẽ thấy "Hello World" được in trong thiết bị đầu cuối.

lễ kỷ niệm

Mọi nội dung bạn viết trong tập lệnh bash sẽ chạy như thể bạn đã nhập nội dung đó vào thiết bị đầu cuối. Hãy xem thêm một ví dụ nữa trước khi chuyển sang phần tiện ích. Trước tiên, hãy tạo một tệp cho tập lệnh của bạn. Bạn có thể đặt tên tuỳ ý cho tệp này nhưng tệp phải có đuôi .sh. Tiếp theo, hãy đảm bảo rằng bạn cấp quyền chạy cho tập lệnh bằng cách nhập chmod 755 rồi nhập tên tập lệnh vào thiết bị đầu cuối và nhấn Enter. Mỗi khi bắt đầu một tập lệnh bash mới, bạn nên nhớ hoàn tất hai bước đó.

Thử thách phần giới thiệu

Bây giờ, hãy thử viết một tập lệnh tạo thư mục mới. Chúng ta biết lệnh nào sẽ tạo một thư mục mới? Nếu đang nghĩ đến một từ bắt đầu bằng m và kết thúc bằng kdir, thì bạn đang đi đúng hướng. Viết lệnh sẽ tạo thư mục mới và đặt tên cho thư mục đó trong tệp .sh mới, sau đó chạy lệnh trong thiết bị đầu cuối.

Nếu cách này hiệu quả, hãy chuyển sang các thử thách khác được liệt kê bên dưới. Nếu bạn vẫn còn hơi bối rối, hãy thử xem lại phòng thí nghiệm "vòng quanh thế giới" và suy nghĩ về cách bạn tạo các thư mục quốc gia và thành phố mới.

Đừng ngại sử dụng hướng dẫn được liên kết ở trên và hãy sẵn sàng thể hiện kỹ năng tìm kiếm thông tin trên Google một cách hiệu quả nhất. Viết và chạy các tập lệnh thực hiện những việc sau:

Nhiệm vụ chính

  1. Thêm một lệnh vào tệp bạn đã tạo ở trên để chuyển đến thư mục bạn đang tạo. (Chúng ta dùng lệnh nào để thay đổi thư mục?)
  • Thêm dấu thời gian vào tên thư mục mới. Ví dụ: chương trình của bạn phải tạo một thư mục có tên là "2017-12-07my_super_cool_folder"
  1. In ra "Thư mục hiện tại của tôi là: " theo sau là thư mục làm việc của bạn và "Đây là danh sách mọi thứ trong thư mục này! " theo sau là nội dung của thư mục hiện tại.
  2. Tìm hiểu cách cung cấp dữ liệu đầu vào cho tập lệnh bash và tạo một tệp dựa trên chuỗi đầu vào đó. Hướng dẫn được liên kết trước đó trong lớp học này có một số ví dụ hay trong phần biến mà bạn nên xem.
  3. Yêu cầu người dùng điền tên của họ, sau đó in ra "Chào bạn, rất vui được gặp bạn chèn tên của họ vào đây"
  • Hãy thử yêu cầu người dùng cung cấp thêm thông tin và tạo một thông báo tuỳ chỉnh cho họ.

BỐI CẢNH

Dòng lệnh (hoặc Terminal) cung cấp một cách tương tác trực tiếp với Hệ điều hành (OS) của máy tính – mọi thứ mà giao diện người dùng đồ hoạ (GUI) thực hiện, nhưng thông qua các lệnh văn bản – từ việc điều hướng, tạo tệp mới cho đến thực thi tập lệnh. Dòng lệnh sẽ được dùng để mở tệp và khởi động môi trường phát triển khi sử dụng Google App Engine.

Dòng lệnh trong thực tế

Truy cập vào Terminal

Phím tắt trên máy Mac:

  • Mở Spotlight bằng cách nhấn Command + phím cách.
  • Nhập Terminal (Thiết bị đầu cuối) vào Spotlight Search (Tìm kiếm bằng Spotlight).
# See your current location - abbreviation for 'print working directory'.
pwd

# Change to a new location - abbreviation for 'change directory'.
cd /Users/jsmith/Downloads

# Navigate into a child directory called `some_directory`. This only works if
# `some_directory` is a child of the current directory.
cd some_directory

# Navigate into the parent of the current directory. `..` is shorthand for parent.
cd ..

# Return home.
cd

# Change directories to a folder called `my_folder` that is within the current
# directory.
cd my_folder ```

#### File Path Shorthand `~`

The `~` is generally short for "home". Home can be configured to mean different
things for different users and across different operating systems, but in the
example above, for a Mac user named "jsmith", the `~` is short for that user's
home directory: `/Users/jsmith`.

This means that `~/Downloads` and `/Users/jsmith/Downloads` are the same for
this user. But starting with a `~` allows us to specify absolute file paths
(agnostic of your current working directory, and starting at the root `/`)
without having to write out a full path each time.

### <a id="view"></a>Viewing the Contents of Folders

```bash
# See files and folders in current location - this is an abbreviation for 'list'.
ls

Tạo tệp và thư mục

Tạo tệp

# Make a file - this will create a file in the current folder.
touch my_text_file.txt

# Make a file - this will create a file on the Desktop.
touch ~/Desktop/my_new_style_sheet.css

# Make multiple files - this will create multiple files in the current folder.
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html

Tạo thư mục

# Make a folder - this will create a directory in the current folder.
mkdir my_new_folder

# Make a folder - this will create a directory on your Desktop.
mkdir ~/Desktop/my_new_desktop_folder

# Make multiple folders - this will create multiple folders in the current
# directory.
mkdir folder_one folder_two folder_three

Di chuyển tệp và thư mục

Di chuyển tệp

# Move a file - this will move the file `my_file.txt` into the folder named
# `my_folder` that is in the current folder.
mv my_file.txt my_folder
# Note that this will rename the file instead of moving it if the destination
# folder does not yet exist.  Read below for more details on renaming.

# Move a file - this will move the file `my_file.txt` into the folder named
# `my_desktop_folder` that is located on the Desktop.
mv my_file.txt ~/Desktop/my_desktop_folder

Di chuyển thư mục

# Move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder.
mv my_child_folder my_parent_folder

# Move a directory - this will move the folder `my_folder` into the folder
# named `my_desktop_folder` that is located on the Desktop.
mv my_folder ~/Desktop/my_desktop_folder

Di chuyển là Đổi tên

Xin lưu ý rằng mv cũng là lệnh dùng để đổi tên tệp hoặc thư mục.

# Rename a file from `old_name.txt` to `new_name.txt`.
mv old_name.txt new_name.txt

Sao chép tệp và thư mục

Sao chép tệp

# Copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder.
cp ~/Desktop/my_file.txt ~/Documents

# Copy a file named `my_file.txt` to a file called `my_file_copy.txt` within
# the same folder.
cp my_file.txt my_file_copy.txt

Sao chép thư mục

# Copy a directory named `my_folder` (and its contents) from your Desktop
# folder to a folder called `my_folder_copy` in your Documents folder.
cp -r ~/Desktop/my_folder ~/Documents/my_folder_copy

# Copy a directory named `my_folder` (and its contents) from the current
# working directory to a folder called `my_folder_copy` in the current working
# directory.
cp -r my_folder my_folder_copy

Xoá tệp và thư mục

Xoá tệp

# Delete a file in the current working directory.
rm unwanted_file.txt

# Delete a file using its exact location and name.
rm ~/Desktop/unwanted_file.txt

Xoá thư mục

# Delete an empty folder.
rmdir empty_directory

# Delete a folder which contains other files or folders.
rm -r directory_which_isnt_empty

Mẹo và thủ thuật

  • Thực hành sử dụng dòng lệnh, ngay cả khi bạn cho rằng mình không cần. Bạn sẽ làm tốt hơn theo thời gian.
  • Phím tab sẽ tự động hoàn thành tên tệp hoặc tên thư mục của bạn (có thể phân biệt chữ hoa chữ thường).
  • Nếu chỉ còn một tệp hoặc thư mục phù hợp, thì hệ thống sẽ tự động hoàn thành.
  • Nếu có nhiều tệp hoặc thư mục trùng khớp, hãy nhấn phím tab hai lần để xem danh sách các kết quả trùng khớp còn lại.
  • Mũi tên lên / xuống sẽ chuyển đổi qua nhật ký lệnh để bạn không phải nhập lại lệnh.
  • Sử dụng lệnh clear để xoá cửa sổ Terminal. Thao tác này sẽ giữ lại tất cả công việc trước đó của bạn. Hãy di chuyển lên trên để xem.
  • Dùng reset để khởi động lại thiết bị đầu cuối. Thao tác này sẽ không giữ lại công việc trước đó của bạn trên màn hình, nhưng có thể giải quyết một số vấn đề nếu Terminal bắt đầu hoạt động theo những cách khó đoán.
  • Nhấn option + arrow để di chuyển con trỏ theo từ

Tóm tắt các phương pháp hay nhất

  • Di chuyển trong Terminal bằng cd, cd .. hoặc cd <folder name>.
  • Xem nội dung của các thư mục bằng cách dùng ls.
  • Tạo tệp bằng biểu tượng touch; tạo thư mục bằng biểu tượng mkdir.
  • Di chuyển tệp và thư mục bằng mv <item to move> <destination>.
  • Sao chép tệp và thư mục bằng cp <item to copy> <destination>.
  • Xoá tệp và thư mục bằng rm <item to remove>.

Câu hỏi 1

Bạn sẽ dùng lệnh nào để xác định thư mục làm việc hiện tại?

  1. pwd
  2. ls
  3. cd
  4. mkdir
  5. touch

Câu hỏi 2

Làm cách nào để di chuyển lên 2 cấp từ thư mục đang hoạt động hiện tại?

  1. mv ~
  2. cd ../..
  3. mv up/up
  4. cd ^(2)

Câu hỏi 3

Bạn sẽ dùng lệnh nào để đổi tên một tệp?

  1. mv
  2. cd
  3. ls
  4. python
  5. rename

Câu hỏi 4

Tại sao lệnh mv script.py lại báo lỗi?

  1. Vì "script.py" là tên tệp không hợp lệ.
  2. Vì lệnh mv không được theo sau bởi bất kỳ thông tin nào khác.
  3. Đây là một câu hỏi mẹo; nó sẽ không báo lỗi.
  4. Vì việc di chuyển một tệp cần ít nhất 2 đối số – đích đến và đích

Câu hỏi 5

Lệnh cd ~ sẽ làm gì?

  1. Thay đổi thư mục đang hoạt động thành thư mục chính.
  2. Lặp lại lệnh trước đó.
  3. Sử dụng một thuật toán để xác định lệnh hữu ích nhất tại thời điểm này.
  4. Gây ra lỗi.

Câu hỏi 6

Đâu KHÔNG phải là lý do nên sử dụng phím tab để tự động hoàn thành tên tệp?

  1. Vì việc này giúp tiết kiệm thời gian.
  2. Vì tính năng này giúp loại bỏ lỗi chính tả.
  3. Vì phương pháp này đòi hỏi ít sức mạnh xử lý hơn.

Câu hỏi 7

Nếu một nhà phát triển mới cố gắng tạo một tệp có tên là "my script.py", tại sao lệnh touch my script.py sẽ không hoạt động?

  1. touch không thể tạo tệp mới.
  2. .py không phải là đuôi tệp hợp lệ.
  3. Vì thao tác này sẽ tạo ra 2 tệp, một tệp có tên là "my" và một tệp có tên là "script.py" thay vì chỉ một tệp.
  4. Vì không thể tạo tệp mới từ dòng lệnh.

Câu hỏi 1

Bạn sẽ dùng lệnh nào để xác định thư mục làm việc hiện tại?

pwd

Câu hỏi 2

Làm cách nào để di chuyển lên 2 cấp từ thư mục đang hoạt động hiện tại?

Với cd ../.., bạn sẽ di chuyển lên 2 cấp (mỗi .. đại diện cho một cấp ở trên).

Câu hỏi 3

Bạn sẽ dùng lệnh nào để đổi tên một tệp?

mv được dùng để di chuyển tệp từ vị trí này sang vị trí khác và cũng có thể dùng để thay đổi tên tệp.

Câu hỏi 4

Tại sao lệnh mv script.py lại báo lỗi?

Lệnh mv yêu cầu 2 đối số, một tệp nguồn và một tệp đích.

Câu hỏi 5

Lệnh cd ~ sẽ làm gì?

Lệnh này sẽ thay đổi thư mục đang hoạt động thành thư mục chính của bạn. Ký tự đặc biệt ~ được dùng để xác định thư mục gốc của người dùng hiện tại. Bạn cũng có thể dùng lệnh này kết hợp với một tên người dùng khác: ~user2 để trỏ đến thư mục chính của người dùng đó.

Câu hỏi 6

Đâu KHÔNG phải là lý do nên sử dụng phím tab để tự động hoàn thành tên tệp?

Vì cần ít sức mạnh xử lý hơnkhông chính xác. tab yêu cầu một lượng sức mạnh xử lý (thường không đáng kể) để quét các thư mục nhằm tìm tên tệp để tự động hoàn thành, nhưng tính năng này giúp tiết kiệm thời gian và tránh lỗi chính tả trong quá trình này.

Câu hỏi 7

Nếu một nhà phát triển mới cố gắng tạo một tệp có tên là "my script.py", tại sao lệnh touch my script.py sẽ không hoạt động?

Thao tác này sẽ tạo ra hai tệp thay vì chỉ một. Lệnh touch sẽ tạo các tệp mới. Trong dấu cách của thiết bị đầu cuối là dấu phân cách, không phải là ký tự được đưa vào tên tệp. Tốt nhất là bạn nên tránh hoàn toàn các ký tự này, nhưng nếu bắt buộc phải sử dụng, bạn nên đặt tên tệp trong dấu ngoặc kép:

touch "my script.py"

Câu hỏi 1

Lệnh trên thiết bị đầu cuối để thay đổi thư mục là:

  1. move
  2. mkdir
  3. pwd
  4. cd

Câu hỏi 2

Bạn sẽ chạy lệnh nào nếu muốn chuyển đến thư mục mẹ của thư mục đang hoạt động?

  1. cd up
  2. cd .
  3. cd ..
  4. cd ~

Câu hỏi 3

Lệnh nào được dùng để tạo tệp?

  1. touch
  2. mkdir
  3. create
  4. pwd

Câu hỏi 4

Lệnh nào sau đây sẽ tạo ra hai tệp có tên là index.htmlstyle.css?

  1. touch index.html, touch style.css
  2. touch index.html, style.css
  3. touch index.html style.css
  4. touch index.html + style.css

Câu hỏi 5

Bạn dùng lệnh nào để đổi tên tệp hoặc thư mục?

  1. rename
  2. move
  3. mv
  4. rm

Câu hỏi 6

Lệnh rm cp cần có cờ nào để hoạt động trên các thư mục?

  1. -f
  2. -r
  3. -x
  4. -d

Câu hỏi 7

Để di chuyển projects sang ~/Documents và đổi tên thành Projects, bạn phải dùng lệnh nào trong dấu cách?

cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects
  1. pwd
  2. cd projects
  3. mv ~ projects
  4. cd ~/Documents
  5. ls

Câu hỏi 8

Lệnh sau sẽ làm gì?

rm -r projects

  1. Xoá tệp có tên là projects
  2. Xoá thư mục có tên là projects
  3. Đổi tên tệp có tên là projects
  4. Tìm nội dung của thư mục hiện tại cho projects

Câu hỏi 1

Lệnh trên thiết bị đầu cuối để thay đổi thư mục là:

Lệnh dòng lệnh để thay đổi thư mục là cd. Bản thân lệnh này là từ viết tắt của "change directory" (thay đổi thư mục).

Câu hỏi 2

Bạn sẽ chạy lệnh nào nếu muốn chuyển đến thư mục mẹ của thư mục đang hoạt động?

Lệnh chuyển đến thư mục mẹ là cd ..

Câu hỏi 3

Lệnh nào được dùng để tạo tệp?

Lệnh tạo tệp là touch

Câu hỏi 4

Lệnh nào sau đây sẽ tạo ra hai tệp có tên là index.htmlstyle.css?

Lệnh touch index.html style.css sẽ tạo ra 2 tệp. Bạn không cần dùng dấu phẩy và có thể tạo bao nhiêu tệp tuỳ ý theo cách này, chỉ cần tách các tệp bằng dấu cách.

Câu hỏi 5

Bạn dùng lệnh nào để đổi tên tệp hoặc thư mục?

Mặc dù có nghĩa là "di chuyển" và có thể dùng để di chuyển tệp hoặc thư mục, nhưng bạn cũng có thể dùng biểu tượng mv để đổi tên tệp và thư mục.

Câu hỏi 6

Lệnh rm cp cần có cờ nào để hoạt động trên các thư mục?

Các lệnh rmcp yêu cầu cờ -r hoạt động trên các thư mục, vì cờ -r có nghĩa là "đệ quy" và chạy lại lệnh cho mọi tệp và thư mục có trong đó.

Câu hỏi 7

Để di chuyển projects sang ~/Documents và đổi tên thành Projects, bạn phải dùng lệnh nào trong dấu cách?

cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects

Vì bắt đầu trong thư mục chính, chúng ta cần chạy cd ~/Documents để có được lệnh cuối cùng cần chạy trong thư mục chính xác.

Câu hỏi 8

Lệnh sau sẽ làm gì?

rm -r projects

Lệnh này sẽ xoá một tệp HOẶC một thư mục có tên là projects vì lệnh này được gọi bằng cờ -r hoặc cờ đệ quy. Nếu không có cờ đó, lệnh này sẽ chỉ hoạt động để xoá một tệp có tên đó.