명령줄 학생 자료

명령줄은 GUI가 없는 컴퓨터를 제어하는 방법입니다. 이 단원에서는 컴퓨터와 상호작용하는 기본 명령어를 알아봅니다.

핵심 요점

  • 학생들은 명령어로 컴퓨터를 움직입니다.
  • 학생들은 파일 및 폴더를 생성, 이동, 복사 및 삭제합니다.

명령줄이란 무엇인가요?

대부분의 사용자는 그래픽 사용자 인터페이스 (GUI)를 사용하여 컴퓨터와 상호작용합니다. GUI는 일반적으로 마우스, 터치를 사용하여 아이콘, 버튼, 스크롤바 등으로 창을 조작합니다.

명령줄은 컴퓨터에 대한 대체 뷰입니다. 명령줄 셸은 "a 셸", 터미널\', "bash" 또는 "텍스트 인터페이스"라고도 합니다.

  • 사용자가 명령어를 입력하는 컴퓨터 프로그램과 상호작용하는 수단. 예:
open README.txt
  • 마우스 없이도 컴퓨터를 탐색하고 조작하는 방법입니다.
  • 파일 및 디렉터리를 생성, 읽기, 업데이트, 작업, 삭제하는 그래프가 아닌 방식. 예:
mv README.txt readme.txt

GUI와 명령줄이 똑같은 내용을 찾고 있습니다. 컴퓨터와 상호작용하는 다양한 방법이 있으며,

명령줄은 언제 사용하나요?

개발자는 일반적으로 명령줄 인터페이스를 선호합니다.

  • 더 간결한 수단을 제공하여 프로그램 또는 운영체제를 제어합니다. 왜일까요? 모든 것이 같은 창에서 이루어지므로 연습하면 마우스로 항목을 찾고 조작하는 것보다 수월합니다.
  • 명령어 제어 옵션을 쉽게 노출할 수 있습니다. 왜일까요? GUI의 메뉴에는 아주 적은 옵션이 제공됩니다. 명령줄에는 수백 개의 명령어가 있어 명령어에 몇 가지 문자를 추가하여 다양한 작업을 할 수 있습니다. 예:
  • ls 기본 목록 파일
  • ls -a 일반적으로 숨겨진 파일을 포함하여 모든 파일을 나열합니다.
  • ls -l 긴 목록, 각 파일에 관한 정보 표시
  • ls -R 재귀적, 디렉터리 콘텐츠 나열
  • ls -la 긴 목록 모두 보기
  • 복잡한 방식으로 여러 파일에 대해 한 번에 쉽게 처리할 수 있습니다.
for i in *.png; do pngtogif $i `echo $i | sed s/png/gif/`; done
  • 운영체제 (셸 프로그램)를 프로그래밍하는 방법을 제공합니다. 예를 들어 위 예는 .png로 끝나는 파일 이름으로 이미지를 수정하기 위한 매우 간단한 셸 프로그램입니다.

명령줄 실제 사례

명령줄 명령어의 요소

모든 명령어에는 세 가지 부분이 있습니다.

  • 명령어 (또는 유틸리티)가 항상 먼저 발생합니다.
  • 플래그는 사용하는 유틸리티에 따라 선택사항입니다. 플래그는 항상 - (빼기 기호)로 시작합니다.
  • 인수는 명령어가 실행할 작업으로, 필요한 정보입니다. 파일 이름입니다.

프레이밍

맥락 및 목적

명령줄을 사용하면 마우스나 GUI (그래픽 사용자 인터페이스) 없이 컴퓨터를 제어할 수 있습니다. Apple Computer가 클릭할 수 있는 아이콘 및 폴더가 있는 시스템을 빌드하기 전에는 명령줄을 통해 컴퓨터와 상호작용하는 유일한 방법이 있었습니다.

개발자들은 명령줄을 사용하는데, 이는 GUI가 훨씬 빠르고 강력하기 때문에 클릭할 시간을 낭비할 필요가 없기 때문입니다. 명령줄을 사용하면 컴퓨터와의 거의 모든 상호작용을 수행할 수 있습니다.

터미널이 훨씬 간단한 인터페이스이므로 네트워크 링크를 통해 컴퓨터에 원격으로 연결해야 할 때 GUI에 비해 훨씬 더 큰 이점이 있습니다. 예를 들어 여행할 때 개발자들이

이 강의에서는 파일 및 디렉터리 만들기, 폴더 이동, 디렉터리 변경, 폴더 콘텐츠 나열 등을 통해 컴퓨터와 상호작용하는 기본 명령어를 알아봅니다.

