파일시스템

리눅스에서는 하드디스크(HDD)를 추가하면 인식은 하지만 복잡한 별도의 처리과정을 거쳐야 그 저장공간을 사용할 수 있다.
윈도우는 추가만하면 자동으로 인식하고 바로 사용할 수 있도록 해준다.

 

File System

파일, 디렉토리를 효율적/구조적으로 관리하기 위한 트리 구조 시스템이다.
하드디스크나 씨디같은 물리적 저장공간을 저장장치로 활용한다. 네트워크를 이용해서 서버간 마운트로 하나의 파일 스토리지처럼 사용하기도 한다.(NFS)
리눅스가 지원하는 파일시스템은 윈도우보다 다양하고, 리눅스의 파일시스템은 커널에 포함되어 있으며 대부분의 기본 구성에 포함되어있다.

/lib/modules/[kernel_version]/kernel/fs

일반적인 과정은 사용자가 명령을 입력하면 쉘을 통해 커널에 전달되고, 커널은 이 명령을 하드웨어에 전달한다. 만약 올바른 명령이라면 하드웨어는 명령의 결과값을 다시 사용자에게 보낸다. (엄청나게 축약한 버전이므로 후에 CS에서 더 깊게 공부해야한다)

 

Partition

하나의 물리적 디스크를 여러개의 연속되는 논리적인 디스크로 분할하는 것이다.
파티션을 나누기 위해서는 물리적인 저장장치에 남아있는 연속된 공간이 필요하고, 서로 다른 물리적인 저장장치는 하나의 파티션으로는 구성할 수 없다.

