명령줄은 GUI 없이 컴퓨터를 제어하는 방법입니다. 이 단원에서는 컴퓨터와 상호작용하는 기본 명령어를 알아봅니다.
핵심 요점
- 학생은 명령어를 사용하여 컴퓨터를 이동합니다.
- 학생은 파일과 폴더를 만들고, 이동하고, 복사하고, 삭제합니다.
명령줄이란 무엇인가요?
대부분의 사용자는 대부분의 경우 그래픽 사용자 인터페이스 (GUI)를 사용하여 컴퓨터와 상호작용합니다. GUI는 일반적으로 마우스나 터치를 사용하여 아이콘, 버튼, 스크롤 막대 등으로 창을 조작합니다.
명령줄은 컴퓨터를 보는 대체 방법입니다. '셸', '터미널', '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)를 제공합니다. 이를 통해 컴퓨터에 직접 텍스트 기반 명령어를 제공할 수 있습니다.
이렇게 하려면 사용 중인 시스템에 따라 터미널을 실행해야 합니다.
터미널이 실행되면 컴퓨터의 홈 디렉터리 (컴퓨터 이름)에서 시작됩니다. 홈 디렉터리는 물결표시~
로 표시됩니다.
터미널 내에서 세계를 논할 때 디렉터리는 폴더와 동일합니다 (때로는 디렉터리라고만 부를 수도 있음).
디렉터리 변경
섹션 프레이밍 및 목적
터미널에서 컴퓨터와 대화하고 원하는 작업을 지시하려면 공통 언어를 사용해야 합니다. 명령줄은 bash 스크립팅 언어로 작성된 명령어를 이해합니다. 명령어는 영어 단어의 약어 또는 축약어입니다.
작업 디렉터리 인쇄 (pwd
)
터미널에서 탐색할 때는 현재 위치를 파악하는 것이 중요합니다. 이는 실제 생활에도 직접적으로 적용됩니다. 어딘가로 가려면 먼저 현재 위치를 알아야 합니다.
# 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/
명령어를 자동으로 완성합니다 (끝에 있는 /
는 선택사항이지만 대상이 디렉터리임을 알 수 있음).
이 자동 완성 기능은 작동할 때 시간을 절약해 줄 뿐만 아니라 작동하지 않을 때도 유용한 정보를 제공합니다. 탭 버튼이 자동 완성되지 않으면 다음과 같은 세 가지 일반적인 문제 중 하나가 발생했을 수 있습니다.
- 이동하려는 디렉터리에 현재 작업 디렉터리에서 액세스할 수 없습니다.
- 시작 이름이 비슷한 디렉터리 (예:
Documents
및Downloads
)가 두 개 있으며, 자동 완성 기능이 원하는 디렉터리를 알 수 있을 만큼 충분한 정보를 제공하지 않았습니다.tab
키를 다시 누르면 입력한 내용과 일치할 수 있는 디렉터리 목록이 표시됩니다. 그런 다음 일치하는 항목이 하나만 남을 때까지 조금 더 입력하고tab
를 다시 누릅니다. - 단어의 앞부분에 이미 오타가 포함되어 있습니다.
탭을 사용하여 명령어를 자동 완성하는 습관을 빨리 들일수록 명령어가 작동하지 않는 것처럼 보이는 답답한 상황을 처리할 가능성이 높아집니다.
상위 및 하위 디렉터리
디렉터리와 파일은 서로 하위 및 상위 관계를 가질 수 있습니다. directory_b
가 directory_a
내에 있으면 directory_b
는 directory_a
의 하위 요소라고 합니다. 그러면 directory_a
을 directory_b
의 상위 요소라고 합니다. 세 번째 항목 my_file
가 directory_b
내부에 있으면 directory_b
의 하위 요소이자 directory_a
의 손자로 간주됩니다.
이러한 관계는 다음과 같은 텍스트 다이어그램을 사용하여 포럼에 설명되는 경우가 많습니다.
directory_a/ directory_b/ my_file
디렉터리 이름은 /
으로 끝나지만 파일 이름은 그렇지 않습니다. 이 계층적 구성을 일반적으로 파일 시스템의 트리 구조라고 합니다.
형제자매
같은 수준에 여러 파일 또는 폴더가 있는 경우 이를 동위 요소라고 합니다. 예: file_b
과 file_c
이 directory_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
JavaScript 파일로 만들기.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 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
미니 챌린지
- 새 파일 만들기
- 하나의 명령어로 여러 파일을 만듭니다.
- 새 디렉터리를 만듭니다.
- 새 디렉터리를 몇 개 더 만듭니다. 이 작업을 수행하는 데 하나의 명령어만 사용해 보세요.
- 디렉터리를 탐색하고 파일과 폴더를 만드는 방법을 사용하여 파일과 폴더를 사용하여 데스크톱에 'family_tree'를 구성합니다.
이동 및 복사
파일 및 디렉터리 이동
섹션 프레이밍 및 목적
명령줄에서 파일이나 폴더를 이동할 수 있지만 항상 다음 세 가지를 지정해야 합니다.
mv
명령어(move의 약어)를 사용합니다.- 이동할 파일 또는 폴더의 이름과 함께 이동 명령어를 입력합니다.
- 파일 이름 뒤에 이동하려는 대상 위치를 입력합니다.
예를 들어 다음과 같은 파일 구조가 있다고 가정합니다.
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
경고: mv
는 mv old_name new_name
문법을 사용하여 파일 이름을 바꾸는 명령어이기도 합니다. 즉, 존재하지 않는 디렉터리로 파일을 이동하거나 대상을 잘못 입력하면 파일 자체가 이동되지 않고 이름이 변경됩니다.
미니 챌린지
- 텍스트 (.txt) 파일 5개를 만듭니다.
- 새로운 디렉토리를 만듭니다.
- 만든 5개의 파일을 폴더로 이동합니다.
- 폴더를 만들고 이 새 폴더를 다른 폴더 안으로 이동합니다.
파일 및 디렉터리 복사
섹션 프레이밍 및 목적
웹 앱을 빌드할 때 파일을 복제할 수 있습니다 (유사한 웹페이지 두 개를 빌드하는 경우 처음부터 다시 시작하지 않아도 됨). cp
(복사) 명령어의 구문은 mv
구문과 매우 유사합니다.
파일 복사
복사 명령어는 세 부분으로 구성됩니다.
cp
명령어 - copy의 약어- 복사할 파일의 이름
- 복사본의 이름 (동일한 폴더에 있는 경우) 또는 위치 및 이름 (다른 폴더로 이동하는 경우)
# 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/
이름이 같은 파일이 많으면 혼란스러울 수 있으므로 필요한 경우에만 이 방법을 사용하세요.
디렉터리 복사
폴더나 디렉터리를 복사하는 것은 폴더뿐만 아니라 폴더 안의 모든 항목도 복사해야 할 수 있으므로 약간 더 복잡합니다.
cp -R
명령어(copy recursive의 약어) - 비어 있는 폴더와 비어 있지 않은 폴더 모두에 사용합니다.- 소스 이름 (이동하려는 폴더 또는 파일)
- 복사본의 이름 (동일한 폴더에 있는 경우) 또는 위치 및 이름 (다른 폴더로 이동하는 경우)
경고: 사본의 이름을 지정할 때 파일 또는 폴더가 이전에 생성되지 않은 경우 사본을 만들 때 생성됩니다. 복사 명령어를 실행하기 전에 파일을 만든 경우 파일에 이전에 있던 내용이 덮어쓰이므로 주의하세요.
# 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
구성요소를 플래그라고 합니다. 플래그는 항상 대시로 시작하며 명령어와 함께 사용하여 명령어가 실행되는 방식에 관한 더 구체적인 안내를 제공합니다.
미니 챌린지
my_original.txt
라는 파일을 만듭니다.- 동일한 폴더에
my_original.txt
의 사본을 새 이름으로 만듭니다. - 새로운 디렉토리를 만듭니다.
- 해당 디렉터리의 사본을 만들되 다른 이름을 지정합니다.
- 복사한 파일 (2단계)의 사본을 만들지만 복사한 디렉터리 (4단계)에 배치합니다.
파일 및 폴더 삭제
섹션 프레이밍 및 목적
명령줄에서 파일과 폴더를 삭제할 수 있지만, 이렇게 하면 완전히 삭제됩니다.
파일 삭제
파일을 삭제하려면 rm
(삭제의 약어) 명령어 다음에 파일 이름을 사용하면 됩니다.
# 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
비어 있지 않은 디렉터리 삭제
비어 있지 않은 폴더를 삭제하려면 컴퓨터에 폴더 내 콘텐츠를 삭제하도록 지시하는 rm
명령어 뒤에 -R
(재귀의 약어) 플래그를 배치해야 합니다. 일부 개발자는 모든 항목을 강제로 삭제하는 -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
명령어를 사용하는 것은 휴지통이나 이메일의 삭제된 항목과 같지 않습니다. 이러한 파일은 쉽게 복구할 수 없습니다. 이 방법으로 파일을 삭제할 때는 각별히 주의하세요.
미니 챌린지
- 파일 4개를 만듭니다.
- 파일 2개를 삭제합니다.
- 폴더를 만듭니다.
- 다른 폴더를 만들고 이 폴더 안에 파일을 만듭니다.
- 두 디렉터리를 모두 삭제합니다.
이 실습의 코드는 GitHub에서 다운로드한 학생 저장소의 다음 폴더에서 찾을 수 있습니다. command-line/labs/around-the-world
배경
해외 유학이 곧 시작되니 유럽 여행을 계획할 때가 왔습니다.
앞으로 3개월 동안 생활을 제대로 즐기려면 주말 여행을 최대한 활용해야 합니다.
다행히 처음부터 시작하지 않아도 됩니다. 친구들이 해외에서 보낸 학기 동안 가장 좋아했던 활동을 알려주었기 때문입니다. 죄송하지만 일부 파일이 혼합되었습니다.
걱정하지 마세요. 명령줄의 마법으로 금방 해결할 수 있습니다.
작업
모든 도시가 올바른 국가에 있고 각 도시 폴더에 올바른 기념물이 있는지 확인합니다. 잘못하면 에펠탑을 찾아 암스테르담에 도착할 수도 있습니다.
이 문제에 정말 자신 있다면 GUI를 숨기고 명령줄에서 바로 이 챌린지에 도전해 보세요. 이 모든 작업을 하는 동안 일반적인 전 세계 폴더에 있어야 합니다. 즉, 폴더와 파일을 참조할 때 절대 경로를 사용해야 합니다.
모든 것이 올바른 위치에 있는지 확인한 후 앞으로 몇 달 동안 명령을 내릴 차례입니다. 꼭 가 봐야 할 새로운 도시, 국가, 기념물을 브레인스토밍하고 파일 트리에 추가하세요.
축하합니다. 이제 컴퓨터와 소통하는 방법을 공식적으로 배우셨습니다. 한 단계 더 나아갈 준비가 되셨나요? 확장 프로그램에 대해 이야기해 보겠습니다.
확장 프로그램
- 모든 파일을 다시 섞은 다음 원하는 도시로 이동합니다. 해당 도시에 머무르면서 파일을 다시 정리합니다.
- 아래에 링크된 재미있는 명령줄 게임을 사용해 보세요.
Terminus Game
Advanced Game (Google 검색 준비) - 스타워즈의 열렬한 팬이신가요? 명령줄에서
telnet towel.blinkenlights.nl
를 실행하고 Enter 키를 눌러 보세요. (최신 버전의 MacOS에서는telnet
명령어가 더 이상 기본적으로 설치되지 않습니다. 이 경우nc towel.blinkenlights.nl 23
명령어를 대신 사용할 수 있습니다.)
이 실습의 코드는 GitHub에서 다운로드한 학생 저장소의 다음 폴더에서 찾을 수 있습니다. command-line/labs/bashing-away-repetition
일일 명령줄 사용에서 반복을 없앨 준비가 되셨나요? 저도 마찬가지입니다.
배경
프로그래머가 가장 싫어하는 것은 반복입니다. 컴퓨터 과학자로서 컴퓨터가 최대한 많은 작업을 수행하도록 하는 것이 우리의 임무입니다. bash 스크립트를 작성하면 명령줄 사용을 더 효율적으로 할 수 있습니다.
먼저 bash 스크립트란 무엇일까요?
좋은 질문입니다. 명령줄 튜토리얼을 찾을 수 있는 이 멋진 곳의 Ryan Chadwick이 답을 알려줍니다.
Bash 스크립트를 사용하면 컴퓨터가 명령어를 직접 입력하지 않아도 되는 일련의 작업을 정의할 수 있습니다. 특정 작업을 자주 수행하거나 반복적인 경우 스크립트가 유용한 도구가 될 수 있습니다.
반복이 없나요? 바로 이런 경우를 말하는 것입니다.
튜토리얼
먼저 스크립트를 실행하려면 컴퓨터에 권한을 부여해야 합니다. 아래 명령어를 실행하여 이를 수행합니다.
chmod 755 myScript.sh
이제 첫 번째 프로그램을 작성할 차례입니다. myScript.sh
로 이동합니다 (명령줄에서 파일을 열 수 있는지 확인). 파일 끝에 다음을 추가합니다.
echo "Hello World"
이제 다음을 실행합니다.
./myScript.sh
터미널에서 실행합니다. ** 짜잔 ** 터미널에 'Hello World'가 출력됩니다.
Bash 스크립트에 작성한 모든 항목은 터미널에 입력한 것처럼 실행됩니다. 확장 프로그램으로 넘어가기 전에 한 가지 예를 더 살펴보겠습니다. 먼저 스크립트 파일을 만듭니다. 파일 이름은 원하는 대로 지정할 수 있지만 확장자는 .sh
이어야 합니다. 다음으로 터미널에 chmod 755
및 스크립트 이름을 입력하고 Enter 키를 눌러 스크립트를 실행할 권한을 부여합니다. 새 bash 스크립트를 시작할 때마다 이 두 단계를 완료해야 합니다.
소개 챌린지
이제 새 폴더를 만드는 스크립트를 작성해 보겠습니다. 새 폴더를 만드는 명령어를 알고 있나요? m
로 시작하고 kdir
로 끝나는 단어를 생각하고 있다면 잘하고 계신 겁니다. 새 폴더를 만들고 새 .sh
파일에서 멋진 이름을 지정하는 명령어를 작성한 다음 터미널에서 실행합니다.
문제가 해결되면 아래에 나열된 다른 챌린지로 이동합니다. 여전히 혼란스럽다면 전 세계 실습을 다시 살펴보고 새 국가 및 도시 폴더를 만든 방법을 생각해 보세요.
위 링크의 튜토리얼을 사용하고 최고의 Google 검색 기술을 발휘할 준비를 하세요. 다음을 실행하는 스크립트를 작성하고 실행합니다.
Main Tasks(기본 작업)
- 위에서 만든 파일에 생성 중인 폴더로 이동하는 명령어를 추가합니다. (디렉터리를 변경하는 데 사용하는 명령어는 무엇인가요?)
- 새 폴더 이름에 날짜를 스탬프로 찍습니다. 예를 들어 프로그램은 '
2017-12-07my_super_cool_folder
'이라는 폴더를 만들어야 합니다.
- '현재 디렉터리는 다음과 같습니다.'라는 문구와 작업 디렉터리, '이 디렉터리에 있는 모든 항목의 목록은 다음과 같습니다.'라는 문구를 출력합니다. '를 입력하면 현재 디렉터리의 콘텐츠가 표시됩니다.
- bash 스크립트에 입력을 제공하고 해당 입력 문자열을 기반으로 파일을 만드는 방법을 알아봅니다. 실습의 앞부분에 링크된 튜토리얼의 변수 섹션에 몇 가지 좋은 예가 나와 있습니다.
- 사용자에게 이름을 물어본 다음 '안녕하세요. 만나서 반갑습니다. 여기에 이름을 삽입하세요'를 출력합니다.
- 사용자에게 추가 정보를 요청하고 맞춤 메시지를 만들어 보세요.
맥락
명령줄 (또는 터미널)은 컴퓨터 운영체제 (OS)와 직접 상호작용할 수 있도록 지원합니다. 탐색부터 새 파일 만들기, 스크립트 실행에 이르기까지 그래픽 사용자 인터페이스 (GUI)가 하는 모든 작업을 텍스트 명령어를 통해 수행할 수 있습니다. 명령줄은 파일을 열고 Google App Engine을 사용할 때 개발 환경을 시작하는 데 사용됩니다.
명령줄 사용
터미널 액세스
Mac 단축키:
- Command + 스페이스를 눌러 Spotlight를 엽니다.
- 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
파일 및 폴더 만들기
파일 만들기
# 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
현재 작업 디렉터리를 식별하는 데 무엇을 사용하시겠어요?
pwd
ls
cd
mkdir
touch
질문 2
현재 작업 디렉터리에서 두 수준 위로 이동하려면 어떻게 해야 할까요?
mv ~
cd ../..
mv up/up
cd ^(2)
질문 3
파일 이름을 변경하려면 어떤 명령어를 사용해야 하나요?
mv
cd
ls
python
rename
질문 4
mv script.py
명령어에서 오류가 발생하는 이유는 무엇인가요?
- '
script.py
'은(는) 잘못된 파일 이름이기 때문입니다. mv
명령어 뒤에는 다른 정보를 입력할 수 없기 때문입니다.- 까다로운 문제입니다. 오류가 발생하지 않습니다.
- 파일을 이동하려면 타겟과 대상이라는 두 개 이상의 인수가 필요하기 때문입니다.
질문 5
cd ~
명령어는 어떤 작업을 실행하나요?
- 작업 디렉터리를 홈 디렉터리로 변경합니다.
- 이전 명령어를 반복합니다.
- 알고리즘을 사용하여 현재 가장 유용한 명령어를 확인합니다.
- 오류를 발생시킵니다.
질문 6
다음 중 탭을 사용하여 파일 이름을 자동 완성하는 이유가 아닌 것은 무엇인가요?
- 시간을 절약할 수 있기 때문입니다.
- 맞춤법 오류를 없애는 데 도움이 되기 때문입니다.
- 처리 능력이 덜 필요하기 때문입니다.
질문 7
새 개발자가 'my script.py
'이라는 파일을 만들려고 하면 touch my script.py
명령어가 작동하지 않는 이유는 무엇인가요?
touch
가 새 파일을 만들 수 없기 때문입니다..py
은(는) 유효한 파일 확장자가 아니기 때문입니다.- 파일이 하나가 아닌 '
my
'와 'script.py
'라는 두 개의 파일이 생성되기 때문입니다. - 명령줄에서 새 파일을 만들 수 없기 때문입니다.
질문 1
현재 작업 디렉터리를 식별하는 데 무엇을 사용하시겠어요?
pwd
질문 2
현재 작업 디렉터리에서 두 수준 위로 이동하려면 어떻게 해야 할까요?
cd ../..
를 사용하면 두 단계 위로 이동합니다 (각 ..
는 한 단계 위를 나타냄).
질문 3
파일 이름을 변경하려면 어떤 명령어를 사용해야 하나요?
mv
은 한 위치에서 다른 위치로 파일을 이동하는 데 사용되며 파일 이름을 변경하는 데도 사용할 수 있습니다.
질문 4
mv script.py
명령어에서 오류가 발생하는 이유는 무엇인가요?
mv
명령어에는 소스 파일과 대상 파일이라는 두 개의 인수가 필요합니다.
질문 5
cd ~
명령어는 어떤 작업을 실행하나요?
작업 디렉터리가 홈 디렉터리로 변경됩니다. 특수문자 ~는 현재 사용자의 홈 디렉터리를 식별하는 데 사용됩니다. 다른 사용자 이름과 함께 사용하여 홈 폴더를 가리킬 수도 있습니다(~user2).
질문 6
다음 중 탭을 사용하여 파일 이름을 자동 완성하는 이유가 아닌 것은 무엇인가요?
처리 능력이 덜 필요하기 때문은 올바르지 않습니다. tab
는 자동 완성할 파일 이름을 찾기 위해 폴더를 검색하는 데 약간의 처리 능력이 필요하지만 (대부분 무시할 수 있음) 이 과정에서 시간을 절약하고 맞춤법 오류를 방지합니다.
질문 7
새 개발자가 'my script.py
'이라는 파일을 만들려고 하면 touch my script.py
명령어가 작동하지 않는 이유는 무엇인가요?
파일이 하나가 아닌 두 개가 생성됩니다. touch
명령어는 새 파일을 만듭니다. 터미널에서 공백은 구분자이며 파일 이름에 포함되는 문자가 아닙니다. 이러한 문자는 완전히 피하는 것이 가장 좋지만, 꼭 사용해야 하는 경우에는 파일 이름을 큰따옴표로 묶어야 합니다.
touch "my script.py"
질문 1
디렉터리를 변경하는 터미널 명령어는 다음과 같습니다.
move
mkdir
pwd
cd
질문 2
현재 작업 디렉터리의 상위 폴더로 이동하려면 어떤 명령어를 실행해야 할까요?
cd up
cd .
cd ..
cd ~
질문 3
파일을 만드는 데 사용되는 명령어는 무엇인가요?
touch
mkdir
create
pwd
질문 4
다음 명령어 중 index.html
및 style.css
이라는 두 파일을 만드는 명령어는 무엇인가요?
touch index.html, touch style.css
touch index.html, style.css
touch index.html style.css
touch index.html + style.css
질문 5
파일이나 폴더의 이름을 변경할 때 어떤 명령어를 사용하나요?
rename
move
mv
rm
질문 6
rm
및 cp
명령어가 폴더에서 작동하려면 어떤 플래그가 필요하나요?
-f
-r
-x
-d
질문 7
projects
을 ~/Documents
로 이동하고 Projects
로 이름을 바꾸려면 빈칸에 어떤 명령어를 넣어야 할까요?
cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects
pwd
cd projects
mv ~ projects
cd ~/Documents
ls
질문 8
다음 명령어는 어떤 작업을 실행하나요?
rm -r projects
projects
라는 파일을 삭제합니다.projects
이라는 폴더를 삭제합니다.projects
라는 파일의 이름을 바꿉니다.- 현재 디렉터리의 콘텐츠에서
projects
검색
질문 1
디렉터리를 변경하는 터미널 명령어는 다음과 같습니다.
디렉터리를 변경하는 터미널 명령어는 cd
입니다. 명령어 자체는 '디렉터리 변경'의 약어입니다.
질문 2
현재 작업 디렉터리의 상위 폴더로 이동하려면 어떤 명령어를 실행해야 할까요?
상위 폴더로 이동하는 명령어는 cd ..
입니다.
질문 3
파일을 만드는 데 사용되는 명령어는 무엇인가요?
파일을 만드는 명령어는 touch
입니다.
질문 4
다음 명령어 중 index.html
및 style.css
이라는 두 파일을 만드는 명령어는 무엇인가요?
touch index.html style.css
명령어를 사용하면 두 파일이 생성됩니다. 쉼표는 필요하지 않으며 공백으로 구분하여 원하는 수의 파일을 만들 수 있습니다.
질문 5
파일이나 폴더의 이름을 변경할 때 어떤 명령어를 사용하나요?
mv
는 '이동'을 의미하며 파일이나 폴더를 이동하는 데 사용할 수 있지만 파일과 폴더의 이름을 변경하는 데도 사용할 수 있습니다.
질문 6
rm
및 cp
명령어가 폴더에서 작동하려면 어떤 플래그가 필요하나요?
rm
및 cp
명령어는 폴더에서 작동하려면 -r
플래그가 필요합니다. -r
플래그는 '재귀'를 의미하며 포함된 파일 및 폴더에 대해 명령어를 다시 실행하기 때문입니다.
질문 7
projects
을 ~/Documents
로 이동하고 Projects
로 이름을 바꾸려면 빈칸에 어떤 명령어를 넣어야 할까요?
cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects
홈 디렉터리에서 시작하므로 올바른 디렉터리에서 실행할 최종 명령어를 가져오려면 cd ~/Documents
을 실행해야 합니다.
질문 8
다음 명령어는 어떤 작업을 실행하나요?
rm -r projects
이 명령어는 -r
또는 재귀 플래그와 함께 호출되므로 projects
라는 파일 또는 폴더를 삭제합니다
. 이 플래그가 없으면 이 명령어는 해당 이름의 파일을 삭제하는 데만 작동합니다.