학습 목표

학생이 다음 작업을 할 수 있습니다.

  • 터미널을 사용하여 파일 및 폴더 탐색하기
  • 폴더의 콘텐츠 나열
  • 명령줄에 파일 및 폴더 만들기
  • 파일 및 폴더 이동하기
  • 파일 및 폴더 복사하기
  • 파일 및 폴더 삭제

시작하기

터미널에 액세스

섹션 프레이밍 및 목적

터미널은 명령줄 인터페이스 (CLI)를 운영체제에 제공합니다. 이를 통해 컴퓨터에 텍스트 기반 안내를 직접 제공할 수 있습니다.

이를 위해서는 사용 중인 시스템에 따라 터미널을 실행해야 합니다.

터미널이 실행되면 컴퓨터의 홈 디렉터리 (컴퓨터에 이름을 지정한 이름)에서 시작됩니다. 홈 디렉터리는 물결 표시 ~로 표시됩니다.

터미널 내에서 Google에 관해 이야기할 때 디렉터리폴더와 동일합니다(디렉터리라고도 함).

디렉터리 변경

섹션 프레이밍 및 목적

터미널에서 컴퓨터와 대화하고 하고 싶은 일을 말하려면 공통된 언어를 사용해야 합니다. 명령줄은 bash 스크립팅 언어로 작성된 명령어를 이해합니다. 명령어는 영어 단어의 약어 또는 약어입니다.

터미널에서 이동할 때는 현재 위치를 알고 있어야 합니다. 이는 실제 생활에서도 마찬가지입니다. 어디든 가려면 먼저 현재 위치를 알아야 합니다.

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

사용 가능한 파일 및 디렉터리 나열

작업 디렉터리에는 액세스할 수 있는 파일이 여러 개 있을 수 있습니다. 일반적으로는 아이콘 같은 시각적 신호를 사용하여 사용 가능한 항목을 알려주지만, 파일 및 폴더가 있는 위치를 추측하면 컴퓨터를 탐색하기가 어렵습니다. 명령줄에서는 특정 명령어를 사용하여 지정된 작업 디렉터리 / 위치에서 액세스할 수 있는 항목을 목록으로 표시합니다.

현재 디렉터리에 있는 파일이나 폴더를 확인하려면 ls 명령어 (목록의 약어)를 사용하여 콘텐츠의 목록 보기를 확인합니다.

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

작업 디렉터리 변경

목록에 없는 파일이나 디렉터리에 액세스해야 하는 경우 작업 디렉터리에 쉽게 액세스할 수 있도록 변경하는 것이 좋습니다.

새로운 디렉터리(폴더라고도 함)로 옮기도록 명령줄에 지시하는 구문은 동일한 줄에서 cd 뒤에 새 폴더 경로가 나옵니다.

현재 디렉터리가 속한 디렉터리 (예: 작업 디렉터리하위 폴더)로 이동하는 경우 cd 명령어에 폴더 이름을 사용합니다.

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

~ 디렉터리에서 시작할 수도 있습니다.

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

디렉터리를 변경했지만 홈 디렉터리로 다시 변경해야 하는 경우 ~를 사용하여 직접 홈으로 이동하거나 ..를 사용하여 한 단계 위로 이동합니다.

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

# Option 2: navigate back one level
cd ..

cd ..는 한 단계만 올라가며 (뒤로) 한 수준까지 디렉터리를 세 번 변경했다면 (세 단계 내려가는 경우) cd ..를 홈까지 세 번 사용해야 하지만 cd ~는 한 번만 사용하면 됩니다.

미니 챌린지

  • ls를 사용하여 현재 디렉터리 내의 내용을 확인하세요.
  • 홈 디렉터리로 돌아가서 ls을 사용하여 홈 폴더의 콘텐츠를 확인합니다.
  • 홈 디렉터리 안에 있는 폴더 중 하나의 이름을 선택하여 새 폴더로 이동합니다.
  • list 명령어를 사용하여 안에 포함된 내용을 확인하세요.

도움말: tab에서 자동 완성

cd 명령어로 디렉터리를 변경할 때 오타가 하나 있으면 명령어가 올바르게 실행되지 않습니다. 그러나 tab 키를 사용하면 현재 디렉터리 내에 있는 사용 가능한 디렉터리의 이름이 자동 완성됩니다. 따라서 cd Documents를 입력하는 대신 cd Do만 입력한 다음 tab 키를 누르면 터미널에서 명령어 cd Documents/를 자동 완성합니다. 끝부분에 있는 /은 선택사항이지만 대상이 디렉터리임을 알 수 있습니다.