단일파티션과 다중파티션의 차이는 MBR(#0) 의 유무이다.

  • MBR : 하드디스크의 가장 첫부분으로 다중파티션이라면 메인이되는 파티션에 MBR이 존재한다.
    • 모든 파티션은 Boot Sector 라는위치에 정보가 저장되어있고, MBR에 이 BootSector값을 저장해두고 포인터처럼 이용한다. 즉 MBR이 없는 파티션을 실행하면 자동으로 MBR이 있는 메인파티션으로 연결되어 실행된다.
    • C 드라이브에 엑셀이 있고, D 드라이버에 map.xls 파일이 있으면 ?
    • map.xls 파일을 바로 실행시켜도 C 드라이브에 MBR에서 D드라이버의 BootSector를 참조해 자동으로 엑셀을 열고 거기서 map파일을 여는것이다.

 

크게 두종류의 파티션이 있고, 거의 대부분의 파티션은 DOS에 해당된다

옵션 내용

DOS Partition Table 현재 가장많은 OS가 채택했으며 0번 섹터중 Boot Code가 사용하고 남은 64 byte를 사용한다. 파티션은 16byte로 최대 4개까지 만들 수 있다.
BSD Disk Label 하나의 섹터 안에 파티션 정보를 포함한 디스크 정보를 저장한다. 1번 섹터의 148~403번까지 총 256byte를 사용하고 파이션은 16byte 이다.
Apple Partition Map BSD 계열의 기록방식을 채택했다. 0번섹터(MBR) 미사용, 1번 섹터 512byte 전체를 사용하며 파티션은 16byte에 최대 32개까지 만들 수 있다.
Solaris Disk Label Sun Sparc에서는 0번섹터에 Disk Label가 위치한다. 파티션은 444번부터 64byte에걸쳐 8개까지 만들 수 있다.

 

fdisk

파일시스템을 생성한다

fdisk [옵션] [File System]

 

Mount

하드디스크와 파티션을 추가한 후에는 반드시 mount가 필요하다.
디스크와 같은 물리적인 장치를 특정위치나 디렉토리에 연결시키는 작업이다.

리눅스에서는 하드디스크가 아니라 파티션을 연결하는 개념이다.

  1. 수동마운트 : mount 명령어를 사용
  2. 자동마운트 : 부팅시 자동으로 마운트 (/etc/fstab 에서 확인할 수 있다)
  3. 언마운트 : unmount명령을 통해 마운트된 file system을 해제

이미지처럼 외부 디바이스는 드라이버를 통해 OS가 활용할 수 있다.

 

마운트 명령어

 

mount[Option][Device:Partition][Directory:MountPoint]

  • 마운트 포인트는 사용자와 관련된 디렉토리를 사용하면 안된다. (사용되지않는 임의의 디렉토리로 써야함)
  • 마운트 포인트는 Primary Partition, Logical Partition 만 가능하다
    • #mount /dev/sda1 / d_drive

옵션 내용

-a /etc/fstab에 명시된 파일시스템을 마운트
-f 실제로 마운트하지 않고 마운트 가능한지만 확인
-t 파일 시스템 타입을 선택
-r 읽기만 가능하게 마운트
-w 읽기, 쓰기 모드로 마운트

 

unmount 명령어

마운트 되어있는 파티션을 해제하는 명령어로 마운트 포인트가 아닌 다른위치에서만 가능하다.

 

unmount [Option][Device:Partition] or [Directory:MountPoint]

옵션 내용

-a /etc/fstab에 기록된 모든 파일시스템을 언마운트
-f 강제로 연결을 해제할때 사용

 

mount 확인

mount

명령어를 통해 마운트된 파티션의 정보를 확인할 수 있다.

 

df -h

마운트되어있는 파운트포인트와 자세한 내용까지 보두 볼 수 있다.

 

NFS(Network File System)

네트워크 파일시스템으로 공유된 영역을 마운트한다.
한마디로 준비된 하드디스크를 ip주소를 통해 해당 서버가 하드디스크를 사용할 수 있도록 연결하는것이다.

mount -t nfs [IP:/EXPORT DIR] [LOCAL DIR]

 

자동마운트

마운트는 시스템을 껏다키면 자동으로 모두 해재되므로, 자동마운트가 필요하다.
즉 /etc/fstab 파일에 설정해두면 부팅시 자동으로 마운트가 이뤄진다.

/etc/fstab (File System Table) 내용

필드 내용

fs_spec 디스크이름, 디스크 UUID(H/W)
fs_file 마운트 포인트(S/W)
fs_vfstype 파일시스템 (ext4, nfs)
fs_mntops 마운트 옵션 (defaults, usrquota, grpquota, acl)
fs_freq 덤프(백업) 유무 (0,1,2)
fs_passno fsck 검사 순서(1,2)

'Computer Science > 리눅스' 카테고리의 다른 글

[리눅스] 데이터 저장  (1) 2022.09.23
[리눅스] 프로세스  (0) 2022.09.22
[리눅스] 허가권과 소유권  (0) 2022.09.22
[리눅스] 사용자 계정관리  (1) 2022.09.22
[리눅스] 기본 명령어  (0) 2022.09.22

데이터 저장과 패키지

리눅스에는 여러개의 파일을 한번에 압축하는것이 불가능하기 때문에
tar로 여러개의 파일을 묶어준다음, gzip/bzip2를 이용해 압축하는 방식을 사용한다.


tar

시스템 안에 있는 모든 데이터들을 묶음 형태로 보관(파일형식)
단, 원본파일은 유지한채 새로운 .tar 파일을 생성하며용량은 줄어지 않는다.

tar [인자값] [묶음파일명:Archiving File Name.tar] [묶음 대상]

리눅스에서 아카이브(Archive)란 저장소저장보관소)를 의미하는 용어이다.
옵션 내용
-c Create, tar 아카이브 생성
-x eXtract, tar 아카이브에서 파일 추출
-t lisT, tar 아카이브에 포함된 내용 확인
-f File, 대상 tar 아카이브 지정(기본옵션)
-p Permission, 파일권한을 보존
-v Verbose, 아카이브 파일을 묶거나 푸는 과정을 보여줌
-k Keep, tar 아카이브 추출시 기존 파일을 유지하고 처리
-z tar+gzip => *.tar.gz
-k tar+bzip2 => *.tar.bz2
-J tar+xz => *.tar.xz

gzip/ bzip2

시스템 안의 모든 데이터를 압축(용량 압축성능은 bzip2가 좋다)
용량이 줄어든다.

gzip [압축파일명 : *.gz]
bzip2[압축파일명 : *.bz2]

-d 옵션을 주면 압축을 해제한다.

압축된 파일을 압축해제하는것도 가능

gunzip [압축 파일명: *.gz]
bunzip2[압축 파일명: *.bz2]

rpm (Redhat Package Manager)

패키지 개념을 도입해서 만들어진 것으로, 설치/삭제/업그레이드 기능을 제공한다.

rpm [옵션] [패키지명.버전.아키텍쳐.rmp or 패키지명]  
옵션 내용
-c Create, tar 아카이브 생성
-x eXtract, tar 아카이브에서 파일 추출
-t lisT, tar 아카이브에 포함된 내용 확인
-f File, 대상 tar 아카이브 지정(기본옵션)
-p Permission, 파일권한을 보존
-v Verbose, 아카이브 파일을 묶거나 푸는 과정을 보여줌
-e 설치된 패키지 삭제
--test 실제 설치하지않고 가상으로 설치해서 충돌이 있는지 확인
--force 에러를 무시하고 강제설치
--nodeps 설치,삭제시 패키지가 필요로하는 의존성여부를 검사하지 않음/ 커맨드 마지막에 작성
-q 설치된 rpm 패키지를 조회, 추가로 다양한 세부커맨드는 찾아보고 사용하기

