명령줄 마법사가 되는 방법

당신이 한 번도 들어본 적이 없는 가장 유용한 컴퓨터 공학 수업

다음으로 생성된 이미지 안정적인 확산

O제가 경력 전반에 걸쳐 일관되게 관찰한 것은 가장 생산적인 데이터 과학자와 엔지니어에게는 일반적으로 한 가지 공통점이 있다는 것입니다. 명령줄 마법사. 마우스와 그래픽 사용자 인터페이스를 사용한 느린 탐색에 의존하지 않고도 명령줄에서 컴퓨터의 파일 시스템을 탐색하고, 로그 파일에서 패턴을 검색하고, 작업, 소스 코드 및 버전 제어를 모두 관리할 수 있습니다.

그러나 이 명령줄 '마법사'는 쉘 도구에 익숙하지 않은 사람에게 보일 수 있으므로 일반적으로 표준 컴퓨터 공학 커리큘럼의 일부가 아닙니다. 안 MIT 코스 명령줄을 마스터하는 데 적절한 이름은 "CS 교육에서 누락된 학기".

이 게시물은 그래픽 사용자 인터페이스를 덜 사용하고 명령줄로 더 많은 작업을 원하는 독자를 대상으로 한 10과의 개인 '명령줄 마법 101' 수업입니다. 셸 및 경로 변수, 별칭, 파일 권한, 스트리밍 및 파이핑, 효율적인 작업 관리, tmux, ssh, git 및 vim에 대한 기본 사항을 다룹니다.

시작하자. CLW 101에 오신 것을 환영합니다.

1. 껍질

터미널을 열면 다음과 같은 화면이 보입니다. 껍질, bash(다시 쉘) 또는 ZSH(z-shell)와 같은 것입니다. 쉘은 실제로 파일 시스템 탐색 및 데이터 조작을 허용하는 특정 표준 프로그램에 액세스할 수 있는 완전한 프로그래밍 언어입니다. 다음을 입력하여 실행 중인 셸을 확인할 수 있습니다.

에코 $ 쉘

Bash에서는 새 셸을 시작할 때마다 셸은 내부에 지정된 일련의 명령을 로드합니다. .bashrc 파일은 일반적으로 홈 디렉터리에 있습니다(Mac을 사용하는 경우 일반적으로 .bash_profile 대신 파일). 해당 파일에서 경로 변수나 별칭과 같은 유용한 항목을 지정할 수 있습니다(자세한 내용은 아래 참조).

2. 경로 변수

다음과 같은 특정 프로그램의 이름을 셸에 입력하면 python, catls, 쉘은 해당 프로그램을 어디서 가져올 수 있는지 어떻게 알 수 있습니까? 그것이 목적이다 경로 변수. 이 변수는 쉘이 프로그램을 찾는 모든 경로 목록을 콜론으로 구분하여 저장합니다. 다음을 입력하여 경로 변수를 검사할 수 있습니다.

에코 $PATH

다음 명령을 사용하여 경로 변수에 추가 디렉터리를 추가할 수 있습니다.

내보내기 PATH="my_new_path:$PATH"

이 명령을 bashrc 파일에 추가하여 새 셸을 시작할 때 항상 추가 디렉터리가 경로에 있도록 하는 것이 가장 좋습니다.

3. 별칭

별칭 다음과 같이 긴 명령을 반복해서 입력하지 않기 위해 정의할 수 있는 사용자 정의 명령입니다.

별칭 ll="ls -lah"
별칭 gs="git 상태"
별칭 gp="git push Origin master"

별칭을 사용하여 개발 작업 흐름에 대한 보호 장치를 만들 수도 있습니다. 예를 들어, 다음을 정의하여

별칭 mv="mv -i"

이동하려는 파일이 새 디렉터리에 이미 존재하는 경우 터미널에서 경고를 표시하므로 덮어쓰려고 하지 않은 파일을 실수로 덮어쓰는 일이 없습니다.

이러한 별칭을 bashrc 파일에 추가하면 새 셸을 시작할 때 항상 사용할 수 있습니다.

4. 파일 권한 및 sudo

여러 사용자가 컴퓨터를 공유하는 경우 다음을 설정하는 것이 중요합니다. 파일 권한 어떤 사용자가 어떤 데이터에 대해 어떤 작업을 수행할 수 있는지 결정합니다. 입력할 때 ls -l을 사용하면 현재 디렉터리의 파일과 해당 권한이 다음 형식으로 표시됩니다.