자동 완성 기능은 작동하는 시간을 절약해줄 뿐 아니라 작동하지 않을 때 유용한 정보를 제공합니다. 탭 버튼이 자동 완성되지 않으면 세 가지 일반적인 문제 중 하나가 원인일 수 있습니다.

  1. 탐색하려는 디렉터리에 현재 작업 디렉터리에서 액세스할 수 없습니다.
  2. 시작 이름이 비슷한 디렉터리 (예: DocumentsDownloads)가 2개 있고 자동 완성에서 원하는 이름을 알 수 있을 정도로 충분한 정보를 제공하지 않았습니다. 입력한 내용과 일치하는 디렉터리 목록을 보려면 tab 키를 다시 누르세요. 그런 다음 조금만 더 입력하여 일치하는 항목이 한 개임을 확인하고 tab를 다시 누릅니다.
  3. 단어의 전반부에 이미 오타가 포함되어 있습니다.

명령어를 사용하여 자동 완성하는 습관을 빨리 사용할수록, 명령어가 작동하지 않는 것처럼 보이는 까다로운 상황을 처리할 가능성이 높아집니다.

상위 및 하위 디렉터리

디렉터리와 파일은 서로 하위 상위 관계일 수 있습니다. directory_bdirectory_a 내부에 있으면 directory_bdirectory_a하위라고 합니다. 그런 다음 directory_adirectory_b상위 요소로 알려져 있습니다. 세 번째 항목 my_filedirectory_b 내부에 있으면 directory_b의 하위 요소로 간주되며 directory_a손자로 간주됩니다.

이러한 관계는 다음과 같이 텍스트 다이어그램으로 포럼에 기록되는 경우가 많습니다.

directory_a/
  directory_b/
    my_file

디렉터리 이름은 /로 끝나지만 파일 이름은 끝나지 않습니다. 이 계층 구조는 일반적으로 파일 시스템의 트리 구조라고 합니다.

동위 요소

동일한 수준에 파일이나 폴더가 여러 개 있는 경우 이를 동위라고 합니다. 예: file_bfile_cdirectory_a 내부에 있으면 동위자입니다.

이 텍스트 다이어그램은 다음과 같습니다.

directory_a/
  file_b
  file_c

file_b 및 file_c는 동위 요소이므로 같은 금액이 들여쓰기됩니다.

File Paths

다음은 상위-하위 관계가 모두 포함된 더 복잡한 텍스트 다이어그램입니다.

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

이 예에서는 new_york_city/이 디렉터리 이름이지만, 경로에는 ~/north_america/united_states/new_york/new_york_city/까지 이동하는 방법이 자세히 설명되어 있습니다.

디렉터리를 new_york_city/,로 변경하려면 이름을 사용하여 단계별로 탐색하거나 경로를 사용하여 하나의 명령어로 끝까지 탐색합니다.

# 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/

탐색 명령어 요약

# 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

미니 챌린지

  • pwd를 사용하여 현재 속한 폴더를 확인할 수 있습니다.
  • 다른 디렉터리로 변경하고 새 위치를 확인합니다.
  • 다시 시도한 후 다른 폴더로 이동합니다. 새 명령어를 사용하여 내 위치를 확인하고 이 디렉터리 내의 파일도 확인합니다.

파일 만들기 및 디렉터리

섹션 프레이밍 및 목적

개발자는 코드가 포함된 파일을 만들어야 합니다. 이러한 파일을 정리하려면 파일을 저장할 수 있는 폴더 / 디렉터리를 만들어야 합니다.

파일과 폴더를 만들기 전에 터미널에서 위치를 확인하세요.

# See your current location.
pwd

파일을 만들려면 명령어 touch 와 파일 이름을 차례로 사용합니다.

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

파일을 만들 때 파일 확장자를 추가하여 형식을 지정합니다. 파일 형식 예:

  • .js이 자바스크립트 파일로 만듭니다.
  • .html에서 HTML 파일 만들기
  • .css에서 CSS 파일을 만듭니다.
  • .md에서 마크다운 파일 생성

파일 이름에 공백을 포함해서는 안 됩니다.

# 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

디렉터리 만들기