많이 쓰이는 커맨드

  • 설치 : rpm -ivh [패치키명.버전.아키텍쳐.rpm]

    • ex) vim-enhanced-8.2.5172-1.amzn2.0.1.x86_64.rpm
    • 패키지명은 vim-enhanced
    • 8.2.5172 버전 (8=메이저, 2=마이너, 5172=패치 를 뜻한다)
    • 릴리즈버전은 1.amzn2.0.1
    • 아키텍쳐는 x86_64
    • 아키텍쳐의 x86은 인텔이나 AMD의 CPU를 나타내는것으로 **86으로 끝나는 64bit 체제의 CPU에서 호환된다는 의미다.
  • 삭제 : rpm -e [패키지명]

  • 확인 : rpm -qa | grep [패키지명]


yum (Yellowdog Updater, Modified)

rpm 기반의 시스템을 위한 자동 업데이터 겸 패키지 설치/제거 도구

  • rpm 명령어가 해결하지 못한 패키지 의존성문제를 해결한다
  • yum 명령어를 사용하면 패키지 의존성 문제를 자동으로 처리하면서 설치,업데이트,삭제를 진행한다
  • 필요한 패키지들은 인터넷상에 존재하는 패키지 저장소 서버로부터 다운받아 설치한다
  • yum 설정파일은 /etc/yum.conf 이며 중요한 파일이 들어있다
    • 리눅스에서 etc는 기타가 아니라 매우 중요한것들이 들어있는걸 의미하는걸 기억하자
    • 만약 etc에서 문제가 발생한다면 다시 설치하는것이 빠를수도있다
yum -y [install/update/remove] [패키지명]

-y를 빼면 설치여부를 한번 물어본다.  

update는 별로 추천하지 않는다. install 을 해도 자동으로 업데이트 해준다.
단, OS 설치과정에서는 update가 꼭 필요한 경우가 있기 때문에 잘 알아봐야한다.

'Computer Science > 리눅스' 카테고리의 다른 글

[리눅스] File System  (1) 2022.10.01
[리눅스] 프로세스  (0) 2022.09.22
[리눅스] 허가권과 소유권  (0) 2022.09.22
[리눅스] 사용자 계정관리  (1) 2022.09.22
[리눅스] 기본 명령어  (0) 2022.09.22

프로세스

실행중인 모든 프로그램, 컴퓨터의 CPU 에서 실행되는 프로그램이 프로세스다.
여러개의 프로세스를 동시에 실행하는것이 '멀티테스킹' 이다.

리눅스의 프로세스

기본규칙

  1. 각 프로세스마다 고유의 ID(PID)를 하나씩 증가시키면서 부여
  2. 더 이상 할당할 PID가 없으면, 가장 낮은 미사용 숫자로 돌아가서 PID 할당
  3. 파일의 소유권과 유사한 방식의 소유권
  4. 프로세스를 실행하는 UID가 실제 사용자 UID로 할당
  5. SetID와 같은 특수한 경우, 실행하는 사용자 ID가 아닌 실제 소유자가 실행한것처럼 실행

프로세스 종류

  • 포그라운드 프로세스 : 화면에 보이는 상태에서 동작하는 프로세스로 , 화면이 동작하는중에는 다른 작업은 불가한 프로세스 (게임)
  • 대화형 프로세스 : 터미널과 세션을 통해 사용자와 정보를 주고받으며 동작하는 대부분의 일반적인 프로세스
  • 백그라운드 프로세스 : 화면에 보이지 않는 상태에서 동작하는 프로세스로, 다른 작업도 가능 (음악앱)
  • 데몬 프로세스 : 특정 프로그램 실행을 위해 백그라운드 상태에서 동작하는 서버 프로세스
  • 좀비 프로세스 : 자식 프로세스가 종료되었지만, 그 신호가 부모 프로세스에 전달되지 않아 살아있는것처럼 보이는 프로세스
  • 배치 프로세스 : 특정한 작업을 특정한 시각에 실행해주는 프로세스

 

프로세스 명령어

cp

프로세스를 실행하고 다음 명령어를 입력할수 있을때 빨간커맨드로 확인
만약 프로세스명 뒤에 & 를 넣고 백그라운드에 실행할 프로세스 ID를 입력하면 다른 프로세스를 백그라운드 프로세스로 실행가능
#cp -r/user/sbin/ 프로세스명

top

시스템 사용량을 실시간으로 확인
#top [옵션]

ps(Process State)