-rwxrwxrwx

여기

  • rwx 각각 읽기, 쓰기, 실행 권한을 나타냅니다.
  • 3 rwx 블록은 (1) 사용자, (2) 사용자 그룹 및 (3) 기타 모든 사람을 위한 것입니다. 주어진 예에서 이러한 3개 엔터티는 모두 읽기, 쓰기 및 실행 권한을 갖습니다.
  • 대시는 이것이 파일임을 나타냅니다. 대시 대신 다음을 볼 수도 있습니다. d 디렉토리용 또는 l 심볼릭 링크의 경우.

다음을 사용하여 파일 권한을 편집할 수 있습니다. chmod. 예를 들어, 파일을 스스로 실행 가능하게 만들려면 다음을 입력합니다.

chmod u+x my_program.py

👉 파일이 실행 가능하다면 쉘은 파일 실행 방법을 어떻게 알 수 있나요? 이는 파일의 첫 번째 행에 'hashbang'을 사용하여 지정됩니다. #!/bin/bash bash 스크립트의 경우 또는 #!/bin/python 파이썬 스크립트의 경우.

마지막으로 모든 파일에 대한 모든 권한을 가진 특별한 '수퍼유저'가 있습니다. 슈퍼유저로서 어떤 명령이든 실행할 수 있습니다. sudo 그 명령 앞에. 다음을 실행하여 독립 실행형 sudo 쉘을 시작할 수도 있습니다.

sudo는 스와

⚠️ sudo를 주의해서 사용하세요. sudo를 사용하면 컴퓨터 하드웨어를 제어하는 ​​코드를 변경할 수 있으며, 실수로 인해 컴퓨터를 사용할 수 없게 될 수도 있습니다. 큰 힘에는 큰 책임이 따른다는 것을 기억하세요.

5. 스트리밍 및 파이핑

XNUMXD덴탈의 스트리밍 연산자 > 프로그램의 출력을 파일로 리디렉션합니다. >> 동일한 작업을 수행하지만 이미 존재하는 경우 덮어쓰는 대신 기존 파일에 추가합니다. 이는 다음과 같이 자신의 프로그램을 기록하는 데 유용합니다.

python my_program.py > 로그 파일

또 다른 유용한 개념은 : x | y 프로그램 x를 실행하고 x의 출력을 프로그램 y로 보냅니다. 예를 들어:

  • cat log.txt | tail -n5 : log.txt의 마지막 5줄을 인쇄합니다.
  • cat log.txt | head -n5 : log.txt의 처음 5줄을 인쇄합니다.
  • cat -b log.txt | grep error : 줄 번호(-b)와 함께 'error' 문자열을 포함하는 log.txt의 모든 줄을 표시합니다.

6. 작업 관리

명령줄에서 프로그램을 실행하는 경우(예: python run.py), 프로그램은 기본적으로 다음에서 실행됩니다. 전경, 프로그램이 완료될 때까지 다른 작업을 수행하지 못하게 합니다. 프로그램이 포그라운드에서 실행되는 동안 다음을 수행할 수 있습니다.

  • SIGINT(신호 인터럽트) 신호를 프로그램에 보내는 control+C를 입력하면 기계가 프로그램을 즉시 중단하도록 지시합니다(프로그램이 내부적으로 이러한 신호를 처리할 수 있는 방법이 없는 한).
  • Ctrl+Z를 입력하면 프로그램이 일시 중지됩니다. 일시 정지 후 프로그램을 전경으로 가져오거나(fg) 또는 배경으로 보내서(bg).

백그라운드에서 즉시 명령을 시작하려면 & 운영자:

파이썬 run.py &

👉 현재 백그라운드에서 어떤 프로그램이 실행되고 있는지 어떻게 알 수 있나요? 명령을 사용하십시오 jobs. 그러면 실행 중인 작업의 이름과 해당 프로세스 ID(PID)가 표시됩니다.

마지막으로,kill 백그라운드에서 실행 중인 프로그램에 신호를 보내는 프로그램입니다. 예를 들어,

  • kill -STOP %1 STOP 신호를 보내 프로그램 1을 일시 중지합니다.
  • kill -KILL %1 KILL 신호를 보내 프로그램 1을 영구적으로 종료합니다.
