
다른 게시물에서 자세히 다루겠지만, 필자는 프랑스의 소프트웨어 양성 프로그램 '에꼴42(Ecole42)' 의 교육 인프라를 수입한 교육과정인 '42경산'의 1기를 현재 준비중이다. 한국에서는 '42서울'로 이미 여러 기수들을 거쳐 인재들을 키우는 중인데, 이번에 지방에서도 소프트웨어 인재들을 키우기 위해 국내에서 2번째로 도입하여 '42경산'을 유치했다고 한다.
'42서울'이라는 선례가 있기에, 42과정에 관해 여러 정보들을 수집할 수 있었다. 우선 '라피신 (La piscine)'이라는 1달 집중 교육 과정을 거치는데, 이때 Linux 환경에서 C, shell 등을 다루게 된다고 하여 미리 기본을 익히고자 이 게시물을 작성하게 되었다.
개발자라면 어떤 플랫폼이나 프로그램을 사용하든 터미널에서 커맨드라인이 중요한 툴박스로 쓰인다고 하는데, 이 필수적인 내용들을 간단하게 다뤄보도록 하겠다.
shell은 운영체제 상에서 다양한 기능과 서비스를 구현하는 인터페이스를 제공한다. 텍스트로 script를 작성하여 컴퓨터에 명령하고, 이를 실행시킨다.
Unix에는 Bourne Shell, Bash, fish, zsh 등 여러 Shell 이 존재하는데, 이 중 하나만 잘 사용해도 비슷하게 익힐 수 있다. 그리고 여러 환경들 (Linux, Mac OS, Windows) 에서 사용 가능하며, 일반적으로 사용하는 windows 운영체제에서는 별도 설치없이 shell을 사용하기 위해 powershell을 사용한다.
unix shell에서는 텍스트로 모든게 이뤄져있다면, powershell은 오브젝트(객체)를 위주로 이뤄져 있어 매우 다른 터미널이다. 하지만 powershell에서 aliases 가 제공되어 unix에서 사용하는 명령어를 비슷하게 사용가능하다.
이후 42과정에서 unix에서 파생된 linux 환경에서 shell을 다룰 예정이지만, 현재 linux 환경이 준비되어 있지 않아 powershell로 다뤄보도록 하겠다. unix (linux) 환경에서의 명령어도 참고용으로 포함하여 작성하겠다.



< unix >
ls : 사용 시 폴더와 파일들의 이름을 보여준다.
ls 폴더명 : 해당 폴더 내의 폴더와 파일명들을 보여준다.
ls -l : 파일의 이름과 사이즈 등 자세한 내용을 볼 수 있다.
ls -a : 숨겨진 파일이나 디렉토리도 포함하여 볼 수 있다.
ls -la : 숨겨진 파일이나 디렉토리를 포함하여 자세한 내용을 볼 수 있다.
open . : 현재 디렉토리를 파일탐색기에서 열고 싶을 때 작성한다.
< powershell >
ls : 사용 시 폴더와 파일의 이름과 사이즈 등 자세한 내용을 볼 수 있다.
ls -name : 사용 시 폴더와 파일들의 이름을 보여준다.
ls 폴더명 : 해당 폴더 내의 폴더와 파일명들을 보여준다.
ls -force : 숨겨진 파일이나 디렉토리를 포함하여 자세한 내용을 볼 수 있다.
explorer . : 현재 디렉토리를 파일탐색기에서 열고 싶을 때 작성한다.

cd 폴더명 : 현재있는 경로의 위치를 해당 폴더로 변경한다.
cd .. : 현재있는 경로의 바로 상위 경로로 이동한다.
cd ~ : 현재 설정된 사용자의 홈 디렉토리 (최상위 경로)로 이동한다.
cd - : 이전 경로로 이동한다. 왔다갔다 유용하게 사용 가능. (powershell 에서는 스크립트를 추가로 작성해야 사용가능 하다.)

< unix >
find . -type file -name "*.txt" : 디렉토리 내에 확장자가 txt로 끝나는 파일 찾기
find . -type file -name "*.json" : 디렉토리 내에 확장자가 json로 끝나는 파일 찾기
find . -type directory -name "*2" : 디렉토리 내에 2로 끝나는 이름의 디렉토리 찾기
< powershell >
get-childitem -File -Filter "*.txt" -Recurse : 디렉토리 내에 확장자가 txt로 끝나는 파일 찾기 (recurse : 재귀적으로 검색이 되도록 설정)

< unix >
which 파일명 : 해당 파일의 실행경로를 확인해볼 수 있다.
< powershell >
get-command 파일명 : 해당 파일의 실행경로를 확인해볼 수 있다.
gcm 파일명 : 해당 파일의 실행경로를 확인해볼 수 있다. (명령어 줄여서 사용)