현재 실행중인 프로세스와 상태를 출력
#ps [옵션]
특히 ps -ef 는 자주 사용한다.

옵션 내용
-a 현재 실행중인 전체 사용자의 모든 프로세스 출력
-e 커널프로세스를 제외한 모든 프로세스 출력
-f Full format으로 표기 (UID, PID, PPID 등을 함께 표시)
-l 출력을 Long format으로 표기 (PRI, NI값 등등..)
USER : 프로세스 소유자 이름, UID  
PID : Process 식별번호  
PPID : Parent Process의 PID  
%CPU : 최근 1분간 Process가 CPU 사용한 비율의 추정치  
%MEM : 최근 1분간 Process가 Memory 사용한 비율의 추정치  
TTY : Process 와 연결된 터미널  
STAT : 현재 Process의 상태코드  
STIME : Process가 시작된 시간 혹은 날짜

 

pstree

현재 실행중인 프로세스를 트리구조로 출력
#pstree [옵션] (주로 -np를 많이 사용)

옵션 내용
-a Process들이 실행될 때 사용되었던 인자값, 옵션이 모두 출력
-h 현재 Process와 Parent Process를 하이라이트 형태로 출력
-n Process의 PID 기준으로 정렬하여 출력
-p Process 명과 PID도 출력

 

kill

프로세스나 프로세스 그룹에게 특정 시그널을 보내는 명령어
#kill [옵션] [PID]

시그널 번호 내용
SIGHUP 1 로그아웃처럼 세션이 종료될때 시스템이 보내는 시그널
SIGINT 2 키보드에서 오는 인터럽트 시그널로 실행을 중지하는 시그널(Ctrl+C)
SIGKILL 9 무조건 강제로 종료시키는 시그널
SIGSEGV 11 메모리 침법이 일어날때 시스템이 보내는 시그널

 

killall

프로세스 이름으로 프로세스 종료
#killall [옵션] [프로세스명]
프로세스를 종료시킬때는 주의해야한다. sshd 와 관련된 프로세스는 강제로 종료했을 경우 오류가 발생할 수 있고, 그렇기 때문에 AWS 홈페이지에서 별도로 관리할 수 있게 되어있다.

skill

시스템에 접속해있는 사용자 혹은 특정 터미널을 종료시키는 명령어
#skill -KILL [사용자or터미널]

'Computer Science > 리눅스' 카테고리의 다른 글

[리눅스] File System  (1) 2022.10.01
[리눅스] 데이터 저장  (1) 2022.09.23
[리눅스] 허가권과 소유권  (0) 2022.09.22
[리눅스] 사용자 계정관리  (1) 2022.09.22
[리눅스] 기본 명령어  (0) 2022.09.22

Permission 이론 (허가권)

리눅스에서의 허가권과 소유권은 윈도우보다는 비교적 단순하지만, 정확한 의미를 파악해야 나중에 혼동하지 않는다.

허가권은 ls -al 로 탐색시 디렉토리와 파일정보 맨앞에나오는 정보다.

첫 d 이후 3자리 단위로 각각 rwx로 이뤄져 있으며 각각의 영역은 이진수를 나타낸다. r=4, w=2, x=1.

순서대로 user(u), group(g), other(o)

허가권 변경

파일이나 디렉토리의 허가권을 변경할 수 있다.
숫자와 문자 모두 가능하지만, 숫자는 짧아서 사용하기 편하지만 이해하기 어렵고
문자는 길지어서 사용하긴 불편하지만 보고 이해하기가 쉽다.

chmod [인자값] [대상파일명or디렉토리] ... [대상파일명or디렉토리]  
인자값 내용
숫자 chmod 644 = rw-r--r-- 의미
문자 chmod g+rx = g영역에 권한하나 추가
문자조건 +,- 로 조건을 조절 할 수 있음

File

r : cat, more, vim, cp 같은 파일내용 읽기
w : cat, echo, vim 같은 파일내용 수정,변경
x : 실행파일 실행

directory

r: ls 같은 디렉토리 내부 읽기
w: mkdir, echo, vim 같은 파일 내용 수정,변경
x: 실행파일 실행

웹상에서의 권한

서버에 파일을 띄울때는 파일의 권한에 일반사용자에 r 이 반드시 있어야 띄워진다.
(- --- --- r--) 식으로 세번째 구역에 r이 반드시 있어야 한다. (없다면 forbidden 에러발생 )
핵심은 실제 브라우저에 랜더링되는 화면이 정상작동하려면 일반사용자의 권한설정을 신경써야 한다는것이다.

