Làm thế nào để trở thành một trình hướng dẫn dòng lệnh

Lớp khoa học máy tính hữu ích nhất có thể bạn chưa từng tham gia

Hình ảnh được tạo bằng Khuếch tán ổn định

OĐiều mà tôi luôn quan sát thấy trong suốt sự nghiệp của mình là các nhà khoa học và kỹ sư dữ liệu hiệu quả nhất thường có một điểm chung: họ thuật sĩ dòng lệnh. Họ có thể điều hướng hệ thống tệp của máy tính, tìm kiếm các mẫu trong tệp nhật ký và quản lý công việc, mã nguồn và kiểm soát phiên bản, tất cả đều từ dòng lệnh mà không cần dựa vào việc điều hướng chậm bằng chuột và giao diện người dùng đồ họa.

Tuy nhiên, 'thuyết thuật' dòng lệnh này, vì nó có thể xuất hiện đối với những người không quen với các công cụ shell, thường không phải là một phần của chương trình giảng dạy khoa học máy tính tiêu chuẩn. MỘT khóa học MIT xung quanh việc làm chủ dòng lệnh của bạn được đặt tên một cách thích hợp “Học kỳ còn thiếu trong quá trình giáo dục CS của bạn".

Bài đăng này là lớp 'thuật sĩ dòng lệnh 10' gồm 101 bài học cá nhân của tôi, dành cho những độc giả muốn làm việc nhiều hơn với dòng lệnh và ít hơn với giao diện người dùng đồ họa. Chúng tôi sẽ đề cập đến những điều cơ bản xung quanh shell và biến đường dẫn, bí danh, quyền truy cập tệp, truyền phát và dẫn đường, quản lý công việc hiệu quả, tmux, ssh, git và vim.

Bắt đầu nào. Chào mừng đến với CLW 101.

1. Vỏ

Khi bạn mở thiết bị đầu cuối của mình, bạn đang nhìn thấy một shell, chẳng hạn như bash (borne Again shell) hoặc ZSH (z-shell). Shell thực sự là một ngôn ngữ lập trình hoàn chỉnh với quyền truy cập vào một số chương trình tiêu chuẩn nhất định cho phép điều hướng hệ thống tệp và thao tác dữ liệu. Bạn có thể biết mình đang chạy shell nào bằng cách gõ:

echo $ SHELL

Trong bash, mỗi khi bạn khởi động một shell mới, shell sẽ tải một chuỗi lệnh được chỉ định bên trong shell đó. .bashrc tệp thường nằm trong thư mục chính của bạn (nếu bạn sử dụng máy Mac, thường có một .bash_profile tập tin thay thế). Trong tệp đó, bạn có thể chỉ định những thứ hữu ích như biến đường dẫn hoặc bí danh của mình (xem thêm thông tin bên dưới).

2. Biến đường dẫn

Khi bạn nhập tên của một số chương trình nhất định vào shell của mình, chẳng hạn như python, cat, hoặc là ls, làm sao shell biết lấy chương trình đó từ đâu? Đó là mục đích của biến đường dẫn. Biến này lưu trữ danh sách tất cả các đường dẫn mà shell tìm kiếm các chương trình, được phân tách bằng dấu hai chấm. Bạn có thể kiểm tra biến đường dẫn của mình bằng cách gõ:

echo $ PATH

Và bạn có thể thêm các thư mục bổ sung vào biến đường dẫn của mình bằng lệnh này:

xuất PATH="my_new_path:$PATH"

Tốt nhất là thêm lệnh này vào tệp bashrc của bạn để thư mục bổ sung luôn nằm trong đường dẫn của bạn khi bạn khởi động shell mới.

3. Bí danh

bí danh là các lệnh tùy chỉnh mà bạn có thể xác định để tránh phải gõ đi gõ lại các lệnh dài dòng, chẳng hạn như:

bí danh ll="ls -lah"
bí danh gs="trạng thái git"
bí danh gp="git đẩy nguồn gốc chủ"

Bí danh cũng có thể được sử dụng để tạo các biện pháp bảo vệ cho quy trình phát triển của bạn. Ví dụ, bằng cách xác định

bí danh mv="mv -i"

thiết bị đầu cuối của bạn sẽ cảnh báo bạn nếu tệp bạn sắp di chuyển đã tồn tại trong thư mục mới, để bạn không vô tình ghi đè lên các tệp mà bạn không cố ý ghi đè.

Khi bạn thêm các bí danh này vào tệp bashrc của mình, chúng sẽ luôn khả dụng khi bạn khởi động shell mới.

