도커를 만듦에 있어서 리눅스 기본 명령어에 대한 공부가 선행되어야 겠다는 생각이 들었다. 유투브 뉴렉처 채널 리눅스 강의를 봤다. 아는건 정리 안하고 모르는 것만 할거다.
1. Shell
OS와 사용자가 커뮤니케이션 하기 위해서는 대화 창구가 필요하다. OS를 감싸고 있다고 해서 Shell이라고 불린다. 윈도우에는 탐색기와 프롬프트 창 두 가지가 존재하고 리눅스도 GUI와 CLI 둘 다 존재한다.
Linux의 쉘 종류
1. bash shell(bourn again shell)
2. csh
3. ksh
4. tcsh 등등이 있다.
bash가 모든 유닉스 계열 OS가 가지고 있는 쉘로 가장 많이 쓰인다.
1. root 권한 실행
switch user
sudo su - root
sudo su -
sudo su
유저는 유지한 상태에서 권한만 root로 변경한다
2. 경로이동
기본 명령어
pwd
print working directory
ls
list
ls -l
list 자세히
cd
change directory
상대경로와 절대경로
cd var
cd ./var
상대경로
cd /dev/hojin
절대경로
clear
내용들 지우기
man {command}
메뉴얼 보기
ls --help
를 이용도 가능하다
여기서 보면 알 수 있듯 root는 / 로 표시되고 home은 ~로 표시되며 ~로 이동도 한번에 가능하다.
3. 파일 시스템 명령어
mkdir
디렉토리 생성
rmdir
디렉토리 삭제
touch
빈 파일 생성
mv
파일이동 / 변경
rm
파일 삭제
rm -r
해당 파일의 recursive한 삭제
cp
파일 복사
rename bin aa
기본 유틸리티가 아니라 mv를 쓴다
폴더는 mkdir로 만들면 될 것이고 파일은 touch로 만든다. 그러고 나서 -l을 이용해 목록을 찍어보면
보라색은 디렉토리라 d가 앞에 붙게되고 text.txt는 파일이다.
위에서 rmdir이 디렉토리를 삭제하는 명령어라고 했지만 만약 해당 디렉토리를 rmdir로 지우려 한다면 그 안의 트리들을 전부 수동으로 삭제해줘야 한다. 이럴때 rm의 -r 명령어를 사용하면 된다. 만약 그 안에 파일들을 보면서 삭제하고 싶다면 rm -ri 옵션을 사용하면 된다.
4. vi, nano
visual의 축약으로 unix기반 운영체제에서 POSIX를 기반으로 만들어진 텍스트 편집기라고 보면 된다. 명령어부터 살펴보자.
기본적으로 만들어진 파일에 vi 명령어를 통해 진입할 수 있다.
vi Hello.java
vi +n Hello.java
vi -r Hello.java
위의 vi 명령어를 통해 파일에 들어간 후 i를 입력하면 insert 모드로 들어간다.
여기서 ESC를 누르면 아래 insert가 사라진다. :wq를 누르면 저장할 수 있고 거기서 혹은 :q를 누르면 저장 없이 종료 가능하다.
입력을 시작할 때 여러 모드를 사용할 수 있다.
vi 시작하면 끝도 없을 것 같아서 다음으로 넘어가자
nano라는 것도 사용할 수 있는데 리눅스 기본 편집기로 nano와 editor 두 가지 명령어로 접근 가능하다.
nano Hello.java
editor Hello.java
이 또한 텍스트 편집기이므로 리눅스로 돌아가보자.
5. 파일 찾기와 파일정보 확인
- find
해당 워크스페이스의 구조가 다음과 같고 .java 파일을 모두 찾고 싶다면
find ./ -name *.java
find ./ -name *Hello*
Hello 포함된 것 찾기
이렇게 적어주면 java 파일의 경로가 모두 나오게 된다. 용량으로도 찾아줄 수 있는데
find . -name *.java -size +1c
이렇게 검색해주면 바이트 단위의 검색이 가능하다.
- cat
concatenate file and print on the standard output
문서 전체를 출력하는 명령어다.
cat Hello.java
- head
output the first part of files
문서의 일부를 출력하는 명령어로
head -n2 Hello.java
앞의 두 줄만 검색
tail -n2 Hello.java
뒤의 두 줄만 검색
- grep
print lines matching a pattern
grep class Hello.java
Hello.java에서 class를 찾아 해당 라인을 출력
grep -i class Hello.java
대소문자 구분 X
- ls
ls Hello[12].java
이렇게 하면 Hello1, Hello2를 동시에 조금 더 정확하게 찾을 수 있다.
- cmp
cmp Hello.java Hello1.java
이렇게 두 개의 파일이 있다고 했을 때 cmp를 진행하면 다음과 같다.
- diff
cmp가 일종의 요약이었다면 diff는 다른 부분을 비교해준다.
diff Hello.java Hello1.java
- file
해당 파일에 대한 요약정보를 보여준다.
6. 그 외 명령어들
- clear
쉘 초기화
- history
지금까지 다뤘던 명령어 리스트업
이곳에 있는 숫자를 이용해서 명령어를 실행할 수도 있는데
!245
는 file Hello1.java가 된다.
- redirect
위에서 쓴 명령어 리스트업을 파일화 하고 싶다면
history > listup
이렇게 적어주면 파일화된 history들을 확인할 수 있다.
echo와 redirect를 동시에 사용하면 vi나 기타 편집기를 사용하지 않고도 바로 파일화를 할 수도 있는데
echo helloooo > echotest
이렇게 적어주면 helloooo라는 내용의 echotest파일이 만들어지게 된다.
잠깐 여기서 같은 파일에 또 echo를 해주면?
echo again > echotest
뭘봐 임마 덮어써진다. 이어 쓰려면 >>를 써줘야 한다.
echo again2 >> echotest
원하는 결과가 나왔다.
- |
| 를 통해 앞에 들어온 입력에 대한 연산을 선택할 수 있다.
cat Hello | grep He
이렇게 적으면 Hello를 입력해서 그 안의 'He'를 확인할 수 있다.
익숙하다. 프로세스 킬이나 네트워크 확인할 때 뭔지도 모르고 썼던 것 같은데 이런 용도였다.
cat test | sort -r
이건 파일을 거꾸로 출력해준다
cat test | sort -r | grep el
이건 test를 reverse로 정렬해서 el이 있는지 확인하는 구문이다.
ls 에서도 | 를 이용할 수 있는데
ls -l | less
이렇게 적어주면 해당 디렉토리에 있는 파일 명세를 끊어서 볼 수 있다.
ls -l | more
이건 더 볼수 있다.
;
| 가 해당 입력에 대한 연산이었다면 ;은 그냥 명령어를 한 줄에 연속으로 쓸 때 쓸 수 있다.
touch echotest; echo "again3" >> echotest; cat echotest
6. 파일압축
리눅스의 파일 압축에 대해 알기 위해선 tar에 대해 이해하고 있어야 한다.
tar란 Tape Archive의 줄임말로
tar + zip