ftp 에서 파일을 업로드할때는 700, 300 (w,x의 허가권을 가졌을때) 이여야한다.
(아직은 무슨소린지 정확히 이해하지못했기때문에 후에 ftp와 숫자표현법에대해 다시 공부하기)

소유권

소유권은 ls -l 을 했을때 허가권 다음에 나오는 부분이다.
일반적으로 chown을 많이 사용한다.

chown

파일이나 디렉토리의 소유권을 변경

chown [uid:gid] [대상 파일or디렉토리] ...[대상파일 or 디렉토리]

chown testuser.root -> uid = testuser 로 변경
chown .root         -> uid에 상관없이 gid = root 로 변경
chown testuser.     -> uid, gid 모두 testuser 로 변경

chrgp

파일의 소유그룹 변경 (실제로 사용하는 경우는 매우적음)

chrgp [그룹명] [대상파일명] ... [대상파일명]

특수권한

SetUID

소유자만이 접근 가능한 파일을 일반유저도 접근가능하도록 일시적 권한 부여

권한에서 x의 자리에 s 가 위치할 수 있는데
앞에서부터 s가 4000, 2000, 1000 을 나타낸다
drwxr-xr-x :  755
drwxr-xr-s : 1755

Stickybit

위에서 사용된 s가 stickybit
디렉토리에 파일을 생성,삭제 가능한 권한을 부여한다.
단 삭제는 수퍼사용자나 파일의 소유권자만 가능하다.

-rwxr-xr-x 가 변경되면
-rwsr-sr-x 가 된다

umask

새로 생성되는 파일이나 디렉토리에 자동으로 부여되는 권한을 설정

umask [mask]

원래는 최대값으로 생성이 되지만, umask값을 주면 그 값을 뺀만큼의 생성값을 가짐.

유형 최대값 생성된값 umask
디렉토리(관리자) 777 755 022
디렉토리(사용자) 777 775 002
파일(관리자) 666 644 022
파일(사용자) 666 664 002

'Computer Science > 리눅스' 카테고리의 다른 글

[리눅스] 데이터 저장  (1) 2022.09.23
[리눅스] 프로세스  (0) 2022.09.22
[리눅스] 사용자 계정관리  (1) 2022.09.22
[리눅스] 기본 명령어  (0) 2022.09.22
[리눅스] 구조  (1) 2022.09.22

사용자 계정

사용자 계정에 대한 설정파일에 정보가 담겨있음

/home 디렉토리에 해당 사용자의 파일들이 생성되며 /etc 파일내부에 중요한 설정파일이 있음

또한 사용자정보가 담긴 디렉토리의 경우 일반적인 명령어로 삭제시 문제가 생길 수 있으므로 반드시 user관련 명렁어를 사용해야 한다.

/etc/passwd

사용자 계정의 정보가 저장된 파일

User_ID :x(사용자계정패스워드):500(UID):500(GID)::/home/user_id(사용자계정의home디렉토리경로):/bin/bash(사용자계쩡이 로그인시 사용하는 shell위치)  

첫번째 500자리는 유저아이디 두번쨰 500자리는 그룹아이디자리이며 관리자를 제외한 아이디값은 500

이후의 숫자로 설정된다. (1

499까지는 관리자용)

/etc/shadow

사용자 계정의 실제 비밀번호가 저장된 파일

User_ID : !!(사용자계정에 부여된 기본암호) : 암호생성일자 : 암호변경가능한 최소일자 : 암호의 유효기간 : 암호만료시 경고일 수 : 계정만료일자와 비활성화일수 : 계정의만료일

/etc/group

사용자 계정이 속한 그룹의 정보가 저장된 파일

Group_ID: x(패스워드):그룹아이디:그룹맴버의 사용자 계정명

사용자 계정 생성

/etc/login.defs : 사용자 생성시 설정파일로 패스워드 유효기간과 UID,GID할당 범위 정보들
/etc/default/useradd : /etc/passwd 파일에 생성되는 기본값과 SKEL 정보들
/etc/skel : 홈 디렉토리를 생성하며 기본적으로 생성할 기본파일이 존재

useradd

사용자 계정을 새로 생성

useradd [옵션] [값] [계정명]
옵션 내용
-u 사용자 계정의 UID정보 임의로 지정
-g 사용자 계정의 기본 그룹명 지정
-c 사용자 계정의 설명
-d 사용자 계정의 홈디렉토리 변경
-s 사용자 계정의 로그인 shell 변경

 

사용자계정이 생성될때 사용하는 기본정보 변경

useradd -D [옵션] [인자값]
옵션 내용
-b 홈디렉토리의 기본생성위치가 인자값으로 변경
-e 기본 만료일자 변경
-f 만료일자에 해당하는 Inactive Days변경
-g 기본그룹이 인자값으로 변경
-s 기본 로그인 shell이 인자값으로 변경

