Linux 명령어
- [Linux #1] Basic Command
- [Linux #2] 북스택 관련
- [Linux #3] cmd 에서 포트 열려 있는지 확인하는 명령어
- [Linux #4] vi 에디터랑 nano 에디터 간단한 사용법
[Linux #1] Basic Command
자동완성: `Tab` 키
붙여넣기:`Shift + INS` 또는 우클릭
1. ls (List)
ls : 현재 디렉토리의 모든 파일 및 폴더를 기본 형식으로 보여준다.
ls -l : 파일 및 폴더에 대한 자세한 정보와 함께 리스트업 한다.
ls -a : 숨겨진 파일을 포함하여 모든 파일을 보여준다.
2. cd (Change Directory)
cd는 디렉토리를 변경한다.
cd Documents : 현재 디렉토리에서 'Documents'라는 이름의 폴더로 이동한다.
cd .. : 현재 디렉토리의 상위 폴더로 이동한다. (즉, 되돌아간다.)
3. pwd (Print Working Directory)
pwd : 현재 작업 중인 디렉토리의 경로를 표시한다
4. mkdir (Make Directory)
mkdir은 새로운 디렉토리(폴더)를 생성
mkdir new_folder : 현재 디렉토리에 'new_folder'라는 이름의 새 디렉토리를 생성
mkdir -p folder1/folder2 : 'folder1'내에 'folder2'를 생성한다. -p는 상위 디렉토리가 없는 경우, 그 상위 디렉토리를 생성하는 옵션
5. rmdir (Remove Directory)
rmdir은 디렉토리를 삭제
rmdir old_folder : 'old_folder'라는 이름으 디렉토리를 삭제
rmdir은 디렉토리가 비어있을 때만 작동한다. 내부에 파일이나 다른 디렉토리가 있으면 오류가 발생한다.
디렉토리 안의 파일과 함께 삭제하려면 rm -r 명령어를 사용해야 한다.
6. rm (Remove)
rm은 파일이나 디렉토리를 삭제
rm file.txt : 'file.txt'라는 파일을 삭제
rm -r folder : 'folder'라는 디렉토리와 그 안의 모든 내용을 삭제
삭제된 파일은 복구가 어렵기 때문에, 중요한 파일을 삭제하기 전에는 항상 확인하는 것이 좋다.
7. touch
touch는 새로운 빈 파일을 생성하거나, 기존 파일의 타임스탬프(날짜 및 시간 정보)를 현재 시간으로 갱신한다.
touch new_file.txt : 'new_file.txt'라는 새 파일을 생성한다. 파일이 이미 존재한다면, 타임스탬프가 갱신된다.
매우가 간단하고 빠르게 파일을 생성할 수 있으며, 스크립트나 로그 파일을 초기화할 때 유용하다.
8. cp (Copy)
cp는 파일이나 디렉토리를 복사한다.
cp source.txt destination.txt : 'source.txt'를 'destination.txt'로 복사한다. 'destination.txt'가 이미 존재하면 덮어쓴다.
cp -r source_dir destination_dir : 'source_dir'디렉토리와 그 내용을 'destination_dir'로 복사한다.
9. mv (Move)
mv는 파일이나 디렉토리의 위치를 이동시키거나 이름을 변경한다.
mv old_name.txt new_name.txt : 'old_name.txt'의 이름을 'new_name.txt'로 변경한다.
my file.txt /path/to/directory/ : 'file.txt'를 지정된 디렉토리로 이동한다.
mv 명령어는 파일을 이동시킬 때 복사 후 삭제하는 것이 아니라 파일의 위치정보만 변경하기 때문에 처리 속도가 빠르다.
이동하려는 대상 경로에 같은 이름의 파일이 이미 존재할 경우, 기존 파일은 덮어쓰여진다.
10. cat (Concatenate)
cat은 텍스트 파일의 내용을 화면에 출력하거나, 여러 파일의 내용을 연결하여 출력한다.
cat file.txt : 'file.txt' 파일의 내용을 화면에 표시한다.
cat file1.txt file2.txt > combined.txt : 'file1.txt'와 'file2.txt'의 내용을 합쳐 'combined.txt'에 저장한다.
11. chmod (Change Mode)
chmod는 파일이나 디렉토리의 권한을 변경한다.
chmod 755 file.sh : 'file.sh'파일에 대해 소유자에게는 읽기, 쓰기, 실행 권한을 부여하고, 그룹과 기타 사용자에게는 읽기와 실행 권한만 부여한다.
chmod u+x file.sh : 'file.sh' 파일에 대해 현재 사용자에게 실행 권한을 추가한다.
권한 변경은 보안에 영향을 줄 수 있으므로 신중히 사용해야 한다.
12. grep (Global Regular Expression Print)
파일 내용 중에서 지정된 패턴이나 문자열을 검색하여 그 결과를 출력한다.
grep "text" file.txt : 'file.txt'에서 "text"라는 문자열이 포함된 모든 줄을 표시한다.
grep -r "text" . : 현재 디렉토리와 하위 디렉토리에서 "text" 문자열을 재귀적으로 검색한다.
정규 표현식을 사용하여 복잡한 검색 패턴을 지정할 수 있으며, 로그 파일 분석이나 특정 데이터 추출에 유용하다.
13. echo
주어진 문자열을 터미널에 출력한다. 환경 변수의 값을 표시하거나, 파일에 텍스트를 쓰는 데에도 사용된다.
echo "Hello World" : 터미널에 "Hello World"라는 문구를 출력한다.
echo $HOME : 'HOME' 환경 변수의 값을 출력한다.
echo "some text" > file.txt : "Some text"라는 문구를 'file.txt'파일에 저장한다.
스크립트 작성 시 변수의 값을 확인하거나, 파일에 내용을 빠르게 추가할 때 유용하다.
14. man (Manual)
리눅스 명령어의 사용법, 옵션, 기능 등을 설명하는 매뉴얼 페이지를 제공한다.
man ls : 'ls' 명령어에 대한 매뉴얼 페이지를 보여준다.
15. sudo (SuperUser DO)
일반 사용자가 관리자(superuser) 권한을 가지고 명령어를 실행할 수 있게 한다. 시스템 설정 변경, 중요한 파일 수정, 관리자 권한을 필요로 하는 소프트웨어 설치 시 사용된다.
sudo apt-get update : 패키지 리스트를 업데이트 한다.
16. find
파일이나 디렉토리를 검색한다.
find . -name "file.txt" : 현재 디렉토리에서 'file.txt' 파일을 찾는다.
find / -type d -name "config" : 루트 디렉토리에서 'config'라는 이름의 디렉토리를 찾는다.
17. cp (copy)
cp source_file destination
: 파일을 복사한다.
18. cat (Concatenate)
cat은 파일의 내용을 출력하는 명령어로, 파일을 열어 내용을 볼 때 사용한다.
cat file.txt: file.txt 파일의 내용을 출력
cat file1.txt file2.txt: 여러 파일의 내용을 차례대로 출력
19. cat (Concatenate)
cat은 파일의 내용을 출력하는 명령어로, 파일을 열어 내용을 볼 때 사용한다.
cat file.txt: file.txt 파일의 내용을 출력한다.
cat file1.txt file2.txt: 여러 파일의 내용을 차례대로 출력한다.
20. vi(Visual Editor) 로 파일수정
쉘에서 텍스트 파일을 vi 에디터로 열고 수정할 수 있다. 기본적으로 두 가지 모드(명령 모드와 편집 모드)가 있다.
vi file.txt: file.txt 파일을 vi 편집기로 열기 (명령 모드로 열림)
i 편집 모드로 진입
Esc 명령 모드로 돌아가기
:w 파일을 저장
:q vi 종료
:wq 저장 후 종료
:q! 저장하지 않고 종료
[Linux #2] 북스택 관련
패키지 목록업데이트, 도커 설치, Docker compose 설치?
sudo apt update
sudo apt install docker.io
sudo apt install docker-compose
도커 컨테이너 실행 중 에러
dainwiki@DESKTOP-4OPVAQ5:~$ docker-compose up
ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
in "./docker-compose.yaml", line 6, column 31
ERROR: yaml.scanner.ScannerError: mapping values are not allowed here in "./docker-compose.yaml", line 6, column 31
yaml 파일 6줄 31번째 글자 확인
vi docker-compose.yml
i
:6
6번째줄 31번째 글자는 :(컬럼)
yaml Validator 돌려 봤으나 Valid yaml 로 나옴
예상 문제 원인
1. .env 파일 변수 문제
.env
파일에 필요한 모든 변수가 제대로 정의되었는지 확인
vi .env
이상 없음
2. 접근 권한 문제
도커 버전 확인
dainwiki@DESKTOP-4OPVAQ5:~$ docker --version
Docker version 24.0.7, build 24.0.7-0ubuntu2~22.04.1
접근권한
dainwiki@DESKTOP-4OPVAQ5:~$ sudo chmod -R 755 /home/dainwiki/bookstack_data
dainwiki@DESKTOP-4OPVAQ5:~$ sudo chmod -R 755 /home/dainwiki/bookstack_db
3. 포트 충돌
sudo apt install net-tools
netstat -ano
[Linux #3] cmd 에서 포트 열려 있는지 확인하는 명령어
포트포워딩 했는데 외부IP에서는 접속 안되는 문제를 겪음
그래서 공유기에서 포트포워딩 후 포트가 제대로 열려 있는지 확인하는 법
cmd에서 netstat -an 명령어로 확인 가능하다
netstat -an | find "8080"
netstat -an | find "80"
포트가 열려 있으면 아래와 같이 LISTENING 문구가 출력된다.
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING
TCP [::]:8080 [::]:0 LISTENING
이 결과는 8080 포트가 현재 열려 있고 리스닝 중인 상태임을 나타낸다.
0.0.0.0:8080 또는 [::]:8080은 해당 포트가 모든 IP 주소에서 접속을 기다리고 있다는 의미이다.
LISTENING 상태는 해당 포트가 열려 있고, 외부에서 연결을 받을 준비가 되어 있다는 것을 뜻한다.
만약 포트가 열려 있지 않을 때는 명령어 실행 후 아무것도 출력되지 않는다. (해당 포트에 대한 연결이 없다는 뜻)
포트가 이미 다른 프로그램에 의해 사용되고 있는 경우, 아래와 같이 ESTABLISHED 라는 상태로 표시된다.
TCP 0.0.0.0:8080 0.0.0.0:0 ESTABLISHED
8080 포트는 열려 있지만, 이미 외부에서 접속이 이루어지고 있다는 의미이다.
[Linux #4] vi 에디터랑 nano 에디터 간단한 사용법
WSL이나 우분투 같은 리눅스 환경에서는 설정 파일(.bashrc, .vimrc, /etc/hosts, /etc/network/interfaces 등등)
을 수정하거나 확인할 때 vi나 nano 같은 에디터를 꼭 써야 할 때가 많다.
🖋️ vi (또는 vim)
모드 구분: 명령 모드, 입력 모드
처음엔 명령 모드로 시작
입력 모드로 전환
i : 현재 커서 위치에서 입력 시작
a : 커서 다음 위치부터 입력
o : 새로운 줄 만들어 입력
입력 모드 → 명령 모드로 돌아가기
Esc
저장 / 종료
:w : 저장
:q : 종료
:wq : 저장하고 종료
:q! : 저장 안 하고 강제 종료
기타 단축
dd : 현재 줄 삭제
yy : 현재 줄 복사
p : 붙여넣기
🖋️ nano
입력 모드 따로 없음. 바로 타이핑하면 됨!
저장 / 종료
Ctrl + O : 저장 (Write Out)
Enter : 파일 이름 확인하고 저장 완료
Ctrl + X : 종료
(수정한 파일이면 종료할 때 저장할지 물어봄)
기타 단축
Ctrl + K : 줄 삭제
Ctrl + U : 붙여넣기
Ctrl + G : 도움말 보기
파일 열기
vi 파일이름
nano 파일이름
특히 시스템 설정 파일 수정할 때는 sudo 권한도 필요함
sudo vi 파일이름
sudo nano 파일이름
수정하기
vi는 i 눌러서 입력 모드 → 수정
nano는 그냥 바로 수정 가능
저장하고 나오기
vi는 Esc → :wq
nano는 Ctrl + O → Enter → Ctrl + X
vi 쓰다가 실수로 파일 열어놓고 "어떻게 나가야 해??" 싶을 때, 기억 안 나면 무조건 Esc 누르고 :q! 하면 강제로 나올 수 있다.
중요한 설정파일 수정할 때는 수정 전 백업도 많이 한다.
예를 들면:
sudo cp /etc/hosts /etc/hosts.bak
이렇게 .bak 파일로 백업하고 수정하면 실수해도 복구 가능하다.