4. Quyền truy cập tệp và sudo

Khi nhiều người dùng dùng chung một máy, điều quan trọng là phải đặt quyền tập tin xác định người dùng nào có thể thực hiện thao tác nào trên dữ liệu nào. Khi bạn gõ ls -l, bạn sẽ thấy các tệp trong thư mục hiện tại cùng với quyền của chúng ở dạng sau:

-rwxrwxrwx

Ở đây,

  • rwx đại diện cho quyền đọc, viết và thực thi tương ứng
  • các 3 rwx các khối dành cho (1) người dùng, (2) nhóm người dùng và (3) những người khác. Trong ví dụ đã cho, cả 3 thực thể này đều có quyền đọc, ghi và thực thi.
  • dấu gạch ngang cho biết đây là một tập tin. Thay vì dấu gạch ngang, bạn cũng có thể thấy một d cho thư mục hoặc l cho một liên kết tượng trưng.

Bạn có thể chỉnh sửa quyền truy cập tệp bằng chmod. Ví dụ: nếu bạn muốn tạo một tệp có thể thực thi được cho chính mình, bạn hãy nhập

chmod u+x my_program.py

👉 Nếu một tập tin có thể thực thi được thì làm sao shell biết cách thực thi nó? Điều này được chỉ định bằng 'hashbang' ở hàng đầu tiên của tệp, chẳng hạn như #!/bin/bash cho một tập lệnh bash hoặc #!/bin/python cho một tập lệnh python.

Cuối cùng, có một 'siêu người dùng' đặc biệt có tất cả các quyền đối với tất cả các tệp. Bạn có thể chạy bất kỳ lệnh nào khi siêu người dùng đó viết sudo trước lệnh đó. Bạn cũng có thể khởi chạy một shell sudo độc lập bằng cách thực thi

sudo su

⚠️ Sử dụng sudo một cách cẩn thận. Với sudo, bạn có thể thực hiện các thay đổi đối với mã kiểm soát phần cứng máy tính của mình và một sai sót có thể khiến máy của bạn không sử dụng được. Hãy nhớ rằng, sức mạnh lớn sẽ đi kèm với trách nhiệm lớn.

5. Truyền phát và dẫn đường

Sản phẩm trực tuyến nhà điều hành > chuyển hướng đầu ra từ một chương trình sang một tập tin. >> thực hiện điều tương tự, nhưng nó sẽ thêm vào một tệp hiện có thay vì ghi đè lên nó, nếu nó đã tồn tại. Điều này rất hữu ích để ghi nhật ký các chương trình của riêng bạn như thế này:

python my_program.py > tệp nhật ký

Một khái niệm hữu ích khác là đường ống: x | y thực thi chương trình x và chuyển đầu ra từ x sang chương trình y. Ví dụ:

  • cat log.txt | tail -n5 : in 5 dòng cuối cùng từ log.txt
  • cat log.txt | head -n5 : in 5 dòng đầu tiên từ log.txt
  • cat -b log.txt | grep error : hiển thị tất cả các dòng trong log.txt có chứa chuỗi “error”, cùng với số dòng (-b)

6. Quản lý công việc

Nếu bạn chạy một chương trình từ dòng lệnh của mình (ví dụ: python run.py), chương trình theo mặc định sẽ chạy trong tiền cảnhvà ngăn bạn làm bất cứ điều gì khác cho đến khi chương trình hoàn tất. Trong khi chương trình đang chạy ở nền trước, bạn có thể:

  • gõ control+C, tín hiệu này sẽ gửi tín hiệu SIGINT (ngắt tín hiệu) đến chương trình, hướng dẫn máy ngắt chương trình ngay lập tức (trừ khi chương trình có cách xử lý các tín hiệu này bên trong).
  • gõ control+Z, lệnh này sẽ tạm dừng chương trình. Sau khi tạm dừng, chương trình có thể được tiếp tục bằng cách đưa nó lên nền trước (fg) hoặc bằng cách gửi nó tới backgroud (bg).

Để bắt đầu lệnh của bạn ở chế độ nền ngay lập tức, bạn sử dụng & nhà điều hành:

python run.py &

👉 Làm sao để biết hiện tại chương trình nào đang chạy ngầm? Sử dụng lệnh jobs. Điều này sẽ hiển thị tên của các công việc đang chạy cũng như id tiến trình (PID) của chúng.