usermod

사용자 계정의 정보 변경
usermod [옵션] [인자값] ... [계정명]

옵션 내용
-l 이름변경
-u UID변경
-g 기본 그룹변경
-G 추가 그룹지정
-c 계정의 설명
-d 홈디렉토리 변경
-s 로그인 shell 변경

userdel

사용자계정 삭제
userdel [옵션][계정명]

옵션 내용
-f 계정 강제삭제, 로그인중이거나 다른계정의 기본그룹으로 사용중이여도 가능
-r 계정생성시 생성된 모든정보 함께삭제
-h 도움말표시

passwd

사용자계정 비밀번호 설정수정
passwd [옵션][계정명]

옵션 내용
-d 비밀번호 삭제(Null로 변경)
-l 비밀번호 잠금설정
-u 비밀번호 잠금해제
-s 비밀번호 상태 출력
--stdin 비밀번호를 표준 출력장치로 입력받아서 생성

 

사용자그룹

사용자 생성시 사용자아이디와 동일한 그룹을만들어 그룹에 자동으로 넣는다.
또한 하나의 유저가 여러개의 그룹에 속할 수 있다.
그룹의 편리한점은 각각의 그룹에 특정한 권한을 부여해두면, 그 그룹에 속하는 유저는 별다른 설정없이 바로 그 권한을 부여받을 수 있다. 즉 일괄적으로 권한을 수정할 수 있다는 장점이 있다.

groupadd

새로운 그룹 생성
groupadd [옵션][인자값][그룹명]

옵션 내용
-f 이미 존재하는 그룹과 동일한 그룹을 강제생성
-g 그룹생성시 임의의 GID 강제로 지정
-r 그룹의 GID를 1~499사이의 값으로 생성

groupmod

그룹의 정보 변경
groupmod [옵션][인자값][그룹명]

옵션 내용
-g 기존 그룹의 GID 값 변경
-n 그룹 이름변경

groupdel

그룹의 삭제
groupdel [그룹명]

id

아이디의 정보 확인 (그룹도 확인가능)
id [유저아이디]

'Computer Science > 리눅스' 카테고리의 다른 글

[리눅스] 데이터 저장  (1) 2022.09.23
[리눅스] 프로세스  (0) 2022.09.22
[리눅스] 허가권과 소유권  (0) 2022.09.22
[리눅스] 기본 명령어  (0) 2022.09.22
[리눅스] 구조  (1) 2022.09.22

리눅스 명령어

pwd,cd

pwd : 현재 위치보기
cd : 원하는 디렉토리로 이동

cd . = 현재디렉토리로
cd .. = 상위디렉토리로
cd ~ = 로그인한 사용자로 이동
cd ~계정명 = 내가있는 위치에 무관하게 계정의 홈디렉토리로 이동

ls

ls [옵션] [디렉토리or파일]

옵션 의미
-a, -all .을 포함한 숨겨진 모든 파일 및 디렉토리
-l 디렉토리의 내용을 상세하게 출력
-d, --directory = 지정한 디렉토리의 정보 출력
-F, --classify 파일 형식을 알리는 문자를 각 파일 뒤에 추가
-R, --recursive 하위 경로와 그 안에 있는 모든 파일들도 같이 나열

mv

파일 또는 디렉토리 이동
mv [옵션] [원본] [목적지]

옵션 의미
-r, -R, --recursive 하위 디렉토리와 파일도 모두 이동
-p, --preserve 원본파일의 권한과 함께 이동

cp

파일 또는 디렉토리를 복사
cp [옵션] [원본] [목적지]

옵션 의미
-r, -R, --recursive 하위 디렉토리와 파일도 모두 복사
-p, --preserve 원본파일의 권한과 함께 복사

mkdir

디렉토리 생성
mkdir [옵션] [디렉토리명]

옵션 의미
-m, -mode 하위 디렉토리와 파일도 모두 이동
-p, --parents 원본파일의 권한과 함께 이동
-help 도움말 표시
-version 버전정보 표시

rmdir

빈 디렉토리만 삭제
rmdir [옵션] [디렉토리명]

옵션 의미
-p, --parents 필요한 경우 상위 경로까지 삭제
-help 도움말 표시
-version 버전정보 표시

rm

파일 or 디렉토리 삭제
rm [옵션] [디렉토리명]

옵션 의미
-f, --force 삭제시 의사 물어보지 않음
-r, -R, --recursive 일반파일이면 그냥삭제, 디렉토리면 하위경로 파일을 모두삭제
-v, --verbose 파일 지우는 정보를 자세히 확인
-version 버전정보 표시