touch : 원하는 파일이름을 작성하면 새로운 파일을 만들 수 있다. 파일이 존재하지 않는다면 생성하고 기존에 존재하는 파일이면 수정 날짜가 업데이트 된다. powershell에서는 aliases가 제공되지 않아 new-item 으로 사용하면 된다.
cat : 파일 안의 내용들을 빠르게 확인해볼 수 있다. 여러 파일 이름을 작성하면 모든 파일들의 컨텐츠를 한 번에 확인할 수 있다.
echo : echo 뒤 큰따옴표 안에 문자열을 작성하면, 해당 문자열을 출력시켜준다. 문자열 작성 후 '> 파일명'을 작성하여 파일에 덮어씌워 넣어줄 수 있고, '>> 파일명'을 작성하면 append 처럼 기존 문자열 뒤에 추가가 된다.

mkdir -p 파일명1/파일명2/파일명3 ... : 한번에 필요한 모든 sub directory를 만들 수 있다.

cp : copy의 약자로, 원하는 파일과 원하는 경로를 작성하면 파일이 경로로 복사가 된다. 경로에 파일이름을 작성하면 새로운 파일로 복사된다.
mv : move의 약자로, 원하는 파일과 원하는 경로를 작성하면 파일이 경로로 이동이 된다. 경로에 파일이름을 작성하면 새로운 파일로 이동된다.
rm : remove의 약자로, 원하는 파일이름을 작성하면 해당파일이 삭제가 된다. rm으로 directory를 그냥 삭제하려면 경고메시지가 나오는데, -r 옵션을 rm 뒤에 작성해야 directory가 제거가 가능하다. 경로 내의 또다른 경로들도 함께 삭제된다. (powershell 에서는 파일명 뒤에 -Recurse 를 작성하도록 한다.)

< unix >
grep 키워드 파일(또는 확장자) : 검색하고자 하는 키워드를 특정 파일 또는 확장자에서 찾는다.
grep -n 키워드 파일(또는 확장자) : 검색하고자 하는 키워드가 몇번째 줄인지 포함하여 특정 파일 또는 확장자에서 찾는다.
grep -ni 키워드 파일(또는 확장자) : 검색하고자 하는 키워드의 대소문자 상관없이 특정 파일 또는 확장자에서 찾는다.
grep -nir 키워드 파일(또는 확장자) : 현재 프로젝트의 모든 경로 내에서 찾고 싶을때 recurse(r)를 포함하여 특정 파일 또는 확장자에서 해당 키워드를 찾는다.
< powershell >
select-string 파일(또는 확장자) -pattern 키워드 : 검색하고자 하는 키워드를 특정 파일 또는 확장자에서 찾는다.
select-string *, */* -pattern 키워드 : 현재 경로와 현재 경로 안의 모든 경로 내에서 해당 키워드를 찾는다. (recurse 옵션이 없어서 경로를 직접 구분)
select-string 파일(또는 확장자) -pattern 키워드 -CaseSensitive : 기본적으로 powershell에서는 대소문자를 구별하지 않으므로 소문자만 찾고 싶을 때 옵션을 추가하여 작성한다.

< unix >
export 환경변수명(대문자) = "디렉토리명" : 내 컴퓨터에 환경 변수를 설정한다. 환경 변수에 해당 경로를 저장한다.
env : 내 컴퓨터의 모든 환경변수를 확인할 수 있다.
$환경변수명 : 설정해둔 환경변수를 사용할 때 $를 붙인다.
unset 환경변수명 : 설정해둔 환경변수를 삭제한다.
< powershell >
$env:환경변수명 = "디렉토리명" : 내 컴퓨터에 환경 변수를 설정한다. 환경 변수에 해당 경로를 저장한다.
ls env: : 내 컴퓨터의 모든 환경변수를 확인할 수 있다.
$env:환경변수명 : 설정해둔 환경변수를 사용할 때 $env:를 붙인다.
$env:환경변수명 = "" : 설정해둔 환경변수를 삭제할 때 공백을 저장하면 된다.


vim 파일명 : 새로운 파일을 만들어 vim 에디터 모드를 실행한다.
< vim 에디터 모드 진입 시 >
i : 글자를 수정하거나 삭제할 수 있게 함.
esc 누르고 :wq : 수정사항 저장하며 종료
esc 누르고 :q! : 저장하지 않고 강제 종료
(linux 서버 환경에서는 간단한 텍스트 에디팅을 vi, vim으로 하지만, powershell 에서는 vi, vim이 없으므로 따로 설치하여 사용하여야 한다.)
참고자료 : Youtube 드림코딩 (https://www.youtube.com/watch?v=EL6AQl-e3AQ)