Cuối cùng,kill là chương trình gửi tín hiệu đến các chương trình chạy ngầm. Ví dụ,

  • kill -STOP %1 gửi tín hiệu STOP, tạm dừng chương trình 1.
  • kill -KILL %1 gửi tín hiệu KILL, chấm dứt chương trình 1 vĩnh viễn.
Bốn khung thiết bị đầu cuối trên thiết bị đầu cuối Macbook cá nhân của tôi có tmux (hình ảnh của tác giả).

7. tmux

tmux ("bộ ghép kênh đầu cuối") cho phép bạn dễ dàng tạo các thiết bị đầu cuối mới và điều hướng giữa chúng. Điều này có thể cực kỳ hữu ích, ví dụ: bạn có thể sử dụng một thiết bị đầu cuối để điều hướng hệ thống tệp của mình và một thiết bị đầu cuối khác để thực thi công việc. Với tmux, bạn thậm chí có thể có cả hai thứ này cạnh nhau.

👉 Một lý do khác để tìm hiểu tmux là phát triển từ xa: khi bạn đăng xuất khỏi máy từ xa (cố ý hoặc vô tình), tất cả các chương trình đang chạy tích cực bên trong shell của bạn sẽ tự động bị chấm dứt. Mặt khác, nếu bạn chạy các chương trình của mình bên trong shell tmux, bạn có thể chỉ cần tách cửa sổ tmux, đăng xuất, đóng máy tính và quay lại shell đó sau như thể bạn chưa từng đăng xuất.

Dưới đây là một số lệnh cơ bản để giúp bạn bắt đầu với tmux:

  • tmux new -s run tạo phiên cuối mới với tên 'run'
  • control-BD: tách cửa sổ này ra
  • tmux a : đính kèm vào cửa sổ mới nhất
  • tmux a -t run : đính kèm vào cửa sổ gọi là 'run'
  • control-B“ : thêm một khung terminal khác bên dưới
  • control-B% : thêm một khung terminal khác ở bên phải
  • control-B➡️ : di chuyển đến terminal ở bên phải (tương tự với trái, lên, xuống)

8. Cặp SSH và khóa

ssh là một chương trình để đăng nhập vào máy từ xa. Để đăng nhập vào các máy từ xa, bạn cần cung cấp tên người dùng và mật khẩu hoặc bạn sử dụng một cặp khóa, bao gồm khóa chung (mà cả hai máy đều có quyền truy cập) và khóa riêng (chỉ có máy của bạn mới có quyền truy cập). có quyền truy cập).

ssh-keygen là một chương trình để tạo ra một cặp khóa như vậy. Nếu bạn chạy ssh-keygen, theo mặc định nó sẽ tạo một khóa công khai có tên id_rsa.pub và một khóa riêng có tên id_rsavà đặt cả hai vào ~/.ssh danh mục. Bạn sẽ cần thêm khóa chung vào máy từ xa, như bạn đã biết hiện tại, bạn có thể thực hiện bằng cách kết nối với nhau cat, sshvà toán tử phát trực tuyến:

mèo .ssh/id_rsa.pub | ssh user@remote 'cat >> ~/.ssh/authorized_keys'

Bây giờ bạn sẽ có thể sử dụng ssh vào điều khiển từ xa chỉ bằng cách cung cấp khóa riêng của mình:

ssh từ xa -i ~/.ssh/id_rsa

Một cách tốt hơn nữa là tạo một tập tin ~/.ssh/config chứa tất cả các cấu hình xác thực ssh của bạn. Ví dụ, nếu bạn config tệp như sau:

Nhà phát triển máy chủ
Tên máy chủ từ xa
IdentityFile ~/.ssh/id_rsa

Sau đó, bạn có thể đăng nhập vào điều khiển từ xa bằng cách gõ ssh dev.

9. git

git là một hệ thống kiểm soát phiên bản cho phép bạn điều hướng hiệu quả lịch sử tạo phiên bản mã và các nhánh của mã từ dòng lệnh.

👉 Lưu ý nhé git không giống với GitHub: git là một chương trình độc lập có thể quản lý phiên bản mã của bạn trên máy tính xách tay cục bộ, trong khi GitHub là nơi lưu trữ mã của bạn từ xa.

