서론
ELITE HACKER Bootcamp 3rd 1주차 수업 공부 내용
절대경로, 상대경로
리눅스 디렉터리 구조
명령어 예제
도전
사용자 지정 명령어 만들기
절대경로 vs 상대경로
파일 시스템 내에서 특정 파일이나 디렉터리의 위치를 나타내는 방식이다. 이 두 개념은 파일이나 디렉터리 간의 경로를 이해하고 작업할 때 중요한 개념이다.
절대경로는, 실제 파일의 절대적인 위치를 의미한다. 그러기에 전체 경로를 나타내므로, 시작 위치에 관계없이 언제나 같은 위치를 가리킨다. 흔히 우리가 아는
cd /home/ubuntu/
이렇게 / 루트 디렉터리부터 해당 디렉터리 또는 파일이 어디에 있는지 나타낼 때 사용한다.
그렇다면 상대경로는?
상대적인 위치를 의미한다. 현재 작업 중인 디렉터리(현재 위치)를 기준으로 파일이나 디렉터리의 위치를 지정하는 경로인데, 현재 폴더는 .으로 표현하고 , 상위 폴더는 ..으로 표현한다
즉
cd ../projects/
이렇게 상위 디렉터리의 projects 디렉터리로 가라 이런식으로 사용한다.
아니면 현재 디렉터리 내부에 a라는 디렉터리가 있다면
절대경로로 표현한다면
cd /home/ubuntu/a
cd ./a #또는 cd a
길게 표현할 걸 상대경로로 간단하게 표현할 수 있다.
리눅스 디렉터리 구조
cd /
ls
로 이동하여 루트 디렉터리로 이동해보자(최상위 디렉터리)
뭔가 되게 많다. 저거 하나하나 다 알아보도록 하자.
/
루트 디렉터리이다. 시스템의 최상위 디렉터리로, 모든 파일과 디렉터리의 시작점이다. 루트 디렉터리 내에는 시스템과 사용자 파일을 관리하기 위해 다양한 하위 디렉터리가 포함되어있다.
/bin
기본 명령어들이 실행파일들이 위치하고 있다. ls, cat 이런 것들..
그리고 시스템 부팅시 사용할 수 있도록 기본적인 바이너리 파일들도 포함되고 있다.
/sbin
시스템 관리용 실행 파일이 저장된 디렉터리. reboot, ifconfig, fdisk 등과 같은 시스템 관리자용 명령어가 위치하기에, 일반 사용자보다는 root 권한을 가진 사용자가 이용할 수 있다.
/usr
시스템의 사용자 관련 응용 프로그램과 파일들이 저장되는 디렉터리
- /usr/bin: 사용자용 애플리케이션 바이너리.
- /usr/sbin: 시스템 관리용 바이너리.
- /usr/lib: 라이브러리 파일이 포함된 디렉터리.
- /usr/local: 사용자가 직접 설치한 프로그램이나 패키지가 저장되는 디렉터리.
/var
가변 파일들 저장되는 디렉터리
- /var/log: 시스템 로그 파일이 저장되는 디렉터리.
- /var/www: 웹 서버의 기본 웹 파일이 위치하는 디렉터리.
/etc
시스템 설정 파일이 저장. 시스템의 다양한 설정과 구성 파일들이 위치해 있으며, 네트워크 설정, 사용자 계정 정보 등이 포함
- /etc/passwd: 사용자 계정 정보 파일.
- /etc/fstab: 파일 시스템 마운트 정보.
- /etc/shadow : 사용자 계정의 비밀번호와 관련된 정보를 저장하는 파일
/home
사용자 계정의 홈 디렉터리가 저장되는 디렉터리. 각 사용자의 개인 파일과 디렉터리가 여기에 포함된다.
/home/user1, /home/user2 이런식으로 저장된다.
/root
루트 사용자의 홈 디렉터리. 일반 사용자의 홈 디렉터리와는 다르게 시스템 관리자(루트)의 개인 파일과 설정이 저장된다.
/tmp
말 그대로 임시파일 저장되는 곳. 그래서 주기적으로 삭제되고 그런다.
임시 작업이나 프로그램 실행 중에 필요한 임시 파일이 저장된다.
/dev
디바이스 파일이 위치.
하드웨어 장치가 파일 형태로 다루어지며, /dev/sda, /dev/tty 등이 포함된다.
- /dev/null:
- 일종의 쓰레기통
- 불필요한 출력을 제거하거나 테스트할 때 사용
ls -al > /dev/null
- /dev/zero:
- 기능: 무한한 0을 출력하는 특수 장치 파일로, 일반적으로 빈 데이터를 생성하는 데 사용
- /dev/tty:
- 기능: 터미널 장치 파일로, 현재 터미널 세션
- 프로그램이 표준 입력, 출력, 에러 출력을 터미널과 연결하도록 설정할 때 사용
echo "Hello" > /dev/tty
/proc
커널과 프로세스 정보를 포함한 가상 파일 시스템. 시스템의 상태나 프로세스 정보를 확인할 때 사용된다.
/proc/cpuinfo, /proc/meminfo 같은 파일에서 시스템 정보를 확인할 수 있다.
/lib
시스템과 프로그램의 기본 라이브러리 파일이 저장된 디렉터리. /bin과 /sbin에 있는 명령어들이 실행될 때 필요한 공유 라이브러리가 포함되어 있음.
/lib/modules: 커널 모듈 파일이 위치
/boot
시스템 부팅과 관련된 파일 저장
/opt
추가 소프트웨어 패키지가 저장되는 곳. 경험담인데, 사진분석을 위하여 테서렉트 사용할 때, 한글 영어 파일들이 저기에 저장된 것으로 알고 있다.
/mnt 및 /media
외부 장치나 파일 시스템을 마운트할 때 사용하는 디렉터리.
/mnt는 임시 마운트 지점으로 사용되며, /media는 CD-ROM, USB 드라이브 등 외부 장치를 자동 마운트할 때 사용.
그래서 윈도우 버전에서 wsl 설치하고, 컴퓨터 디렉터리 열 때, /mnt/n/ 폴더 내에 내 컴퓨터 파일들이 존재한다.
예시 명령어
~$ find / -name "*.txt" 1>> /dev/null
find 찾아라 /루트 디렉터리서부터 -name 이름이 *.txt txt확장자로 끝내는 애들을 그리고 1번에서 출력하는 것들을 전부 /dev/null 쓰레기통에 버려버려라, 즉 오류들만 출력될 것이다
~$ find / -name "*.txt" 2>> /dev/null
이번에는 아까랑 다르게 오류들은 전부 버려지고 일단 정상적인 결과들만 출력될 것이다. 왜냐? 오류들은 전부 쓰레기통으로 갔으니까.
~$ /bin/bash
~$ /bin/ls
위 두 개는 /bin 에는 일단 기본 명령어들이 있다고 했다. bash는 건너뛰고, 그래서 ls의 경우, ls를 입력한 것과 같은 것이 출력될 것이다.
~$ head /var/log/apt/history.log
head 위에서부터 몇 개(디폴트 10개), /var/log/apt/history.log 에 있는 파일 위에서부터 몇 줄 출력(디폴트 10개)
/var은 가변 데이터들이 존재하는 디렉터리, log는 시스템 로그 파일이 저장되는 디렉터리
apt/hitory.log는 APT 패키지 관리자의 설치 및 업데이트 기록을 저장하는 로그 파일. 이 파일에는 시스템에서 apt를 사용해 패키지를 설치하거나 제거한 기록이 저장된다.
즉 저거 의미는 과거 내가 설치한 apt 패키지 또는 삭제한 apt 패키지 기록 보여주는 거이다.
도전
1. ls -al을 출력했을 때 아무 것도 없게 하기
ls -al &>> /dev/null
2. hihi 같은 있지도 않은 명령어 입력했을 때 오류 안 나오게 하기
hihi 2> /dev/null
3. 모든 사용자의 암호화된 비밀번호를 출력하기
두 가지 중에 뭘 해야하나...
sudo cat /etc/passwd
sudo cat /etc/shadow
위쪽 설명 보면
- /etc/passwd: 사용자 계정 정보 파일.
- /etc/shadow : 사용자 계정의 비밀번호와 관련된 정보를 저장하는 파일
이렇게 되어있는데, 대체 둘의 차이점은 무엇인가?
옛날에는 /etc/passwd 에 비밀번호도 같이 저장되어 있었다고 하는데, 보안상의 이유로 비밀번호는 shadow로 옮겨졌다고 한다.
그래서
user1:x:1001:1001:User One:/home/user1:/bin/bash
여기서 x라고 표현된 부분이 비밀번호.
- 사용자 이름 (계정 ID)
- 암호화된 비밀번호(현재는 x로 표시됨)
- 사용자 ID (UID)
- 그룹 ID (GID)
- 사용자 설명 (일반적으로 사용자 이름)
- 홈 디렉터리 경로
- 로그인 셸
/etc/shodow
user1:$6$yHfI3$hashedpassword:18573:0:99999:7:::
- 사용자 이름
- 암호화된 비밀번호
- 비밀번호 변경 날짜
- 최소/최대 비밀번호 사용 기간
- 비밀번호 만료 경고 기간
- 계정 만료 및 비활성화 정보
이렇게 된다.
그러므로 정답은
cat /etc/shadow
4. CLI에 hello를 입력하면 “hello KnockOn” 이라는 문자열을 출력하도록 만들기
일단 두 가지 방법이 있다.
(1) /usr/local/bin 파일에 실행파일 만들기
아까 위쪽에다가 /bin 의 경우에는 기본적인 명령어들이 들어가있다고 했다. 그래서 저기다가 만들어도 되긴 하는데, 사용자의 명령어 실행파일들은 /usr/local/bin에 저장되기에 저기에 파일을 만들어야한다. /usr/bin/의 경우 파이썬 같은 사용자가 설치한 애들..이 들어간다
경로 우선순위도 /usr/local/bin 이 /usr/bin보다 높다고 한다.
touch hello
로 파일을 만들고
vi 편집기로
echo "hello KnockOn"
을 입력 하고 :wq!로 저장 한 후에
권한을 변경해준다.(추후에 다룰 예정)
chmod 755 hello
그 후에
sudo mv hello /usr/local/bin
하고
hello
를 입력하면
잘 실행된다.
(2) alias 이용하기
alias는 명령어의 단축어를 만드는 명령어. 이를 통해 사용자는 복잡한 명령어를 간단한 이름으로 지정하거나 자주 사용하는 명령어에 특정 옵션을 기본적으로 추가할 수 있다.
alias hello2='echo "hello KnockOn"'
다만, alias는 임시적으로 현재 쉘에서만 유지되기에 쉘 종료되면 저 명령어는 다시 쓸 수가 없다.
그래서 쉘의 설정파일에 추가를 해줘야한다.
'KnockOn' 카테고리의 다른 글
[KnockOn] Linux/Ubuntu 운영체제의 패키지 (0) | 2024.11.07 |
---|---|
[KnockOn] Linux/Ubuntu Symbolic Link (0) | 2024.11.07 |
[KnockOn] Linux/Ubuntu 파일기술자, Redirect (2) | 2024.11.06 |
[KnockOn] Linux/Ubuntu 운영체제 명령어 -2 (0) | 2024.11.05 |
[KnockOn] Linux/Ubuntu 운영체제 명령어 -1 (2) | 2024.11.04 |