Lớp khoa học máy tính hữu ích nhất có thể bạn chưa từng tham gia
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ặcl
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.txtcat log.txt | head -n5
: in 5 dòng đầu tiên từ log.txtcat -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.
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ấttmux 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_rsa
và đặ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
, ssh
và 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 theogit 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ạygit 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ạngit 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ạygit 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àngb
(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.
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
, ink
nhữ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
<!–
->
- Bitcoin
- công nhân xây dựng
- blockchain
- tuân thủ blockchain
- hội nghị blockchain
- Tư vấn chuỗi khối
- coinbase
- thiên tài
- Sự đồng thuận
- hội nghị tiền điện tử
- khai thác crypto
- cryptocurrency
- Phân quyền
- Defi
- Tài sản kỹ thuật số
- ethereum
- học máy
- mã thông báo không thể thay thế
- plato
- Plato ai
- Thông tin dữ liệu Plato
- khối chuỗi trung tâm
- PlatoDữ liệu
- Platogaming
- Polygon
- bằng chứng cổ phần
- W3
- zephyrnet