크게 일반 파일, 특수 파일, 디렉터리로 구분된다.
: "etc"는 "et cetera"의 약자로, 주로 시스템 구성 파일을 포함하는 디렉토리입니다. 이 디렉토리에는 시스템 설정, 네트워크 구성, 서비스 설정 등과 관련된 설정 파일들이 저장됩니다.
: "mnt"는 "mount"의 약자로, 외부 파일 시스템을 임시로 마운트(mount)하기 위한 디렉토리입니다. 다른 디스크 또는 네트워크 리소스를 마운트할 때 사용됩니다.
: "dev"는 "devices"의 약자로, 시스템에 연결된 하드웨어 장치를 나타내는 파일들이 저장되는 디렉토리입니다. 리눅스에서는 하드웨어 장치를 파일처럼 다루는데, 이 디렉토리에는 이러한 가상 파일들이 있습니다.
: "boot"는 부팅과 관련된 파일들이 있는 디렉토리입니다. 주로 커널 이미지와 부트 로더 관련 파일이 여기에 저장됩니다.
: "var"는 "variable"의 약자로, 시스템 동작 중에 자주 변경되는 데이터가 저장되는 디렉토리입니다. 이곳에는 로그 파일, 데이터베이스 파일, 임시 파일 등이 저장됩니다.
: "tmp"는 "temporary"의 약자로, 일시적인 파일이나 디렉토리를 저장하는 곳입니다. 이 디렉토리는 시스템 재부팅 시에도 데이터가 유지되지 않습니다.
: "home"은 사용자 홈 디렉토리가 있는 곳입니다. 각 사용자는 이 디렉토리 아래에 자신만의 디렉토리를 가지며, 개인 파일과 설정 파일을 저장합니다.
텍스트 파일, 실행 파일, 라이브러리, 이미지 등 리눅스에서 사용하는 대부분의 파일이 일반 파일에 해당된다.
데이터 블록에 텍스트나 바이너리 형태의 데이터를 저장하고 있다.
vi 같은 편집기를 사용해 만들기도 하고 다른 응용 프로그램에서 생성할 수도 있다.
숙제 파일들은 tmp에 복사해서 하는 게 좋음. 누구나 접근 가능.
mkdir
, 삭제하려면 rmdir
또는 rm -r
, 복사하려면 cp -r
명령을 사용ls -l
명령을 사용하면 파일의 종류를 알 수 있다.$ ls -l /usr/bin/cp
-rwxr-xr-x 1 root root 153976 9월 5 2019 /usr/bin/cp
ls -ai
, ls -lai
과 같이 i옵션 사용시 inode 번호를 볼 수 있다.사용자가 파일에 접근할 때 사용하며 파일명과 관련된 inode가 반드시 있어야 함
유닉스에서는 예전에는 시스템 파일명으로 최대 14자까지 사용할 수 있었지만, 현재는 255 바이트까지 사용할 수 있음
리눅스에서는 255바이트보다 긴 파일명도 사용할 수 있음
파일명이나 디렉터리명은 /와 null 문자를 제외하고 아무 문자나 사용할 수 있음
그러나 출력이 가능한 문자를 사용하고 혼동을 줄 수 있는 특수문자는 사용을 자제하는 것이 관례
파일명 지정 주의사항
ls -l
명령은 inode의 정보를 읽어서 출력ls -i
명령으로 알 수 있음inode
에 저장#include <sys/stat.h>
#include <sys/types.h>
pathname
: 디렉터리가 포함된 경로mode
: 접근 권한mkdir()
의 특징#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
int main(){
if (mkdir("han", 0755) == -1){
perror("han");
exit(1);
}
}
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(){
if(rmdir("han") == -1){
perror("han");
exit(1);
}
}
buf
: 현재 디렉터리의 절대 경로를 저장할 버퍼 주소
size
: 버퍼의 크기
getcwd() 의 특징
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(){
char *cwd;
char wd1[BUFSIZ];
char wd2[10];
getcwd(wd1, BUFSIZ);
printf"wd1 = %s\n, wd1);
cwd = gwtcwd(NULL, BUFSIZ);
printf("cwd1 = %s\n, cwd);
free(cwd);
cwd = getcwd(NULL, 0);
printf("cwd2 = %s\n, cwd);
free(cwd);
if(getcwd(wd2, 10) == NULL){
perror("getcwd");
exit(1);
}
}
/*
$ ch2_3.out
wd1 = /home/jw/src/ch2
cwd1 = /home/jw/src/ch2
cwd2 = /home/jw/src/ch2
getcwd: Numerical result out of range
*/
#define _GNU_SOURCE
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(){
char *cwd;
cwd = get_current_dir_name();
printf("cwd = %s\n", cwd);
free(cwd);
}
/*
$ ch2_4.out
cwd = /home/jw/src/ch2
*/
oldpath
: 변경할 파일 / 디렉터리명
newpath
: 새 파일 / 디렉터리 명
rename() 의 특징
int main(){
if(rename("han", "bit") == -1){
perror("rename");
}
}
path
: 이동하려는 디렉터리 경로디렉터리 이동은 프로그램 내부에서만 진행 -> pwd 명령으로 확인하면 현재 디렉터리는 바뀌지 않았음.
fd
: 이동하려는 디렉터리의 파일 디스크립터
대단해요!!! ㅎㅎ