프로그래밍도 많이 해보지 못한채 리눅스를 하는것이 어리석을 수도 있지만
깊게 하는것도 중요하지만 두루두루 접해보는것도 중요하다고 생각하기에 리눅스를 맛보고자 하는것이 내가 리눅스를 시작하게된 계기이다.
나의 목표는 쉘 프롬프트를 마스터할 생각도 없고 커널 시스템을 크게 만져볼 생각 까진 갖고 있지 않다.
단지 겉을 핥아 보고 싶을 뿐이다. 일단 나의 목표를 지금 까지 짜본 프로그램중 가장 큰 프로그램을 리눅스 epoll로 짜보는것을 목표로 삼았다.
리눅스의 접속은 해당 컴퓨터에서 직접접속하거나 텔넷 SSH(Secure SHell)이라는 프로그램일 이용해서 원격 텍스트 터미널 모드로 접속하는 방법이 이있다.
직접 접속했을때 우분투에서는 컨트롤+알트+T로 CentOS는 클릭 몇번으로 쉘 프롬프트를 사용할수 있는 터미널을 열수가 있다.
쉘 프롬프트는 MS-DOS와 비슷한 모양으로 생겼고 [계정@리눅스시스템이름]$ 과같은 프롬프트가 보이게 된다.
리눅스에서 거의 모든 장치와 자료의 처리 단위는 파일로 되어있다. 파일은 자료 저장의 논리적인 기본 단위이며 내용 이름 속성 등의 정보를 가지고 있다.
리눅스의 파일 시스템은 파일과 디렉토리들이 계층적으로 구성된 구조를 가지고 있으며 MS-DOS등과 유사하지만 하나의 루트(root)디렉토리만을 가지는 단일한 파일 시스템이다.
최상위 루트 디렉토리는 '/'자체이며 다음 계층은 '/home'등으로 표현할수 있다. 또한 모든 디렉토리는 '.'(현재) , '..'(상위 디렉토리)라는 특수한 디렉토리를 포함한다고 하는데 아직까지 윈도우즈랑 별로 차이가 없는것 같다. 윈도우즈도 폴더 파일검사하면 '.' , '..' 있던데
루트 바로 아래의 디렉토리들은 특별한 의미를 가지고 있으며 리눅스 파일 시스템의 표준 경로를정의한 FHS(Fulesystem Hierarchy Standard)에서 찾아볼 수가 있다.
----------------------------------------------------------------------------------------------------------------------------------------------
/ (root;루트)
가장 최상위 디렉토리라 하고, 모든 디렉토리의 시작점이다.
/bin (binaries)
필수적인 명령 바이너리들이며 단일 사용자 모드에서 사용하고 모든 사용자의 권한 부여되어 있다.
(예; cat, ls, cp.)
/boot
부트 로더 파일; 설치할 때 별도의 파티션에 저장하고 kernel, initrd 부팅과 관련된 파일들이 저장되어 있다.
/root
루트 사용자의 홈디렉토리이다.
</blockquote>
/sbin (system binaries)
<blockquote dir="ltr" style="color: rgb(102, 102, 102); font-family: 굴림체; font-size: 12px; line-height: 16px; margin-right: 0px;">
시스템 바이너리 명령어.
(예; ip, mount)
/etc
리눅스 시스템에서 편집 가능한 텍스트 파일로 구성된 환경설정 파일과 확장도구와 관련된 바이너리파일과 디렉토리가 포함되어 있다.
/mnt (mount;마운트)
외부 장치인 FDD, ODD등과 같은 저장장치를 불러와 끼워 넣는 임시로 사용되는 디렉토리이고, 외부 저장 장치를 불러들이면 /mnt/에 하위 디렉토리를 생성하여 수동으로 마운트 한다.
/media
FHS version 2.3부터 적용되었고, 새로나온 마운트 지점이다. FDD, ODD, USBDISK 등 외부장치를 GUI상에서 자동으로 /media/하위에 폴더가 생성되고 마운트된다.
/usr
일반 사용자들이 사용가능한 유틸리티 및 응용프로그램이 포함되어 있다.
/usr/X11R6
X 윈도우 버전 11 릴리즈6; X 윈도우 시스템에 사용되는 모든 파일들이 저장되어 있고, 시스템의 개발과 설치를 좀 더 쉽게 하기 위해서 전체 시스템 디렉토리 구조에 통합되지 않고 독자적인 구조를 가진다.
/lib (library;라이브러리)
프로그램들의 각종 라이브러리들이 존재하며, 대부분 공유 라이브러리로 파일의 크기를 줄여서 실행할 때 풀어서 사용한다.
/home
<blockquote dir="ltr" style="color: rgb(102, 102, 102); font-family: 굴림체; font-size: 12px; line-height: 16px; margin-right: 0px;">
시스템 계정에 사용자들의 홈 디렉토리와 ftp, www등과 같은 서비스 디렉토리들이 저장된다. 이곳의 디렉토리와 파일들은 시스템에서 사용되지 않는다. 단일 사용자 또는 원격 지점에서 시스템을 접근하여 사용하는 사용자들의 공간이다.(별도의 파티션)
</blockquote>
/dev (device;장치)
시스템의 각 장치들에 접근하기 위한 장치 드라이버들이 저장되어 있고, 접근하면 많은 파일들이 있지만 물리적인 용량을 갖지 않는 가상 디렉토리이다.
일반적으로 HDD, FDD, ODD, 루프백 장치 등이 존재한다.
/proc
시스템의 각종 프로세스, 프로그램 정보, 그리고 하드웨어적인 정보들이 저장된다. 이 디렉토리는 가상 파일 시스템으로 /dev 디렉토리와 마찬가지로 하드 디스크상에 물리적인 용량을 갖지 않는다.
즉 실제로 존재하지 않고 파일들은 하드 디스크에 저장되지 않고 커널에 의해서 메모리에 저장된다.
- 디렉토리안에 파일들은 현재의 시스템 설정을 보여주는 것이다.
/proc/1
/proc/cpuinfo
/proc/devices
/proc/dma
/proc/filesystems
/proc/interrupts
/proc/ioports
/proc/kcore
현재 시스템에서 사용중인 메모리의 실제 이미지이다. 이 파일은 실제 메모리의 내용을 모두 가진 것처럼 보이지만 프로그램이 필요로 하는 부분의 이미지만을 필요할 때 만들어 제공한다.
/var
시스템에서 사용되는 빠르게 변화하는 동적인 파일들이 저장된다. 각종 시스템 로그 파일, 사용자 로그인에 대한 보안기록, 그리고 만약 시스템에 메일 서버를 운영한다면 사용자들에게 전송도니 메일들을 임시로 저장한다.
/tmp
임시 파일을 저장한다.
----------------------------------------------------------------------------------------------------------------------------
기본 명령어중에 man이 있는데 man[-s] 파일명1 파일명2 같은 형식을 취하며 각종 시스템 명령어들의 도움말을 출력한다.
기본형식이 파일명이라고 해서 내가생각하는 파일에 대한 도움말일줄 알았지만 앞서 말했듯이 리눅스 시스템 명령어도 파일인가 보다.
따라서 man ls라고 하면 ls라는 시스템 명령어의 도움말을 출력해준다. 꼭유용하니 다 읽어보라는데 너무 길다.
명령어중에 ls라는 명령어는 파일 시스템상의 파일 목록을 보여준다. -a -C -l -R -i -u -r같은 옵션을 선택할수 있다.
-a 도트로 시작되는 이름을 가진 파일도 보여줌
-C 가로 순서로 나열 출력
-l 각 파일들에 대한 자세한정보
-R 현 디렉토리의 내용은 물론 서브 디렉토리 내용까지
-i 파일의 inode 번호를 보여줌
- '파일이나 폴더의 정보를 저장'하는 자료 구조체를 의미한다.
- 각 파일의나 폴더마다 하나의 inode를 가지고 있다.
- UNIX 계열의 FileSystem에서만 사용한다.(UNIX, LINUX에서 사용)
- 리눅스의 'ls' 명령어가 inode 내용을 출력해 주는 명령어 이다.
-u 엑세스한 날짜 순서
-r 정렬 역순
ls -a -i이런식으로 연결하면 도트있는파일까지 inode 번호를 볼수 있다.
cp는 파일복사로 -a -R -b -P -d -f의 옵션을 갖는데 명령어 하나하나마다 옵션졸라 많다 이걸 어떻게 외우지...
rm는 파일삭제 mv는 파일 이동 mkdir은 디렉토리 생성 rmdir은 디렉토리 삭제 chmod는 파일 속성 모드 변경
ln은 파일 링크 생성으로 두개의 파일 사이에 링크를 만들어 하나의 파일을 두개 이상의 이름으로 접근 가능하게 한다. 바로가기 같은 기능인가보다.
find 파일 검색까지가 기본 명령어이다.
내부 명령어로는 현재 작업 디렉토리를 알려주는 pwd 페뜨 워킹 디렉토리 준말인가보다.
작업 디렉토리 변경 cd MS-DOS랑 같다. 백그라운드 작업 목록 jobs 스티븐잡스 성님 ㅠㅠ 실행중 프로세스는 포그라운드, 백그라운드 작업으로 실행되는데 포그라운드는 키보드같은 표준입력을 받아들이며 쉘을 붙잡지면 백그라운드가 실행되는 동안 쉘은 다른 용도로 사용할수 있다고 한다.
포그라운드는 쉘과 함께 동작하는건가보다. jobs를 입력했는데 아무것도 표시되지 않는다.
책에서는 sleep 100 &이라는 명령어를 두번 입력하고 jobs를 입력했는데 따라해보니 출력이되었다.
sleep 100 &
[1]3409
sleep 100 &
[2]3415
jobs
[1] + Running sleep 100 &
[2] - Running sleep 100 &
이렇게 표시되는데 앞의 숫자가 작업숫자 뒤에가 프로세스 번호라고한다 -l이라는 파일명을 추가하면 프로세스명까지 볼수있다.
kill 프로세스 삭제 명령어로 현재 수행중 프로세스에게 시그널을 보데 프로세스를 죽인다 으앙 주금 ㅠㅠ
kill [-signalID]PID형식을 갖고 있으며 시그널 아이디를 지정하지 않으면 15번 디폴트 시그널아이디를 보내서 종료시킨다고 한다.
시스템 로그아웃은 시그널 아이디 1번의 HUP(hang up)시그널이 시스템에 전달되어 실행중 모든 프로세스를 종료시키고 로그아웃한다고 한다.
텍스트 처리 명령어 중 파일생성은 touch와 cat이 잇다옹
touch명령은 파일 수정 시간을 갱신하는 명령이지만, 파일이 존재하지 않을경우 파일을 생성한다.
cat명령어는 표준 출력 재지향 기호 ">"와 함께 쓰면 키보드로 입력 받은 내용을 파일로 저장할수 있다고 한다,
cat > catTest.txt
Hello LINUX
라고 쓰코 컨트롤+D를 입력하면 파일이 저장되고 쉘로 돌아오게 된다.
이밖에도 vi 파일 편집기등 다양한 프로그램을 통해 파일을 만들수 있다고 한다.
책에서는 vi 편집기 +gcc로 코딩한다는데 언제쯤 그걸하게될수있을지 궁금하다 이책이 별론가 아직 한뭉태기는 더해야 프로그래밍을 하는것 같다.
내용 출력은 cat [-bnuv] 파일명으로 볼수있다.
페이지 단위 파일 출력은 more또는 less 파일명으로 볼수있다. 옵션으로페이지 전방 스크롤 한줄 스크롤 역방향스크롤 문자열 검색등을 줄수있다.
파일 시작 끝부분 출력은 head, tail이며 10라인 출력이 기본이고 옵션으로 라인 블록 문자 또는 추가되는 라인을 지속적으로 보여주는 옵션을 줄수있다. 주로 시스템 로그등을 추적할때 쓴다고 한다.
문자열 검색 grep, 문자열 개수 출력 wc.
파일 비교 diff, cmp, comm이 있다.
diff는 파일간 다른점 같은점 비교하여 보여준다 첫째 파일 줄번호, 둘째 파일 상태 및 줄수로 표시된다.
1a1이면 첫번째 파일, 추가상태, 1번째줄 순서라고 한다 .a 말고 d와 c도있으며 삭제, 변경의 의미이다.
cmp는 두파일이 같은가를 비교하며 comm은 3개의 열로 각 파일의 다른줄과 같은 줄을 표시한다.
파일 묶음 tar은 유닉스의 표준 아카이브 유틸리티 프로그램이다.
파일 압축 및 해제는 gzip, gunzip, zcat, bzip2, bunzip2, bzcat 이있다.
gzip보다 압축효율이 더좋은알고리즘을 사용하는것이 bzip2,bunzip2라고한다.
파일속성결정 file파일이 어떤형태인지 알아내고 파일이 텍스트 문서인지 실행 가능한파일인지 아니면 데이터파일인지를 파악한다. 에디터를 사용해서 보거나 수정할수 있는 파일인가 알아보는데 사용한다고 한다.
좀만 더하면 vi에디터를 사용할수 있는 페이지가 다가오는데 하루에 한번씩 올려야 작심 삼일이 되지 않고 의지를 이어갈수 있을꺼 같아서 여기까지 하고 못본 무한도전 보고 그래야겠다.
도서관에 있는 책하나 가져온건데 잘못가져온건지 싶은 생각도 들고 막그럼 ㅠㅠ vi에디터랑 gcc컴파일러로 C작성하는거 맞는건지도 의심스러움 ㅠㅠ
오늘은 끝
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.