alias

별칭지정, 복잡한 명령어와 옵션을 간단한 문자열로 치환(일회성)
alias [변수] = [값]

touch

파일이 있다면 시간정보 변경, 없다면 파일생성
touch [파일명]

cat

파일의 내용출력, 파일생성, 파일추가, 출력생성, 병합 모두 가능

head 과 tail

head : 파일의 내용 중 위에서 아래로 10줄 출력
head [-n] [파일명]
tail : 파일의 내용 중 아래서 위로 10줄 출력
tail [-n] [파일명]
n에 원하는 line 수를 입력하여 설정 가능

more

내용이 많은 파일을 화면단위로 끊어서 출력
more [파일명]
추가로 less 명령어로 vi같은 환경에서 j,k를 이용해 상하로 이동 가능
나갈때는 vi와 똑같이 q엔터 입력시 끝냄

date, rdate

타임서버에서 시간정보를 시스템에 반영
rdate -p time.bora.net : 타임서버의 현재 시간을 확인
rdate -s time.bora.net : HOST 시간을 타임서버와 동기화

file

확장자를 기본으로 사용하지 않는 파일 유형[type] 확인
디스크 filesystem 종류를 확인할때도 사용

find

파일 및 디렉토리 검색
find [경로] -name [파일명 or 디렉토리]

Access Time이 n일보다 작거나 큰 파일 및 디렉토리 검색
find [경로] -atime -n(+n)

test 파일 이후 수정된 모든 파일검색
find /home/ -newer test

명령수행
find -name [문자열] -exec[명령]{};
ex) # find.-name"test" -exec rm{}; => test가 들어가는 파일을 전부찾아서 지우는명령

root 권한으로 실행되는 파일
find . -user root -perm +4000 2> /dev/null

시스템 종료 및 재시작

shutdown : 시스템을 안전하게 종료하는 시스템 관리 명령어
시스템을 종료하거나 재부팅
아직 저장되지 않은 데이터도 디스크에 저장한 후 모든 파일시스템을 unmout시킨 후 시스템 종료 => 안전

종료절차(9단계)

  1. sync작업을 수행
  2. 시스템이 종료된다는 메세지를 사용자에게 전달
  3. 새로운 사용자의 로그인 금지
  4. 종료되지 않은 프로세스를 강제 종료
  5. 로그아웃하지 않은 사용자를 강제 종료
  6. 메모리에 남은 데이터를 디스크에 저장 [sync]
  7. 시스템종료와 관련된 정보를 시스템 로그파일에 기록
  8. 마운트 된 디바이스들을 언마운트
  9. 시스템을 종료

shutdown [옵션] [시간] "전달메세지" 로 사용

옵션 의미
-k 시스템에 접속된 모든 사용자에게 경고 메세지만 전달
-h 시스템 셧다운 후 시스템 종료(shutdown -h now)
-r 시스템 셧다운 후 시스템 재시작(shutdown -r now)
-f 빠른 재부팅 (fsck 수행하지 않음)
-c 실행중인 셧다운 취소, 종료 예약작업시 종료 작업을 취소(Ctrl+c)
-m 현재 시간으로부터 종료시점 시간 지정(분)
-hh:mm 절대시간으로 종료시점 시간 지정(분)
-now 명령어를 수행하는 순간 바로 종료

'Computer Science > 리눅스' 카테고리의 다른 글

[리눅스] 데이터 저장  (1) 2022.09.23
[리눅스] 프로세스  (0) 2022.09.22
[리눅스] 허가권과 소유권  (0) 2022.09.22
[리눅스] 사용자 계정관리  (1) 2022.09.22
[리눅스] 구조  (1) 2022.09.22

운영체제

일반적으로 하나의 OS를 설치하고 가상환경에 다른 OS를 설치해서 다중OS를 사용한다.
가상환경을 활용하면 오류발생시 가상환경만 바꾸면 되기 때문에 편리하다.

 

