서론
ELITE HACKER Bootcamp 3rd 1주차 수업 공부 내용
aws 우분투 서버 하나 파서 연습
which, pwd, ls, cat, more, less, echo, head, tail, grep, ifconfig
which
지정한 명령어의 실행 파일의 경로를 출력
즉, 사용자가 입력한 명령어가 시스템 내에서 어디에 위치해 있는지를 알려주는 역할
pwd(Print Working Directory)
현재 작업중인 디렉터리의 절대 경로가 터미널에 출력
pwd에 크게 2가지 옵션이 있다.
- pwd -L
- pwd -P
-L의 경우에는 Logical의 약자로 기본 디폴트값이다. 현재 쉘 환경에서 설정된 경로를 기준으로 출력한다. 심볼릭 링크가 있을 경우 해당 링크 경로를 유지하며 출력한다.
-P의 경우에는 Physical의 약자로, 심볼릭 링크가 존재할 경우 링크를 따라가서 실제 물리적인 경로를 출력한다.
하드 링크 vs 심볼릭 링크
심볼릭 링크라는 단어가 위에 나오는데, 윈도우 기준으로 설명하면 "바로가기"와 비슷하다. 다른 파일이나 디렉터리의 경로를 가리키는 포인터 역할을 하며, 링크를 통해서 원본 파일이나 디렉터리에 접근할 수 있지만 실제 데이터를 포함하지 않는다.
하드링크는 일종의 "원본을 가리키는 또 다른 이름"라고 생각하면 된다. 복사와 비슷한 거 같지만 느낌은 다르다. 파일마다 Inode라는 게 존재하는데, 동일한 inode를 공유한다. 기존 파일이 삭제되어도, 해당 파일에 접근할 수 있다. 다만 심볼릭 링크는 기존 파일이 삭제되면 더이상 접근이 불가능하다.
그래서 pwd -P와 -L을 비교해보면
-P의 경우 심볼릭 링크의 원래 주소를 찾아간다.
which pwd를 하면
shell built-in command라고 나오는데 pwd가 쉘 내장 명령어라는 의미이다.
ls
ls는 파일이나 디렉터리의 목록을 보여주는 명령어다. 디렉터리 내의 파일과 서브디렉터리의 이름을 표시하고, 다양한 옵션을 사용하여 추가 정보(예: 파일 권한, 소유자, 크기, 수정 시간 등)를 볼 수 있다.
그냥 ls를 하면 현재 디렉터리에 있는 폴더 또는 파일의 목록을 볼 수 있다.
- -l: 상세 정보 출력 (긴 형식으로 파일 목록 표시)
- -a: 숨김 파일(.으로 시작하는 파일 포함) 표시
- -h: 사람이 읽기 쉬운 형식으로 파일 크기 표시 (예: 1K, 234M, 2G)
- -R: 하위 디렉터리의 내용까지 재귀적으로 표시
- -t: 수정 시간 기준으로 정렬(최근에 수정한 것 부터)
- -S: 파일 크기 기준으로 정렬
- -r: 정렬 순서를 반대로 표시
이러한 속성들이 존재하는데,
ls -al 로 -a 속성과 -l 속성을 동시에 출력했을 때 나오는 내용이다. 즉 숨겨진 모든 파일을 포함하여 길게 출력하시오.
중간 내용을 보면
drwxr-xr-x@ 11 seo staff 352 9 30 11:02 ani
이런 게 있는데,
파일권한 / 링크 수 / 소유자 / 그룹 / 파일 크기 / 마지막 수정일자 / 파일 이름 으로 표시되어있다.
파일권한
drwxr-xr-x, -rwxrwxrwx 이렇게 있다고 하면
맨 앞에 단어는 해당 파일의 유형을 의미한다.
- -: 일반 파일
- d: 디렉터리
- l: 심볼릭 링크
- c: 문자 장치 파일 (특수 파일)
- b: 블록 장치 파일 (특수 파일)
즉, d라고 적혀있으면 디렉터리이다, -로 적혀있으면 파일이다.
그다음 9개의 알파벳이 있는데, 3개씩 끊어서 생각한다.
처음 3개의 rwx 는 소유자의 권한. rwx란 읽기, 쓰기, 실행 권한이 전부 있다는 의미이다. 만약에 읽기 권한이 없다면 r대신에 -로 표시되어 -wx로 표현이 되는 식이다.
만약 읽기 권한, 실행권한만 있고, 쓰기 권한은 없다? 그러면 r-x로 표현이 될 것이다.
그 다음 3개는 그룹의 권한. 마지막 3개는 그 외 기타 사용자들을 의미한다.
이제
drwxr-xr-x@
를 해석해보면,
d 가 있기에 디렉터리이고,
소유자는 rwx로 읽기, 쓰기, 실행 권한이 있고
그룹은 r-x로, 읽기, 실행권한은 있으나 쓰기 권한은 없다.
다른 사용자는 r-x로 읽기, 실행 권한은 있으나, 쓰기 권한은 없다.
그럼 맨 뒤에 @는 뭐냐? 확장 속성을 의미한다.
파일이나 디렉터리에 추가적인 메타데이터를 저장할 수 있도록 하는 기능인데,. 일반적인 파일 메타데이터(파일 이름, 크기, 권한 등) 외에도 확장 속성을 통해 파일에 더 많은 정보를 부여할 수 있다고 한다.
자세한 건 나중에 또 다룰 거 같으므로 일단 넘어가겠다.
cat
파일의 내용을 연결(concatenate)하여 출력하는 데 사용. 보통 파일의 내용을 화면에 표시하거나 여러 파일을 연결하여 하나의 파일로 합치는 작업에 사용되는데, 보통 주로 파일 내용 보기 위해서 사용한다.
이렇게 cat [파일명]을 입력하면, 해당 파일의 내용물을 볼 수 있다.
파일명을 여러 개 입력하면 동시에 해당 파일들의 내용을 볼 수 있다.
cat 파일1 파일2 > 새파일명 입력을 통해서, 새로운 파일을 만들어서 거기에 지금가지 내용을 넣어줄 수 있으며
>>을 통해서 이어쓰기가 가능하다.
>는 덮어쓰기, >>는 이어쓰기라고 생각하면 된다.
cat에도 속성들이 여러 개가 있는데
- -n: 각 줄에 줄 번호 추가
- -b: 비어 있지 않은 줄에만 줄 번호 추가
- -E: 줄 끝에 $ 기호 표시
- -s: 연속된 빈 줄을 하나로 압축
- -T: 탭 문자를 ^I로 표시
-n은 그냥 줄마다 번호를 넣어주고, -b는 공백줄에는 번호를 넣지 않는다.
이때, -s 속성 까지 있으면 빈줄은 그냥 하나로 압축되어 아래와 같이 표현된다.
마지막으로 -E는 맨 뒤에 $를 계속 표시해주고, -T는 Tab이
^I로 표시된다.
cat 명령어는 한 번에 파일 전체를 출력하므로, 크기가 큰 파일의 경우 사용 시 큰일난다. 이 경우 less, more 등의 명령어를 사용해야한다.
more & less
위에서 more, less를 사용하여 cat을 쓸 때 사용한다고 했다.
이 둘은 텍스트 파일을 한 화면씩 출력하는 데 사용되는 명령어인데. 두 명령어 모두 긴 텍스트 파일을 스크롤하면서 읽을 수 있게 해주지만, 기능과 사용법에 차이가 있다. 약간 less가 more의 상위 호환 느낌.
cat a.txt | less
cat a.txt | more
more a.txt
less a.txt
less를 했을 때인데, 일단 more이든,less든
- 스페이스바: 다음 화면으로 이동
- Enter: 한 줄씩 이동
- q: 종료
는 똑같다. 다만 less에서는 탐색 및 검색까지 되는데,
- / : 앞에서 부터 검색
- ? : 뒤에서 부터 검색
그래서 /is 또는 ?is를 검색하면 검색 결과가 나올 것이다
echo
문자열을 출력하는 데 사용. 일반적으로 텍스트나 변수를 출력하거나, 스크립트에서 메시지를 표시할 때 유용하게 사용된다.
사진 처럼
- -n : 출력 후 줄바꿈 하지 않음
- -e : 이스케이프 문자 적용
이렇게 두 가지 속성을 추가로 알아두자.
얘도 아까 cat 처럼
echo "This is a test" > test.txt #이어쓰기
echo "This is a test" >> test.txt #덮어쓰기
이렇게 된다. 쉘에서 주석처리 하려면 #을 쓰면 주석처리가 된다.
head & tail
두 명령어는 파일의 내용을 부분적으로 출력하는 명령어입니다. head는 머리라는 뜻이니까 앞 부분 출력, tail은 꼬리니까 뒷 부분 출력해준다.
- -n : 줄 수
- -c : 바이트 수
이렇게 속성을 주어서 출력할 수 있는데
이런 느낌이다. 아스키코드로 사용시, 알파벳 하나당 1바이트씩 차지함으로
head -c 3 a.txt
tail -c 3 a.txt
하면 앞에서 3글자, 뒤에서 3글자씩 출력할 것이다.
이때 tail의 경우에는 로그 분석등에서 많이 쓰이는데, -f 속성을 같이 쓰면 새로 들어오는 로그들을 자동으로 출력시켜준다고 한다.
grep
텍스트 검색 및 패턴 매칭을 위해 사용되는 강력한 도구이다. 특정 문자열이나 정규 표현식 패턴이 포함된 줄을 파일이나 표준 입력에서 찾아서 출력해주는데...
grep [옵션] '패턴' [파일]
를 이용한다. 패턴은 정규 표현식을 사용하는데..
일단 옵션 부터 보자.
- -i: 대소문자 구분 없이 검색
- -v: 패턴과 일치하지 않는 줄 출력
- -n: 줄 번호와 함께 출력
- -c: 일치하는 줄의 개수 출력
- -l: 일치하는 파일 이름만 출력
- -r: 디렉터리를 재귀적으로 검색
- -w: 단어 단위로 일치 검색
- -o: 일치하는 부분만 출력
- -A, -B, -C: 일치하는 줄의 앞뒤 추가 줄 출력
- --color: 일치하는 부분을 색상 강조
이야 많다 많아...
ubuntu@ip-10-0-0-15:~$ cat a.txt | grep -i "He"
hello
grep -l "hello" *.txt
이렇게 하면, hello라는 단어를 가진 .txt 파일의 파일명을 출력
-L로 하면 포함되지 않은 애들 싹 다 출력
그렇다는데..문제 풀면서 하는 게 훨씬 나을 거 같다.
정규표현식
기본 메타 문자:
- .: 임의의 한 문자
- ^: 문자열의 시작
- $: 문자열의 끝
- *: 앞의 문자가 0개 이상 반복
- +: 앞의 문자가 1개 이상 반복
- ?: 앞의 문자가 0개 또는 1개
- []: 문자 집합 (예: [a-z])
- [^]: 집합에 포함되지 않은 문자 (예: [^0-9])
- |: OR 연산자 (예: cat|dog)
- **()**: 그룹화 (예: (abc)+)
- a{3, 5} : a를 3번이상 5번 이하 반복
특수 시퀀스:
- \d: 숫자 ([0-9])
- \D: 숫자가 아닌 문자 ([^0-9])
- \w: 문자 또는 숫자 ([a-zA-Z0-9_])
- \W: 문자 또는 숫자가 아닌 것 ([^a-zA-Z0-9_])
- \s: 공백 문자
- \S: 공백이 아닌 문자
이렇게 있는데
^a.c$ 하면 a_c인 모든 애들을 다 가져온다.
그래서 이메일을 가져오고 싶다?
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
해석하면 a-z, A-Z, 0-9 특수문자들이 앞에 1개 이상 있어야하고
그 다음 @
그 다음 \.은 특수문자 .
그 다음에 a-zA-Z에서 2개 이상 와야한다.
이걸 의미한다.
이것도 아마 연습 좀 해야할 것이다.
ifconfig
네트워크 인터페이스 설정 및 관리를 위한 명령어. 시스템의 네트워크 인터페이스 상태를 확인하거나 설정을 변경하는 데 사용된다.
일단 리눅스에서 ifconfig 를 사용하기 위하여
sudo apt update
sudo apt upgrade
sudo apt install net-tools
ifconfig
위 과정을 진행하여야한다.
보통 eth0, lo 이런 거 있는데
eth0 인터페이스 살릴거나 끄려면
ifconfig eth0 up
ifconfig eth0 down
이렇게 사용하면 되고
나중에 다시 알아보도록 하자. 지금 알아보기엔 너무 양이 많다.
'KnockOn' 카테고리의 다른 글
[KnockOn] Linux/Ubuntu 운영체제의 패키지 (0) | 2024.11.07 |
---|---|
[KnockOn] Linux/Ubuntu Symbolic Link (0) | 2024.11.07 |
[KnockOn] Linux/Ubuntu 리눅스 디렉터리 구조 (1) | 2024.11.06 |
[KnockOn] Linux/Ubuntu 파일기술자, Redirect (2) | 2024.11.06 |
[KnockOn] Linux/Ubuntu 운영체제 명령어 -2 (0) | 2024.11.05 |