리눅스 문제해결
예시) <시나리오> 우분투 업데이트 이후에 read 성능이 낮아졌다
read는 원래 어떻게 동작?
: 유저프로그램 ⇒ 시스템콜 ⇒ 커널(VFS/FS/Block) ⇒ 디스크 read(smartctl) // readahead(미리읽기): 사이즈 설정
□ 접근방법
■ 에러메시지: 결과적으로 나타난 현재상황을 나타낸다
■ 문제정의: 문제는 현재 상태의 차이(gap)이다
■ 원인분석: 동작과정이나 절차를 나열하고 관찰하고 근본 원인을 찾는다
■ 해결책 적용: 여러가지 해결방식을 적용한다. 해결과정에 대한 것들을 기록하고 메모하여 후에 해결방식에 대한 평가를 한다(임시방편인지 근복적인 해결방법인지 등)
□ 리눅스 명령어 및 파일 관련 오류
■ 명령어를 찾지 못하는 문제사례 (command not found)
원인 | 설명 | |
1 | 명령어 미설치 | 사용자가 실행하려는 프로그램이 시스템에 설치되어 있지 않을 때 발생 |
2 | 잘못된 명령어 입력 문제 | 오타 또는 잘못된 명령어 입력으로 인해 발생 |
3 | PATH 경로 문제 | 명령어가 $PATH 환경 변수에 포함된 디렉토리에 없을 때 발생 |
4 | 명령어 별칭(alias) 문제 | 명령어가 별칭(alias)을 설정했지만 해당 별칭에 대한 명령어 정의가 없을 때 발생 |
■ 예시
○ 3)
echo $PATH랑 같은 의미인듯??
PATH의 경로로 파일을 옮겨주던가 or PATH에 디렉토리를 추가해주던가
○ PATH 값을 임시적으로 수정하는 방법 (터미널을 2개 사용)
PATH=$PATH:/home/realinux
echo $PATH
아래는 다른터미널에서 실행
임시적인 것을 확인할 수 있다
○ PATH 값을 영구적으로 설정하는 방법 (터미널을 2개 사용)
~/.bashrc 파일 마지막 라인에 PATH=$PATH:/homereallinux 를 넣는다
source ~/.bashrc
아래는 다른 터미널에서 실행
영구적으로 설정됨을 확인할 수 있다
** /etc/profile.d/ 폴더에다가 설정하는 것과 ~/.bashrc 에 설정하는 것의 차이
- 설정파일의 일반적인 구조와 체계를 봐야함
1. 시스템 전체 기준 설정 ex) /etc/
2. 계정별로 적용되는 설정 ex) ~/.
3. 폴더별로 적용되는 설정파일 ex) ~/git/linux/.git/config
□ 명령어 및 파일 관련 요류
■ env
■ alias
○ 명령어 입력시에 오류를 냈을 때 source 를 안하면 오류가 안난다. source를 통해서 설정파일을 실행하면 오류가 남
○ 위의 캡쳐본과 같이 alias 명령어를 잘못 지정했을 때는 아래 캡쳐본과 같이 command 명령어를 입력해주면 임시적으로 정상적으로 실행된다
○ 만약에 command 를 입력하지 않고 명령어 주면 command not found 오류가 발생한다
○ 위의 캡쳐본과 같이 색까지 나오도록 임시적 설정이 가능하다
□ 계속 나오는 현상
원인 | 설명 | |
1 | ' 따옴표 (single quotes) |
명령어에서 ‘ 따옴표가 열리고 나서 닫히지않으면 다음 라인에 > 가 생성되고 다음 라인에서 문자열 입력이 가능하다 그리고 ‘을 닫지않고 Enter 키를 누르면 그 다음라인 생성된다 |
2 | " 쌍 따옴표 (double quotes) |
명령어에서 " 쌍따옴표가 열리고 나서 닫히지않으면 다음 라인에 > 가 생성되고 다음 라인에서 문자열 입력이 가능하다 그리고 "을 닫지않고 Enter 키를 누르면 그 다음라인 생성된다 |
3 | ' \ ' 백슬래시 (backslash) |
실제로는 하나의 명령어 라인이지만 명령어 입력을 여러개의 라인으로 나눠서 할 때 사용한다 |
4 | && AND 연산 | && 보다 하나의 명령어가 모두 정상적으로 실행했을때만 && 뒤의 명령어를 실행함 |
■ 예시
○ 3) \ 하나의 명령어 라인이 너무 길 때 여러 개의 라인으로 나눠서 작성함
○ 4) && 명령어로 앞의 명령어가 정상일 때만 뒤의 명령어를 실행함
- 명령어와 명령어 사이를 &&로 연결함 ⇒ 앞의 명령어가 정상 동작할 때 뒤의 명령어를 실행함
- 명령어와 명령어 사이를 ; 로 연결함 ⇒ 그냥 연이어서 실행함
□ 파일을 찾을 수 없는 문제 (No such file or directory)
■ 동작과정
1. 폴더 생성 (mkdir)
2. 폴더 링크 생성 (ln -s)
3. 링크를 통해서 cd
4. 원본 폴더를 삭제 ( rm -rf 명령어를 cd .. 으로 폴더를 나가서 하기)
5. 링크 폴더는 더이상 cd 명령어로 동작하지 않음
□ vi, vim 파일편집 오류 (Swap file already exists!)
- vim 파일 hello.sh 를 만든 후 열고 저장해놓은 상태에서 다른 터미널로 해당 파일을 열면 오류가 난다
** fg 명령어: 백그라운드에 있는 파일 들어가기
- ctrl z 로 해당파일을 나왔을 때는 다시 vim 으로 같은 파일을 들어가려고 할 때 오류가 난다
- jobs 명령어를 통해서 총 몇 개의 파일이 종료되어 있지 않은지 확인 후 fg 로 해당 파일들을 들어가 정상종료를 해주고나서 vim으로 다시 해당 같은 파일들을 들어가면 정상작동된다
□ 권한 유효 문제
- newuser 라는 새로운 계정을 만들고 실습을 했다 ⇒ 결론적으로 권한문제가 생겼다
- 왜냐하면 내가 항상 그 파일의 소유주이고 그 파일에 권한을 가졌다고해서 항상 권한이 유효하지는 않기 때문이다. 상위 디렉토리 실행권한이 없을 수도 있다
□ DNS 동작안됨?
문제상황재연
1. DNS 설정을 지운다
- 파일안에 nameserver 주석 표시하기 (#)
2. DNS 동작 안되는것 확인하기
3. sudo yum clean all 패키지 정보 캐시파일 비우기
4. sudo yum check-update 오류 메시지 확인하기
5. 오류해결의 경우에는 1번부터 다시 수정하면 된다
□ 패키지 저장소의 서버 URL 만료/수정 (특히 외부 패키지 저장소)
문제상황재연 (임의로 서버 URL 주소를 잘못되게 적기)
1. sudo nano /etc/yum.repos.d/CentOS-Base/repo 파일에 첫번째 base 끝에다가 err 을 추가함
2. 오류메시지를 확인함
□ 설치후보가 없는 패키지 (Package has no installation candidate)
- 위에 사진은 문제 상황을 재현해서 오류가 난 것을 확인하는 과정
□ 패키지 정보 캐시 데이터 손상오류 (Failed to fetch)
- 파일안의 내용을 바꾸니까 오류가 난다
- 해결방법으로는 싹다 지우고 다시 채운다