리눅스 구조

  1. 디렉토리 구조
  • 리눅스의 최상위 디렉토리(/root)
  • 리눅스커널의 메모리 이미지와 부팅과정에 필요한 중요한 정보 디렉토리(/boot)

 

  1. 주요 디렉토리
  • 리눅스의 기본 명령어들이 존재 (/bin)
  • super user인(관리자계정) root의 home 디렉토리 (/root)
  • 일반 user들의 home 디렉토리 (/home)
  • 시스템이나 유저를 관리하기위한 자료파일, 관리자용 명령이 존재 (/etc)
  • device 파일인 filesystem과 하드웨어간의 인터페이스 담당 (/dev)
  • 각종 언어의 라이브러리가 담긴 디렉토리 (/lib)
  • Remot Device를 이용하기 위한 디렉토리 (/mnt)
  • Local Device를 이용하기 위한 디렉토리 (/media)
  • 시스템 운영 및 관리를 위한 명령어가 존재 (/sbin)
  • root file system과 유사한구조로 용량이 크고 자주 사용하지 않는 파일이 존재 (/user)
  • kernel과 process정보를 읽을 수 있는 virtual filesystem (/proc)
  • 잠시 사용되는 임시파일을 위한 디렉토리 (/tmp)
  • log 파일처럼 자주 변경되는 system파일을 위한 디렉토리 (/var)

 

  1. 절대경로와 상대경로
  • 절대경로(완전경로) : 파일시스템 전체를 기준으로 파일이나 디렉토리의 절대적인 위치 (/home/kakaotalk 같은 구체적 위치)
  • 상대경로 : 현재 작업하고 있는 디렉토리 기준의 경로

 

리눅스 prompt 구조

  • 시스템 계정, 사용자 계정
    • [로그인한 사용자 계정명@리눅스시스템호스트명 현재작업디렉토리]계정의유형 기본형태를 가짐
    • 계정정보는 관리자일경우 #, 일반사용자일경우 $ 로 사용

'Computer Science > 리눅스' 카테고리의 다른 글

[리눅스] 데이터 저장  (1) 2022.09.23
[리눅스] 프로세스  (0) 2022.09.22
[리눅스] 허가권과 소유권  (0) 2022.09.22
[리눅스] 사용자 계정관리  (1) 2022.09.22
[리눅스] 기본 명령어  (0) 2022.09.22

https://velog.io/@tataki26  (타키타키님의 블로그) 에서 퍼온 이미지입니다.

 

1. 저수준 언어

 

가장 기본적인 저수준언어로 컴퓨터친화적이므로 속도가 빠르지만 사람이 배우고 이해하기 어렵다

이미지의 자세한 언어에 속하며 거의 모든 프로그래밍 언어의 기초이며

현재까지도 메모리나 컴퓨터 사양에 제한이있는 임베디드(IoT)영역에서 많이 사용되고 있다

 

기계어

  • 컴퓨터의 표현단위인 0과1로만 이뤄진 언어
  • CPU 에서 명령을 처리하기위해 반드시 필요한 언어
  • 마이크로 프로세서에서 기계어를 번역하는데, CPU마다 마이크로프로세서가 다르다
  • 마이크로 프로세서가 다르다 -> CPU마다 기계어를 번역하는 명령어가 다르다
  • 즉, 서로다른 CPU간, 운영체제간의 명령의 변환이 어렵다

 

어셈블리어

  • 기계어 보다는 사람이 이해하기 쉬운 문자나 기호를 사용한 언어
  • 어셈블리어 -> 어셈블러 -> 기계어-> CPU(마이크로프로세서) 과정을 거친다
  • 기계어와 마찬가지로 CPU, 운영체제 마다 번역하는 방법이 다르다는 문제가 있다

 

어셈블리어와 고수준언어의 차이

 

2. 고수준 언어

 

저수준 언어보다 높은 추상화 수준을 가지며 코드가 명확하다(사람의 논리와 비슷하여 배우고 이해하기 편하다)

특정 CPU, 운영체제에 의존성을 가지지 않아 다른 컴퓨터로 이식이 편리하다

하지만 저수준 언어에 비해 느리고 용량이 크며 성능이 좋은 컴퓨터를 필요로 한다

고수준언어 -> 컴파일러(인터프리터) -> 기계어 -> 마이크로프로세서  과정으로 번역이 이뤄진다

 

고수준 언어는 용도에 따라 다양한 언어로 나눠진다

 

  • 일반 업무  :  COBOL (비지니스++)
  • 과학/수학  :  FORTRAN (계산++) , APL
  • 다목적      :  C (UNIX) , PASCAL & BASIC (교육++) ,  Ada (현존언어 집합체) ,  ALGOL (과학++) ,  LISP (인공지능++)

 

이 언어들 중 ALGOL 의 코드형식이 객체지향 이라는 개념이 생겨나게되는 출발점이 되었고

최근 많이 사용되는 객체지향언어들은(C++, Java, Python 등등) 이 ALGOL의 형식을 물려받았다고 볼 수 있다

객체지향언어들은 그래픽 기반의 운영체제를 사용할때 매우 유용하다

 

 

'Computer Science > CS 전공지식' 카테고리의 다른 글

[CS] 아스키코드 & 유니코드  (0) 2022.04.01
[CS] 플립플롭  (0) 2022.03.25

+ Recent posts