Dưới đây là một số lệnh git cần thiết:

  • git add : chỉ định những tệp bạn muốn đưa vào lần xác nhận tiếp theo
  • git commit -m 'my commit message' : cam kết thay đổi mã
  • git checkout -b dev : tạo một nhánh mới có tên 'dev' và kiểm tra nhánh đó
  • git merge dev : hợp nhất dev vào nhánh hiện tại. Nếu điều này tạo ra xung đột hợp nhất, bạn sẽ cần khắc phục các xung đột này theo cách thủ công, sau đó chạy git add file_that_changed; git merge --continue
  • git stash : hoàn nguyên tất cả các thay đổi và git stash pop mang họ trở lại. Điều này hữu ích nếu bạn thực hiện các thay đổi đối với nhánh chính và sau đó quyết định rằng bạn thực sự muốn những thay đổi đó trở thành một nhánh riêng biệt.
  • git reset --hard : hoàn nguyên vĩnh viễn tất cả các thay đổi

Và đây là một số lệnh git cần thiết để xử lý máy chủ từ xa (ví dụ GitHub):

  • git clone : sao chép một bản sao của kho mã vào máy cục bộ của bạn
  • git push origin master : đẩy các thay đổi đến máy chủ từ xa (ví dụ GitHub)
  • git pull : lấy phiên bản mới nhất từ ​​xa. (Điều này giống như việc chạy git fetch; git merge;).

👉 Trước khi có thể chạy được một lệnh như git push origin master, bạn sẽ cần xác thực bằng cặp khóa ssh (xem Bài 8). Nếu sử dụng GitHub, bạn chỉ cần dán khóa chung vào phần cài đặt hồ sơ của mình.

10. vim

Vim là trình soạn thảo văn bản dựa trên dòng lệnh mạnh mẽ. Bạn nên tìm hiểu ít nhất các lệnh rất cơ bản trong vim:

  • thỉnh thoảng bạn có thể phải đăng nhập vào một máy từ xa và thực hiện thay đổi mã ở đó. vim là một chương trình tiêu chuẩn và do đó thường có sẵn trên bất kỳ máy nào bạn làm việc.
  • khi chạy git commit, theo mặc định git mở vim để viết thông báo cam kết. Vì vậy, ít nhất bạn sẽ muốn biết cách viết, lưu và đóng tệp.

Điều quan trọng nhất cần hiểu về vim là có nhiều chế độ hoạt động khác nhau. Khi bạn khởi chạy vim, bạn sẽ ở bên trong chế độ điều hướng, mà bạn sử dụng để điều hướng qua tệp. Kiểu i để bắt đầu chế độ chỉnh sửa, trong đó bạn có thể thực hiện các thay đổi đối với tệp. Nhập Esc phím để thoát khỏi chế độ chỉnh sửa và quay lại chế độ điều hướng.

Điều hữu ích về chế độ điều hướng là bạn có thể nhanh chóng điều hướng và thao tác với tệp bằng bàn phím, ví dụ:

  • x xóa một ký tự
  • dd xóa toàn bộ một hàng
  • b (trở lại) đi tới từ trước đó, n (tiếp theo) chuyển sang từ tiếp theo
  • :wq lưu các thay đổi của bạn và đóng tệp
  • :q! bỏ qua những thay đổi của bạn và đóng tập tin

Để biết thêm (nhiều hơn nữa!) các phím tắt vim, hãy xem bảng tính vim này.

Photo by Vasily Koloda on Unsplash

Lời cuối

Xin chúc mừng, bạn đã hoàn thành 'thuật sĩ dòng lệnh 101'. Tuy nhiên, ở đây chúng tôi chỉ mới bắt đầu ở bề mặt. Để có cảm hứng, hãy xem xét vấn đề sau:

“Cho một tệp văn bản và một số nguyên k, in knhững từ phổ biến nhất trong tệp (và số lần xuất hiện của chúng) với tần suất giảm dần.”

Với tư cách là một nhà khoa học dữ liệu, động lực đầu tiên của tôi có thể là khởi chạy một máy tính xách tay jupyter, có thể tải dữ liệu vào gấu trúc và sau đó sử dụng một chức năng như gấu trúc agg. Tuy nhiên, đối với một trình hướng dẫn dòng lệnh dày dặn kinh nghiệm, đây là một lớp lót:

tr -cs A-Za-z '' | tr AZ az | sắp xếp | uniq -c | sắp xếp -rn | sed ${1}q

Điều này trông không quá khác biệt so với trí tưởng tượng của Stable Diffusion được trình bày ở đầu bài viết này. Thực sự là phép thuật.

Cách trở thành trình hướng dẫn dòng lệnh Được xuất bản lại từ Nguồn https://towardsdatascience.com/how-to-become-a-command-line-wizard-5d78d75fbf0c?source=rss—-7f60cf5620c9—4 qua https://towardsdatascience. com/nguồn cấp dữ liệu

<!–

->

Dấu thời gian:

Thêm từ Tư vấn chuỗi khối