tmux가 있는 내 개인 Macbook 터미널에 있는 4개의 터미널 창(작성자 이미지)

7. 티먹스

tmux ('터미널 멀티플렉서')를 사용하면 새 터미널을 쉽게 만들고 터미널 사이를 탐색할 수 있습니다. 이는 매우 유용할 수 있습니다. 예를 들어 하나의 터미널을 사용하여 파일 시스템을 탐색하고 다른 터미널을 사용하여 작업을 실행할 수 있습니다. tmux를 사용하면 이 두 가지를 나란히 사용할 수도 있습니다.

👉 tmux를 배우는 또 다른 이유는 원격 개발입니다. 원격 시스템에서 로그아웃하면(고의로든 실수로든) 쉘 내부에서 활발하게 실행되고 있던 모든 프로그램이 자동으로 종료됩니다. 반면, tmux 셸 내에서 프로그램을 실행하는 경우 tmux 창을 분리하고 로그아웃한 후 컴퓨터를 닫고 나중에 로그아웃한 적이 없는 것처럼 해당 셸로 다시 돌아올 수 있습니다.

다음은 tmux를 시작하는 데 도움이 되는 몇 가지 기본 명령입니다.

  • tmux new -s run 이름이 'run'인 새 터미널 세션을 만듭니다.
  • control-BD: 이 창을 분리합니다
  • tmux a : 최신 창에 첨부
  • tmux a -t run : 'run'이라는 창에 첨부
  • control-B“: 아래에 다른 터미널 창 추가
  • control-B% : 오른쪽에 다른 터미널 창 추가
  • control-B➡️ : 오른쪽 터미널 창으로 이동 (왼쪽, 위, 아래와 유사)

8. SSH 및 키 쌍

ssh 원격 컴퓨터에 로그인하기 위한 프로그램입니다. 원격 컴퓨터에 로그인하려면 사용자 이름과 비밀번호를 제공하거나 공개 키(두 컴퓨터 모두 액세스할 수 있음)와 개인 키(자신의 컴퓨터만 액세스할 수 있음)로 구성된 키 쌍을 사용해야 합니다. )에 액세스할 수 있습니다.

ssh-keygen 이러한 키 쌍을 생성하는 프로그램입니다. 당신이 실행하는 경우 ssh-keygen, 기본적으로 다음과 같은 공개 키가 생성됩니다. id_rsa.pub 그리고 이름이 개인 키 id_rsa, 둘 다 ~/.ssh 예배 규칙서. 원격 시스템에 공개 키를 추가해야 합니다. 지금까지 알고 있듯이 함께 파이핑하여 수행할 수 있습니다. cat, ssh및 스트리밍 운영자:

고양이 .ssh/id_rsa.pub | ssh user@remote 'cat >> ~/.ssh/authorized_keys'

이제 개인 키를 제공하기만 하면 SSH를 원격으로 사용할 수 있습니다.

SSH 원격 -i ~/.ssh/id_rsa

더 나은 방법은 파일을 만드는 것입니다. ~/.ssh/config 여기에는 모든 SSH 인증 구성이 포함되어 있습니다. 예를 들어, 귀하의 경우 config 파일은 다음과 같습니다.

호스트 개발자
호스트 이름 원격
ID파일 ~/.ssh/id_rsa

그런 다음 간단히 입력하여 원격으로 로그인할 수 있습니다. ssh dev.

9. 자식

git 명령줄에서 코드의 버전 관리 기록과 분기를 효율적으로 탐색할 수 있는 버전 제어 시스템입니다.

👉 참고하세요 git GitHub와 동일하지 않습니다. git GitHub는 코드를 원격으로 호스팅하는 장소인 반면, 로컬 노트북에서 코드 버전 관리를 관리할 수 있는 독립 실행형 프로그램입니다.

다음은 몇 가지 필수 git 명령입니다.

  • git add : 다음 커밋에 포함할 파일을 지정합니다.
  • git commit -m 'my commit message' : 코드 변경을 커밋합니다.
  • git checkout -b dev : 'dev'라는 새 브랜치를 생성하고 해당 브랜치를 확인합니다.
  • git merge dev : dev를 현재 분기에 병합합니다. 이로 인해 병합 충돌이 발생하면 이러한 충돌을 수동으로 수정한 다음 다음을 실행해야 합니다. git add file_that_changed; git merge --continue
  • git stash : 모든 변경 사항을 되돌립니다. git stash pop 그들을 다시 데려옵니다. 이는 마스터 분기를 변경한 다음 해당 변경 사항을 실제로 별도의 분기로 만들기로 결정한 경우에 유용합니다.
  • git reset --hard : 모든 변경 사항을 영구적으로 되돌립니다.