디렉터리 / 폴더를 만들려면 mkdir 명령어('make directory''의 약자)를 사용하여 폴더 이름을 지정합니다.

# 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

미니 챌린지

  • 새 파일 만들기
  • 명령어 하나로 파일 몇 개를 만드세요.
  • 새 디렉터리를 만듭니다.
  • 새 디렉터리를 몇 개 더 만듭니다. 한 가지 명령어를 사용해 보세요.
  • 디렉터리 탐색과 파일 및 폴더 만들기에 관해 알고 있는 정보를 사용하여 데스크톱에서 파일 및 폴더를 사용해 가족 및 트리를 구성하세요.

이동 및 복사

파일 이동 및 디렉터리

섹션 프레이밍 및 목적

명령줄에서 파일이나 폴더를 이동할 수 있지만 항상 다음 세 가지를 지정해야 합니다.

  1. mv 명령어(move의 경우 약어)를 사용합니다.
  2. move 명령어 또는 이동하려는 파일 또는 폴더의 이름을 따릅니다.
  3. 이동할 대상이 있는 파일의 이름을 따릅니다.

예를 들어 다음과 같은 파일 구조가 있습니다.

my_child_folder/
my_parent_folder/

보시다시피 아이는 부모와 자녀가 꼭 필요한 상황에서 형제자매가 함께 사용해야 함을 알 수 있습니다. 다음 명령어를 사용하세요.

# 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/

결과 구조는 다음과 같습니다.

my_parent_folder/
  my_child_folder/

다음은 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

경고: mvmv old_name new_name 구문을 사용하여 파일 이름을 바꾸는 명령어이기도 합니다. 즉, 존재하지 않는 디렉터리로 파일을 이동하거나 대상 위치를 잘못 이동하면 파일 자체가 이동되는 대신 이름이 변경됩니다.

미니 챌린지

  1. 텍스트 (.txt) 파일 5개를 만듭니다.
  2. 새로운 디렉토리를 만듭니다.
  3. 만든 파일 5개를 폴더로 이동합니다.
  4. 폴더를 만들고 이 새 폴더를 다른 폴더 안으로 이동합니다.

파일 복사 및 디렉터리

섹션 프레이밍 및 목적

웹 앱을 빌드할 때 파일 두 개를 복제하려고 할 수 있습니다 (두 개의 유사한 웹페이지를 빌드하는 경우 처음부터 다시 시작하지 않을 수 있음). cp (복사본) 명령어의 구문은 mv 구문과 매우 유사합니다.

파일 복사

복사 명령어는 세 부분으로 구성됩니다.

  1. 명령어 cp - copy의 약어
  2. 복사할 파일의 이름입니다.
  3. 사본의 이름 (같은 폴더에 있는 경우) 또는 위치 및 이름 (다른 폴더로 이동하는 경우).
# 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

사본에서 원본과 동일한 이름을 유지하려면 파일 이름 없이 사본 위치를 지정하면 됩니다.

# 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/

이름이 같은 파일이 많으면 혼란스러울 수 있으므로 필요한 경우에만 이 방법을 사용하세요.

디렉터리 복사

폴더나 디렉터리를 복사하는 것은 조금 더 복잡합니다. 폴더뿐만 아니라 폴더 내의 모든 항목도 복사하려는 경우가 많기 때문입니다.

  1. 명령어 cp -R - copy recursive의 약자입니다. 비어 있지 않은 폴더와 비어 있지 않은 폴더 모두 사용합니다.
  2. 소스 이름 (이동하려는 폴더 또는 파일)
  3. 사본의 이름 (같은 폴더에 있는 경우) 또는 위치 및 이름 (다른 폴더로 이동하는 경우).

경고: 사본의 이름을 지정할 때 파일 또는 폴더가 이전에 생성되지 않은 경우 사본을 만들 때 파일 또는 폴더가 생성됩니다. 복사 명령어를 실행하기 전에 파일이 생성된 경우 이전에 파일에 있던 모든 항목을 덮어쓰므로 주의합니다.

# 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

참고: cp -R-R 구성요소를 플래그라고 합니다. 플래그는 항상 대시로 시작하며 명령어와 함께 사용되어 명령어 실행 방식에 관한 더 구체적인 안내를 제공하는 데 사용됩니다.

미니 챌린지

  1. my_original.txt 파일 만들기
  2. 동일한 폴더에 새 이름으로 my_original.txt의 사본을 만듭니다.
  3. 새로운 디렉토리를 만듭니다.
  4. 해당 디렉터리의 사본을 만들되 이름을 다르게 지정합니다.
  5. 2단계에서 복사한 파일을 복사하되, 4단계에서 복사한 디렉터리에 파일을 복사합니다.

파일 및 폴더 삭제

섹션 프레이밍 및 목적

명령줄에 있는 파일 및 폴더를 삭제할 수 있지만 이 작업은 영구적입니다.

파일 삭제하기

파일을 삭제하려면 파일 이름 뒤에 rm(remove의 약어)를 사용하면 됩니다.

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

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

비어 있는 디렉터리 삭제

비어 있는 디렉터리를 삭제하려면 디렉터리 삭제 명령어인 rmdir과 폴더 이름을 함께 사용하면 됩니다.

# delete an empty folder
rmdir empty_directory

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

비어 있지 않은 디렉터리 삭제

비어 있지 않은 폴더를 삭제하려면 명령어의 약자인 -R 플래그를 rm 폴더 뒤에 배치하여 컴퓨터에 폴더 내 콘텐츠를 삭제하도록 지시합니다. 바로가기로 일부 개발자는 모든 항목을 강제로 삭제하는 플래그 -Rf를 사용합니다. 그러지 않으면 하위 파일 또는 폴더 삭제에 관한 메시지가 표시될 수 있습니다.

# 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

경고: rm 명령어를 사용하는 것은 휴지통에 있는 이메일 또는 삭제된 섹션과는 다릅니다. 이러한 파일은 쉽게 복구할 수 없습니다. 이런 방식으로 파일을 삭제할 때는 주의해야 합니다.

미니 챌린지

  1. 4개의 파일을 만듭니다.
  2. 파일 2개를 삭제합니다.
  3. 폴더를 만듭니다.
  4. 다른 폴더를 만들고 이 폴더 안에 파일을 만듭니다.
  5. 두 디렉터리를 모두 삭제합니다.

이 실습의 코드는 GitHub에서 다운로드한 학생 저장소의 다음 폴더에 있습니다. command-line/labs/around-the-world

배경

해외 학기가 곧 시작됩니다. 유럽 여행을 계획해 보세요...

조만간 3개월 동안 굉장히 활용할 것이기 때문에 모든 주말 여행을 최대한 활용하시기 바랍니다.

다행히 재능을 펼치지 않고 친구들이 해외 학기 동안 가장 좋아하는 활동을 했습니다. 죄송합니다. 일부 파일이 혼합되었습니다.

명령줄의 마법 같은 마법과 함께 금방 해결될 수 있습니다.

작업

모든 도시가 올바른 국가에 있는지, 각 도시 폴더의 기념비가 적절한지 확인하세요. 주의하세요. 암스테르담에서 에펠탑을 찾고 있을 수 있습니다.

자신감이 있으면 GUI를 숨기고 명령줄에서 바로 이 챌린지를 진행합니다. 이 모든 작업을 하는 동안에도 일반적인 폴더 내에 있어야 합니다. 즉, 폴더와 파일을 참조할 때는 절대 경로를 사용해야 합니다.

모든 정보가 정확한지 확인한 후 다음 몇 개월 동안 명령을 사용하실 수 있습니다. 새로운 도시, 국가, 기념비를 확인해야 하며 파일 트리에 추가하고 추가하세요!

수고하셨습니다. 컴퓨터를 말하는 법을 공식적으로 배웠습니다. 추가 단계를 진행하시겠어요? 확장 프로그램의 토크 기능...

확장 프로그램

  1. 모든 파일을 다시 혼합하여 원하는 도시로 만드세요. 도시에 머무는 동안 파일을 다시 재구성합니다.
  2. 아래에 링크된 재미있는 명령줄 게임 중 하나를 사용해 보세요.
    Ter빼미 게임
    고급 게임(Google을 준비하세요)
  3. 스타워즈 팬이라면 명령줄에서 telnet towel.blinkenlights.nl을 실행하고 Enter 키를 누르세요. 최신 버전의 MacOS에서는 telnet 명령어가 기본적으로 더 이상 설치되지 않습니다. 이 경우 nc towel.blinkenlights.nl 23 명령어를 대신 사용할 수 있습니다.

이 실습의 코드는 GitHub에서 다운로드한 학생 저장소의 다음 폴더에 있습니다. command-line/labs/bashing-away-repetition

일일 명령줄 사용을 벗어나 반복할 준비가 되셨나요? 좋아요!

배경

프로그래머가 싫어하는 게 있다면 반복적이라고 할 수 있습니다. 컴퓨터 공학자로서 Google은 컴퓨터가 가능한 한 많은 작업을 할 수 있도록 해야 합니다. bash 스크립트를 작성하면 명령줄을 더 효율적으로 사용할 수 있습니다.

먼저 bash 스크립트란 무엇인가요?

질문 다행히 명령줄 튜토리얼을 찾을 수 있는 좋은 장소에서 친구인 Ryan Chadwick이 답을 드립니다.

Bash 스크립트를 사용하면 직접 명령어를 입력하지 않고도 컴퓨터가 수행할 일련의 작업을 정의할 수 있습니다. 특정 작업이 자주 실행되거나 반복적이라면 스크립트가 유용한 도구가 될 수 있습니다.

반복할 건 없나요? 여러분의 대화입니다.

튜토리얼

스크립트를 실행하려면 먼저 컴퓨터에 권한을 부여해야 합니다. 그렇게 하려면 아래 명령어를 실행하세요.

chmod 755 myScript.sh

예, 첫 번째 프로그램을 작성해 보세요. myScript.sh로 이동합니다(명령줄에서 파일을 열 수 있는지 확인). 파일 끝에 다음을 추가합니다.

echo "Hello World"

이제 다음을 실행합니다.

./myScript.sh

시작됩니다 ** TA DA ** 터미널에 'Hello World'가 출력됩니다.

축하

bash 스크립트에서 작성한 모든 항목은 터미널에 입력한 것처럼 실행됩니다. 이제 광고 확장을 시작하기 전에 예시를 하나 더 살펴보겠습니다. 먼저 스크립트 파일을 생성합니다. 원하는 파일을 무엇이든 호출할 수 있지만 확장자는 .sh여야 합니다. 다음chmod 755를 입력한 다음 터미널에 스크립트 이름을 입력하고 Enter 키를 눌러 스크립트 실행 권한을 부여합니다. 새 bash 스크립트를 시작할 때마다 이 두 단계를 완료해야 합니다.

소개 챌린지

이제 새 폴더를 만드는 스크립트를 작성해 보겠습니다. 새 폴더가 만들어지는 것을 어떻게 알 수 있나요? m로 시작하고 kdir로 끝나는 단어를 생각하고 있다면 올바른 길을 가고 있는 것입니다. 새 폴더를 만들고 새 .sh 파일에 멋진 이름을 지정하는 명령어를 작성한 후 터미널에서 실행합니다.

이 방법으로 문제가 해결되지 않으면 아래에 나열된 다른 문제로 이동하세요. 그래도 여전히 전 세계를 돌아보고 새로운 국가 및 도시 폴더를 어떻게 만들었는지 생각해 보세요.

위의 연결된 가이드를 사용하는 것을 두려워하지 말고 최고의 Google 기술을 익힐 준비를 하세요. 다음 작업을 하는 스크립트를 작성하고 실행하세요.

기본 작업

  1. 위에서 만든 파일에 생성 중인 폴더로 이동하는 명령어를 추가합니다. 디렉터리를 변경하려면 어떤 명령어를 사용해야 하나요?
  • 새 폴더 이름에 스탬프를 기록합니다. 예를 들어 프로그램에서 "2017-12-07my_super_cool_folder"라는 폴더를 만들어야 합니다.
  1. 출력: "내 현재 디렉터리는 " 뒤에 작업 디렉터리가 나오는데, "여기에 이 디렉터리의 모든 목록이 표시됩니다. ';' 다음에 현재 디렉터리의 콘텐츠가 나옵니다.
  2. bash 스크립트에 입력을 제공하는 방법을 알아보고 해당 입력 문자열을 기반으로 파일을 만듭니다. 실습 초반에 링크된 튜토리얼에는 확인해 볼 만한 변수 섹션의 몇 가지 좋은 예가 있습니다.
  3. 사용자에게 이름을 물어본 다음 출력합니다. "안녕하세요여기에 이름을 입력해 주세요.\"
  • 사용자에게 추가 정보를 요청하고 맞춤설정된 메시지를 작성해 보세요.

컨텍스트

명령줄 (또는 터미널)은 컴퓨터 운영체제 (OS)와 직접 상호작용합니다. 즉, 그래픽 사용자 인터페이스 (GUI)는 탐색에서 새 파일 만들기, 스크립트 실행에 이르기까지 모든 작업을 수행합니다. 파일을 열고 Google App Engine을 사용할 때 개발 환경을 시작하는 데 명령줄이 사용됩니다.

명령줄 실제 사례

터미널에 액세스

Mac 단축키:

  • Command + 스페이스를 사용하여 스포트라이트를 엽니다.
  • 스포트라이트 검색터미널을 입력합니다.
# 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

파일 및 폴더 만들기

파일 만들기

# 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

폴더 만들기

# 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

파일 및 폴더 이동

파일 이동

# 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

폴더 이동

# 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

이사 진행 중

mv은 파일 또는 폴더의 이름을 바꾸는 데 사용되는 것과 동일한 명령어이기도 합니다.

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

파일 및 폴더 복사

파일 복사

# 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

폴더 복사

# 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

파일 및 폴더 삭제

파일 삭제

# 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

폴더 삭제

# Delete an empty folder.
rmdir empty_directory

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

도움말 및 유용한 정보

  • 필요하지 않다고 생각하더라도 명령줄을 사용하여 연습하세요. 시간이 지남에 따라 더 나아질 것입니다.
  • tab 키는 파일 또는 폴더 이름을 자동 완성합니다 (대소문자 구분).
  • 일치하는 파일이나 폴더가 하나만 남아 있다면 자동 완성됩니다.
  • 일치하는 파일 또는 폴더가 여러 개인 경우 Tab 키를 두 번 누르면 나머지 일치 목록이 표시됩니다.
  • 위쪽 / 아래쪽 화살표는 명령어 기록을 순환시킵니다. 따라서 명령어를 다시 입력할 필요가 없습니다.
  • clear 명령어를 사용하여 터미널 창을 지웁니다. 이전 작업은 모두 그대로 유지됩니다. 위로 스크롤하여 확인하세요.
  • reset를 사용하여 터미널을 다시 시작합니다. 이전 작업이 화면에 계속 표시되지는 않지만 터미널이 예기치 않은 방식으로 작동하기 시작하면 몇 가지 문제를 해결할 수 있습니다.
  • option + arrow 키를 눌러 커서를 단어 단위로 이동합니다.

권장사항 요약

  • cd, cd .. 또는 cd <folder name>를 사용하여 터미널을 탐색합니다.
  • ls를 사용하여 폴더의 콘텐츠를 봅니다.
  • touch를 사용하여 파일을 만들고 mkdir를 사용하여 폴더를 만듭니다.
  • mv <item to move> <destination>을 사용하여 파일과 폴더를 이동합니다.
  • cp <item to copy> <destination>를 사용하여 파일 및 폴더를 복사합니다.
  • rm <item to remove>를 사용하여 파일 및 폴더를 삭제합니다.

질문 1

현재 작업 디렉터리를 식별하는 데 무엇을 사용하시겠어요?

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

질문 2

현재 작업 중인 디렉터리에서 두 단계 위로 이동하려면 어떻게 해야 할까요?

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

질문 3

파일 이름을 변경하려면 어떤 명령어를 사용해야 하나요?

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

질문 4

mv script.py 명령어로 오류가 발생하는 이유는 무엇인가요?

  1. 'script.py'는 잘못된 파일 이름이므로
  2. mv 명령어 뒤에 다른 정보가 따라올 수 없기 때문입니다.
  3. 이는 기만적인 질문으로, 오류가 발생하지 않습니다.
  4. 파일을 이동하려면 인수와 대상 두 개 이상이 필요합니다.

Question 5

cd ~ 명령어는 어떻게 하나요?

  1. 작업 디렉터리를 홈 디렉터리로 변경합니다.
  2. 이전 명령어를 반복합니다.
  3. 현재 알고리즘을 사용하여 가장 유용한 명령어를 확인합니다.
  4. 오류가 발생합니다.

Question 6

다음 중 탭을 사용하여 파일 이름을 자동 완성할 이유가 아닌 것은 무엇인가요?

  1. 시간이 절약되기 때문입니다.
  2. 맞춤법 오류를 방지하는 데 도움이 되기 때문입니다.
  3. 처리 전력이 덜 필요하기 때문입니다.

Question 7

새 개발자가 "my script.py"라는 파일을 만들려고 하면 touch my script.py 명령어가 작동하지 않는 이유는 무엇인가요?

  1. touch에서 새 파일을 만들 수 없기 때문입니다.
  2. .py은(는) 유효한 파일 확장자가 아닙니다.
  3. 각각 'my'와 'my'이라는 두 개의 파일이 생성되므로 파일이 하나만 생성됩니다.
  4. 명령줄에서 새 파일을 만들 수 없기 때문입니다.

질문 1

현재 작업 디렉터리를 식별하는 데 무엇을 사용하시겠어요?

pwd

질문 2

현재 작업 중인 디렉터리에서 두 단계 위로 이동하려면 어떻게 해야 할까요?

cd ../..를 사용하면 두 단계 위로 이동합니다 (각 ..은 위의 한 레벨을 나타냅니다).

질문 3

파일 이름을 변경하려면 어떤 명령어를 사용해야 하나요?

mv은 한 위치에서 다른 위치로 파일을 이동하는 데 사용되며 파일 이름을 변경하는 데도 사용할 수 있습니다.

질문 4

mv script.py 명령어로 오류가 발생하는 이유는 무엇인가요?

mv 명령어에는 소스 파일과 대상 파일인 두 개의 인수가 필요합니다.

Question 5

cd ~ 명령어는 어떻게 하나요?

작업 디렉터리가 홈 디렉터리로 변경됩니다. 특수문자 ~는 현재 사용자의 홈 디렉터리를 식별하는 데 사용됩니다. 다른 사용자 이름(예: ~user2)과 함께 사용하여 홈 폴더를 가리킬 수도 있습니다.

Question 6

다음 중 탭을 사용하여 파일 이름을 자동 완성할 이유가 아닌 것은 무엇인가요?

처리 전력이 더 적게 필요하므로 정확하지 않습니다. tab는 파일 이름을 찾고 자동 완성할 폴더를 검사하는 데 있어 미미한 수준의 처리 능력이 필요하지만 이 과정에서 시간을 절약하고 맞춤법 오류를 피할 수 있습니다.

Question 7

새 개발자가 "my script.py"라는 파일을 만들려고 하면 touch my script.py 명령어가 작동하지 않는 이유는 무엇인가요?

파일 하나가 아닌 파일 2개가 생성됩니다. touch 명령어로 새 파일이 생성됩니다. 터미널 공백에는 파일 이름에 포함될 문자가 아닌 구분자입니다. 완전히 피하는 것이 좋지만 반드시 사용해야 한다면 파일 이름을 큰따옴표로 묶어야 합니다.

touch "my script.py"

질문 1

디렉터리 변경을 위한 터미널 명령어는 다음과 같습니다.

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

질문 2

현재 작업 디렉터리의 상위 폴더로 이동하려면 어떤 명령어를 실행해야 하나요?

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

질문 3

파일 생성에 사용되는 명령어는 무엇인가요?

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

질문 4

다음 중 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

Question 5

파일 또는 폴더 이름을 변경하려면 어떤 명령어를 사용하나요?

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

Question 6

rm cp 명령어가 폴더에서 작동해야 하는 플래그는 무엇인가요?

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

Question 7

projects 을(를) ~/Documents(으)로 이동하고 이름을 Projects(으)로 변경하려면 어떤 명령어를 공백으로 입력해야 하나요?

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

Question 8

다음 명령어는 어떻게 하나요?

rm -r projects

  1. projects 파일 삭제
  2. projects 폴더 삭제
  3. projects라는 파일 이름 바꾸기
  4. 현재 디렉터리의 콘텐츠를 projects에서 검색합니다.

질문 1

디렉터리 변경을 위한 터미널 명령어는 다음과 같습니다.

디렉터리 변경을 위한 터미널 명령어는 cd입니다. 명령어 자체는 "change directory"의 약어입니다.

질문 2

현재 작업 디렉터리의 상위 폴더로 이동하려면 어떤 명령어를 실행해야 하나요?

상위 폴더로 이동하는 명령어는 cd ..입니다.

질문 3

파일 생성에 사용되는 명령어는 무엇인가요?

파일을 만드는 명령어는 touch

질문 4

다음 중 index.htmlstyle.css이라는 파일 두 개를 만드는 명령어는 무엇인가요?

명령어 touch index.html style.css가 두 개의 파일을 만듭니다. 쉼표가 필요 없으며 개수 제한 없이 쉼표로 구분하여 파일을 여러 개 만들 수 있습니다.

Question 5

파일 또는 폴더 이름을 변경하려면 어떤 명령어를 사용하나요?

파일 및 폴더를 이동하는 데 사용할 수도 있지만 mv으로 파일과 폴더의 이름을 변경할 수도 있습니다.

Question 6

rm cp 명령어가 폴더에서 작동해야 하는 플래그는 무엇인가요?

rmcp 명령어를 사용하려면 -r 플래그가 폴더에서 작동해야 합니다. -r 플래그는 "recursive"를 나타내고 포함된 모든 파일과 폴더에 대해 명령어를 다시 실행하기 때문입니다.

Question 7

projects 을(를) ~/Documents(으)로 이동하고 이름을 Projects(으)로 변경하려면 어떤 명령어를 공백으로 입력해야 하나요?

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

홈 디렉터리에서 시작되므로 올바른 명령어를 실행하기 위해 최종 명령어를 가져오려면 cd ~/Documents 를 실행해야 합니다.

Question 8

다음 명령어는 어떻게 하나요?

rm -r projects

이 명령어는 -r 또는 재귀 플래그로 호출되므로 파일 또는 projects 폴더를 삭제합니다. 이 플래그가 없으면 이 명령어는 이름으로 이름이 지정된 파일만 삭제합니다.