원격 호스트(예: GitHub)를 처리하기 위한 몇 가지 필수 git 명령은 다음과 같습니다.

  • git clone : 코드 저장소의 복사본을 로컬 머신에 복제합니다.
  • git push origin master : 변경 사항을 원격 호스트(예: GitHub)에 푸시합니다.
  • git pull : 원격에서 최신 버전을 가져옵니다. (이것은 달리는 것과 같습니다 git fetch; git merge;).

👉 다음과 같은 명령을 실행하기 전에 git push origin master, SSH 키 쌍으로 인증해야 합니다(8과 참조). GitHub를 사용하는 경우 프로필 설정에 공개 키를 붙여넣기만 하면 됩니다.

10. 정력

Vim은 강력한 명령줄 기반 텍스트 편집기입니다. vim에서 최소한 매우 기본적인 명령을 배우는 것은 좋은 생각입니다:

  • 가끔씩 원격 시스템에 로그인하여 코드를 변경해야 할 수도 있습니다. vim은 표준 프로그램이므로 일반적으로 작업하는 모든 컴퓨터에서 사용할 수 있습니다.
  • 달릴 때 git commit, 기본적으로 git은 커밋 메시지를 작성하기 위해 vim을 엽니다. 따라서 최소한 파일을 쓰고, 저장하고, 닫는 방법을 알고 싶을 것입니다.

vim에 대해 이해해야 할 가장 중요한 점은 다양한 작동 모드가 있다는 것입니다. vim을 시작하면, 그 안에 들어갑니다. 탐색 모드, 파일을 탐색하는 데 사용됩니다. 유형 i 시작한다 편집 모드, 파일을 변경할 수 있습니다. 다음을 입력하세요. Esc 편집 모드를 종료하고 탐색 모드로 돌아가려면 키를 누릅니다.

탐색 모드의 유용한 점은 키보드를 사용하여 파일을 빠르게 탐색하고 조작할 수 있다는 것입니다. 예를 들면 다음과 같습니다.

  • x 문자를 삭제합니다
  • dd 전체 행을 삭제합니다
  • b (뒤로) 이전 단어로 이동합니다. n (다음) 다음 단어로 이동합니다.
  • :wq 변경 사항을 저장하고 파일을 닫습니다.
  • :q! 변경 사항을 무시하고 파일을 닫습니다.

더 많은 (훨씬 더!) vim 키보드 단축키를 보려면 다음을 확인하세요. 이 vim 치트시트.

님이 촬영 한 사진 바실리 콜로다 on Unsplash

마무리

축하합니다. '명령줄 마법 101'을 완료하셨습니다. 그러나 여기서는 표면적인 부분만 살펴보았습니다. 영감을 얻으려면 다음 문제를 고려하십시오.

“텍스트 파일과 정수가 주어졌을 때 k, 인쇄 k파일에서 가장 일반적인 단어(및 발생 횟수)를 빈도가 감소하는 방식으로 표시합니다.”

데이터 과학자로서 나의 첫 번째 충동은 jupyter 노트북을 시작하고 데이터를 pandas에 로드한 다음 pandas와 같은 기능을 사용하는 것일 수 있습니다. agg. 그러나 노련한 명령줄 마법사에게는 이건 한 줄짜리야:

tr -cs A-Za-z '' | TR AZ az | 정렬 | 유니크 -c | 정렬 -rn | sed ${1}q

이는 이 글의 시작 부분에서 보여준 Stable Diffusion의 상상과 크게 다르지 않아 보입니다. 정말로 마법이죠.

명령줄 마법사가 되는 방법 소스 https://towardsdatascience.com/how-to-become-a-command-line-wizard-5d78d75fbf0c?source=rss—-7f60cf5620c9—4에서 https://towardsdatascience를 통해 다시 게시되었습니다. com/피드

<!–

–>

타임 스탬프 :

더보기 블록 체인 컨설턴트