[Study42]Linux 디렉토리 구조 이해하기
시스템 디렉토리
시스템 디렉토리는 운영체제의 핵심 부분으로, 컴퓨터 시스템의 안정적인 운영을 위해 중요한 역할을 합니다. 이 디렉토리는 운영체제 전반에 걸쳐 관여하며, 시스템의 모든 구성 요소를 관리합니다. 예를 들어, 운영체제의 커널, 드라이버, 라이브러리 등이 시스템 디렉토리에서 관리됩니다. 또한, 시스템 디렉토리에는 사용자가 직접 수정할 수 없는 중요한 파일들도 포함됩니다. 이러한 파일들은 운영체제의 구성 요소를 구성하는 데 필수적이며, 시스템의 안정성과 보안을 유지하기 위해 보호되어야 합니다.
데이터 디렉토리
데이터 디렉토리는 시스템에서 사용자 데이터를 안전하게 보관하고 쉽게 액세스할 수 있도록 하는 중요한 구성 요소입니다. 예를 들어, 개인 설정, 사용자 설정 및 다른 응용 프로그램별 데이터를 저장하는 저장 공간으로 작용하며 사용자가 생성한 모든 데이터를 보관합니다. 이를 통해 사용자는 언제든지 고유한 정보에 액세스할 수 있습니다. 그러나 데이터 디렉토리가 잘못 구성되거나 안전하지 않은 경우 데이터 손실 또는 손상의 위험이 있습니다. 이러한 문제를 방지하기 위해 안전하고 효율적인 데이터 디렉토리를 구성하여 사용자 데이터를 보호하고 쉽게 검색 가능하도록 유지해야합니다.
또한, 리눅스를 사용하는 경우 파일 시스템 구조를 이해해야합니다. 리눅스 파일 시스템은 전체적으로 트리 구조를 띄며 디렉토리에 따라 명령어의 성격, 내용 및 사용 권한 등이 달라집니다. 일반적으로, 리눅스의 파일 시스템 구조는 파일 시스템 표준안(FSSTND, Linux File System Standard)을 기반으로 구성됩니다. 이 표준안을 따르면 파일들의 위치가 일관되게 유지되어 프로그램 작성, 포팅과 시스템 관리가 쉬워집니다. 대부분의 배포판들이 이 표준안을 따르기 때문에, 리눅스 파일 시스템 표준안을 따르는 것이 바람직합니다.
대부분의 리눅스는 FHS(Filesystem Hierarchy Standard) 표준 파일 시스템 계층을 사용합니다. 이 표준은 같은 목적의 파일들을 같은 장소에 일관되게 모아 관리하여 시스템 자원이나 프로그램들을 쉽게 찾을 수 있도록 합니다. 명령어, 파일 및 문서들은 제각기 독립된 장소에서 관리됩니다. 이러한 구조를 이해하고 각 디렉토리에 대해 자세히 살펴보면 다음과 같습니다:
# ls /
backup boot data2 data4 etc lib media opt root sbin sys tmp var
bin data1 data3 dev home lib64 mnt proc run srv test usr
이러한 디렉토리 구조를 이해하면 리눅스 시스템을 더욱 효율적으로 관리할 수 있습니다.
디렉토리명 | 설명 |
/ | 리눅스 파일 시스템 체계의 최상위 디렉토리인 /(루트)이다. 리눅스의 모든 디렉토리들의 시작점이며, 모든 디렉토리는 절대 경로를 표시 할 때 이 디렉토리부터 시작합니다. 모든 파일 시스템의 마운트 포인터가 존재하고, 모든 파일 시스템의 이름(Name Space)이 존재합니다. |
/root | 시스템 관리자(예: root 사용자)의 홈 디렉토리로, 이전 UNIX 계열에서는 root의 홈 디렉토리를 /로 사용하였지만 리눅스는 /root를 관리자의 홈 디렉토리로 사용합니다. |
/bin | 기본 명령어들이 모여 있는 디렉토리로, CentOS 7부터는 /usr/bin으로 링크되어 있습니다. |
/etc | 각종 환경 설정에 연관된 파일들과 디렉토리들을 가진 디렉토리로, 시스템 환경설정 파일, 서비스 구성 설정 파일, 사용자/그룹 정보 파일 등이 존재합니다. |
/boot | 리눅스의 커널이 저장되어 있는 디렉토리입니다. |
/mnt | 외부 장치인 플로피 디스크, CD-ROM, Samba 등을 마운트하기 위해서 제공되는 디렉토리입니다. |
/usr | 대부분의 프로그램이 설치되어 있는 디렉토리입니다. 공유할 수 있는 디렉토리와 파일들을 포함합니다. |
/lib | 프로그램들의 각종 라이브러리들이 존재하는 디렉토리입니다. 커널 모듈 파일과 라이브러리 파일들이 존재합니다. CentOS 7부터는 /usr/lib으로 링크되어 있습니다. |
/home | 시스템 계정 사용자들이 홈 디렉토리로 사용하는 디렉토리입니다. |
/dev | 시스템의 각종 디바이스 목록이 저장되어 있는 디렉토리입니다. |
/proc | /proc 디렉토리에는 시스템의 각종 프로세스 프로그램 정보 그리고 하드웨어적인 정보들이 저장되어 있습니다. |
/var | 시스템에서 사용되는 가변적인 파일들이 저장되는 디렉토리입니다. 스풀, 로그, 캐싱 등이 있습니다. |
/tmp | 임시 파일들을 위한 디렉토리입니다. |
/(root) 디렉토리
일반적으로 루트 디렉토리라고 부르는 리눅스 시스템에서 가장 최상위 디렉토리이며 디렉토리 구조의 시작이다. 시스템 관리자의 홈 디렉토리인 /root 디렉토리와는 별개이며 다른 것이다. '/' 디렉토리를 제외한 디렉토리는 /bin, /etc, /boot, /mnt, /usr, /lib, /home, /dev, /proc, /var, /sbin, /tmp, /root /lost+found 디렉토리가 있다. 각각의 디렉토리는 시스템에서 특정한 용도로 사용된다. /bin 에는 기본적인 실행 파일이, /etc 에는 시스템 설정 파일이, /usr 에는 사용자 프로그램이, /lib 에는 라이브러리 파일이, /home 에는 사용자 홈 디렉토리가, /dev 에는 시스템 장치 파일이, /proc 에는 프로세스 정보 파일이, /var 에는 로그 파일 등이 저장된다. 또한, /boot 에는 부팅에 필요한 파일이, /mnt 에는 파일 시스템을 마운트하기 위한 디렉토리가, /sbin 에는 시스템 관리자용 실행 파일이, /tmp 에는 임시 파일이, /root 에는 시스템 관리자의 홈 디렉토리가 저장된다. 마지막으로, /lost+found 디렉토리는 시스템이 비정상적으로 종료되거나 파일 시스템 오류가 발생했을 때 복구를 위해 사용된다.
# ls /
backup boot data2 data4 etc lib media opt root sbin sys tmp var
bin data1 data3 dev home lib64 mnt proc run srv test usr
# tree / | more
/root 디렉토리
루트 디렉토리는 시스템 관리자 (예: root)의 홈 디렉토리입니다. 루트 사용자의 환경 파일 (.bash_profile, .bashrc) 및 운영 체제 설치 기록 (install.log, anaconda-ks.cfg)과 같은 기록이 포함되어 있습니다.
# ls -a /root
./ .bashrc .gnome2/ .recently-used.xbel Desktop/
../ .cshrc .gnome2_private/ .redhat/ anaconda-ks.cfg
.ICEauthority .dmrc .gstreamer-0.10/ .scim/ install.log
.Trash/ .eggcups/ .gtkrc-1.2-gnome2 .ssh/ install.log.syslog
.bash_history .gconf/ .lesshst .tcshrc
.bash_logout .gconfd/ .metacity/ .viminfo
.bash_profile .gnome/ .nautilus/ .xsession-errors
루트 디렉토리는 시스템 관리자 (루트)가 환경 파일 및 운영 체제 설치 기록을 저장하는 곳입니다. 이 디렉토리에는 루트 사용자에게 특정한 설정이 포함되어 있는 .bash_profile 및 .bashrc와 같은 파일이 포함되어 있습니다. 또한 이 디렉토리에는 운영 체제 설치에 대한 정보가 포함된 install.log 및 anaconda-ks.cfg와 같은 기록도 포함되어 있습니다.
/bin 디렉토리
/bin 디렉토리는 리눅스에서 가장 기본이 되는 명령어들이 모여 있는 디렉토리입니다. 이 디렉토리 안을 들여다보면 대부분의 파일들이 녹색으로 구성된 파일 이 실행 파일임을 알 수 있습니다. 이진 파일들을 포함하는 binaries의 약어로 bin은 부팅에 필요한 명령어들이 위치하며 부팅 후에 시스템의 계정 사용자들이 사용할 수 있는 일반적인 명령어들도 위치하고 있습니다.
이곳에서는 다양한 명령어를 사용할 수 있습니다. 예를 들어, 파일을 복사하거나 이동시키는 cp와 mv 명령어, 파일을 보여주는 cat 명령어, 프로그램을 실행시키는 ./ 명령어 등이 있습니다. 또한, 이곳에는 다른 명령어들에 필요한 명령어들도 위치하고 있습니다. 예를 들면, ps 명령어를 사용하기 위해서는 먼저 /bin 디렉토리에 있는 kill 명령어를 사용하여 다른 프로세스를 종료시켜야 합니다.
실제로 /bin 디렉토리에는 많은 명령어들이 존재합니다. ls 명령어를 사용하여 /bin 디렉토리 안에 있는 모든 파일들을 볼 수 있습니다. 그 중 일부를 나열하면, alsacard, dmesg, kill, pgawk, tar, awk, domainname, link, ps, tcsh, cp, ed, rmdir, tracert 등이 있습니다. 이러한 명령어들은 리눅스 운영체제에서 필수적으로 사용되며, 이를 통해 사용자는 보다 효율적으로 컴퓨터를 제어할 수 있습니다.
# ls /bin
alsacard* dmesg* kill* pgawk* tar*
alsaunmute* dnsdomainname@ ksh@ ping* taskset*
arch* doexec* ksh93* ping6* tcptraceroute@
awk@ domainname@ link* ps* tcsh*
basename* dumpkeys* ln* pwd* touch*
bash* echo* loadkeys* raw* tracepath*
cat* ed* loadkeys.static* red@ tracepath6*
chgrp* egrep@ logger* redhat_lsb_init* traceroute*
chmod* env* login* rm* traceroute6@
chown* ex@ ls* rmdir* tracert@
cp* false* mail* rpm* true*
..... (중략) .....
사용자가 사용하는 명령어들이 위치한 디렉토리입니다. 이 디렉토리 안에는 여러 가지 유용한 도구들이 포함되어 있습니다. 이러한 도구들은 시스템 관리자 뿐만 아니라 일반 사용자도 자주 사용합니다. 예를 들어, ls 명령어를 통해 현재 디렉토리에 있는 파일들의 목록을 확인할 수 있고, cp 명령어를 통해 파일을 복사할 수 있습니다. mv 명령어를 사용하면 파일을 이동시키거나 이름을 변경할 수 있으며, rm 명령어를 사용하면 파일을 삭제할 수 있습니다.
/sbin
/sbin 디렉토리는 리눅스 운영 체제에서 관리자가 사용하는 명령어를 저장하는 경로입니다. 이러한 명령어는 시스템 관리에 필수적입니다. 예를 들어, fsck 명령어는 파일 시스템을 점검하여 손상된 부분을 복구하는 데 사용됩니다. fdisk 명령어는 디스크 파티션을 만들거나 수정하는 데 사용됩니다. 이러한 명령어를 사용하기 위해서는 관리자 권한이 필요합니다.
# find / -name bin -type d
# find / -name sbin -type d
위의 명령어는 bin과 sbin 디렉토리를 찾기 위한 것입니다. 이러한 디렉토리를 찾으면 해당하는 명령어를 실행할 수 있습니다. 이 명령어는 일반 사용자가 사용할 수 없으므로 시스템의 보안을 유지하는 데 중요합니다. 따라서 /sbin 디렉토리는 시스템 관리에 필수적입니다.
/etc 디렉토리
리눅스에서 가장 중요한 디렉토리 중 하나는 /etc 디렉토리입니다. 이 디렉토리는 리눅스 시스템의 각종 환경 설정 파일과 디렉토리들을 담고 있습니다. 이 디렉토리에 저장된 파일들의 대부분은 시스템 관리자에 의해 관리되고 있습니다.
이 디렉토리는 웹 서버 환경 설정, 시스템 계정과 사용자 정보, 패스워드 관리, 시스템의 파일 시스템 관리 파일, 시스템 보안과 관련된 파일들, 시스템 초기화 설정 파일, TCP/IP 설정 파일 등 시스템 전반에 걸친 거의 모든 환경 설정 파일들이 저장되어 있습니다.
다음은 /etc 파일 안에 존재하는 중요 디렉토리에 대한 설명입니다.
- /etc/rc.d 디렉토리: 시스템의 부팅과 시스템 실행 레벨 변경 시에 실행되는 스크립트들이 저장되어 있는 디렉토리입니다. 리눅스에는 6가지 실행 레벨이 있으며, 각각의 실행 레벨별로 해당 디렉토리가 존재합니다.
- /etc/shadow 파일: /etc/passwd 파일에서 패스워드 부분만을 따로 저장하는 파일입니다. 이 파일에는 패스워드가 암호화 된 형태로 저장되어 있으며, 시스템 관리자만이 접근할 수 있기 때문에 크래킹 등에 대한 우려가 적습니다.
- /etc/group 파일: 시스템의 그룹에 대한 정보를 저장하고 있는 파일입니다.
- /etc/inittab 파일: init 데몬이 읽어 들이는 설정 파일입니다. 현재는 systemd의 target 명령어를 사용하여 런레벨을 systemd에서 제어합니다.
- /etc/issue, /etc/issue.net 파일: getty에 의해서 로그인을 위한 프롬프트가 뜨기 전에 출력되는 메시지를 설정하는 파일입니다. 리눅스 시스템으로 접속할 경우 가장 처음으로 볼 수 있는 메시지이며, 보통 시스템에 대한 설명과 각종 환영 메시지를 전달하기 위해서 사용됩니다. /etc/issue 파일의 내용은 보통 시스템의 터미널에서 볼 수 있습니다. 그리고 /etc/issue.net 파일의 내용은 리모트 상에서 시스템으로 접속할 경우 볼 수 있을 것입니다.
- /etc/profile, /etc/csh.login, /etc/csh.cshrc 파일: 시스템이 시작될 때 사용자가 로그인을 할 때 본(Bourne) 셸이나 C셸에 의해서 실행되는 스크립트 파일입니다. 일반적으로 사용자들에 대한 기본 환경 설정에 사용됩니다.
- /etc/securetty 파일: /etc/securetty 파일에는 시스템 관리자(예: root)가 시스템에 로그인할 수 있는 안전한 터미널에 대한 정보가 저장되어 있습니다. 이것은 네트워크를 통해 시스템으로 침입해 시스템 관리자의 권한을 획득하는 크래킹을 막기 위해서입니다.
- /etc/shells 파일: /etc/shells 파일은 시스템에서 안정적으로 사용할 수 있는 셸에 대한 정보를 저장하고 있는 파일입니다. 만약 chsh 명령을 사용하여 사용 중인 셸을 바꾸려면 이 파일에 저장되어 있는 셸 중에 하나를 선택해야 합니다. 또한 ftp 데몬의 경우에는 사용자의 셸을 검사하여 /etc/shells에 저장되어 있지 않은 셸을 사용한다면 로그인을 허용하지 않습니다.
위에서 언급한 /etc 디렉토리와 그 안에 포함된 파일들은 리눅스 시스템에서 매우 중요한 역할을 합니다. 이 디렉토리와 파일들을 적절하게 관리하면 리눅스 시스템을 안전하고 효율적으로 운영할 수 있습니다.
/boot 디렉토리
리눅스의 커널이 저장되어 있는 디렉토리로서 각종 리눅스 Boot에 필요한 Booting 지원 파일들이 저장되어 있는 디렉토리입니다. 이 디렉토리는 시스템이 부팅될 때 필요한 파일들을 제공합니다. 이 디렉토리는 Linux 파티션에서 별도로 마운트됩니다. 이 디렉토리의 주요 파일 중 하나는 vmlinuz입니다. vmlinuz는 커널 이미지 파일로서 시스템 부팅 시 사용됩니다. 이 디렉토리에는 또한 initrd 파일도 있습니다. initrd는 시스템 부팅 시 초기 루트 파일 시스템으로 사용됩니다. 이 디렉토리의 파일들은 시스템 부팅에 필수적이므로 수정하거나 삭제하지 말아야 합니다.
# ls -l /boot
-rw-------. 1 root root 3409143 Apr 21 2018 System.map-3.10.0-862.el7.x86_64
-rw-r--r--. 1 root root 147819 Apr 21 2018 config-3.10.0-862.el7.x86_64
drwxr-xr-x. 3 root root 17 Mar 17 18:44 efi
drwxr-xr-x. 2 root root 27 Mar 17 18:44 grub
drwx------. 5 root root 97 Mar 17 18:53 grub2
-rw-------. 1 root root 74035047 Mar 17 18:50 initramfs-0-rescue-bcaf91e77cfa40feb7a1aff4cf3dfe9b.img
-rw-------. 1 root root 29152809 Mar 17 18:53 initramfs-3.10.0-862.el7.x86_64.img
-rw-r--r--. 1 root root 304926 Apr 21 2018 symvers-3.10.0-862.el7.x86_64.gz
-rwxr-xr-x. 1 root root 6224704 Mar 17 18:50 vmlinuz-0-rescue-bcaf91e77cfa40feb7a1aff4cf3dfe9b
-rwxr-xr-x. 1 root root 6224704 Apr 21 2018 vmlinuz-3.10.0-862.el7.x86_64
위 명령어는 /boot 디렉토리에 있는 파일들의 리스트와 각 파일들의 권한, 소유자, 그룹, 파일 크기, 생성 날짜 및 파일 이름을 출력합니다.
# cat /boot/grub/grub.conf (# cat /etc/grub.conf)
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
set pager=1
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
terminal_output console
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=5
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/00_tuned ###
set tuned_params=""
set tuned_initrd=""
### END /etc/grub.d/00_tuned ###
### BEGIN /etc/grub.d/01_users ###
if [ -f ${prefix}/user.cfg ]; then
source ${prefix}/user.cfg
if [ -n "${GRUB2_PASSWORD}" ]; then
set superusers="root"
export superusers
password_pbkdf2 root ${GRUB2_PASSWORD}
fi
fi
### END /etc/grub.d/01_users ###
### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-862.el7
이 문서는 /boot/grub 디렉토리에 있는 파일인 /boot/grub/grub.conf의 내용을 보여줍니다. 이 파일은 grub2-mkconfig 도구에서 자동으로 생성되며, /etc/grub.d의 템플릿과 /etc/default/grub의 설정을 사용하여 파일을 생성합니다. 파일의 내용에는 부팅 프로세스를 사용자 정의하는 데 사용할 수 있는 다양한 함수 및 매개 변수가 포함됩니다. 이러한 함수 중 일부는 기본 부팅 항목 설정, 메뉴의 제한 시간 지정 및 비디오 모듈 로드 등이 있습니다. 파일에는 사용자 구성 및 조정 매개 변수와 관련된 섹션이 포함되어 있습니다. 구체적으로, 파일에는 사용자 암호와 관련된 섹션과 튜닝 매개 변수와 관련된 섹션이 있습니다. 파일은 CentOS Linux 버전 7이며, 커널 버전은 3.10.0-862.el7.x86_64입니다. 전반적으로 파일은 대부분의 Linux 기반 운영 체제의 필수 구성 요소인 GRUB 부트로더에서 사용되는 설정 및 매개 변수를 자세히 보여줍니다.
/mnt 디렉토리
/mnt 디렉토리는 외부 장치를 사용하기 위한 디렉토리입니다. 이 디렉토리를 사용하여 플로피 디스크, CD-ROM, Samba 등 외부 장치를 마운트할 수 있습니다. 이 디렉토리는 일시적으로 사용되는 디렉토리이며, 프로그램은 /mnt 디렉토리에 어떤 파일 시스템이 마운트되어 있는지 자동으로 인식하지 않습니다. 이를 수동으로 설정해야 합니다. 또한, /mnt 디렉토리는 일반적으로 여러 개의 하위 디렉토리로 나뉘어 사용됩니다. 일반적으로, 이 디렉토리의 각 디렉토리는 비어있는 상태이지만, 사용자가 필요한 파일을 저장할 수 있습니다. 이 디렉토리는 시스템의 다른 디렉토리와 마찬가지로 중요한 역할을 합니다.
/usr 디렉토리
이 디렉토리는 시스템에 사용되는 다양한 응용 프로그램들이 설치되는 중요한 디렉토리 중 하나입니다. 이 디렉토리를 사용하면 다른 사용자와 공유할 수 있는 파일들도 쉽게 저장할 수 있습니다.
거의 모든 프로그램과 관련된 명령어 및 라이브러리는 이 디렉토리에 위치합니다. 이 디렉토리에는 X 시스템과 관련된 파일, 리눅스 커널 소스, 각종 C언어 관련 헤더 파일 등이 저장되어 있습니다. 이 디렉토리의 하위 디렉토리에 대해서도 간략히 설명하겠습니다.
예를 들어, /usr/bin 디렉토리는 사용자가 사용할 수 있는 실행 파일들이 저장되어 있습니다. 또한, /usr/sbin 디렉토리는 시스템 관리자가 사용할 수 있는 실행 파일들이 저장되어 있습니다. /usr/local 디렉토리는 사용자가 직접 설치한 소프트웨어들이 위치합니다.
따라서, /usr 디렉토리는 시스템에서 가장 중요한 디렉토리 중 하나이며, 시스템에 필요한 많은 파일들이 이 디렉토리에 저장되어 있습니다.
① /usr/bin 디렉토리
리눅스 시스템에서 사용되는 각종 프로그램들이 저장되어 있으며 /bin 디렉토리에는 없는 다양한 실행 파일들이 저장되어 있는 디렉토리이다. 이 디렉토리는 사용자가 직접 생성한 프로그램도 저장할 수 있으므로, 시스템의 다양한 환경에서 유용하게 활용될 수 있다.
② /usr/X11R6 디렉토리
X 윈도우 시스템에 사용되는 모든 파일들이 이 디렉토리 안에 저장된다. 이 디렉토리는 X 윈도우 시스템의 개발과 설치를 좀 더 쉽게 하기 위해서 전체 시스템 디렉토리 구조에 통합되지 않고 독자적인 구조를 가진다. 이에 따라, 다른 디렉토리와 구분되어 사용되며, X 윈도우 시스템에서 효율적으로 작동하기 위한 여러 가지 파일들이 저장되어 있다.
③ /usr/etc 디렉토리
/etc 디렉토리에는 각종 환경 설정 파일들이 있듯이 이곳에도 여러 가지 시스템 환경 설정파일들이 저장되어 있다. 하지만 이곳에 있는 파일들은 /etc 디렉토리 안의 파일들과는 달리 꼭 필요한 파일들은 아니다. 그러나 이 디렉토리는 시스템 환경을 조정하고 디버깅하는 데 있어 유용할 수 있다.
④ /usr/sbin 디렉토리
시스템 관리자를 위한 명령어들이 저장되어 있는 디렉토리이다. 보통 이 디렉토리의 명령어들은 루트 파일 시스템에는 있을 필요가 없는 서버 프로그램들이 저장된다. 이러한 명령어들은 시스템의 보안 및 안정성을 유지하기 위해 중요한 역할을 한다.
⑤ /usr/include 디렉토리
C 언어 관련 헤더파일들이 저장되어 있는 디렉토리이다. 이 디렉토리에는 C 프로그래밍 언어를 사용하여 작성된 프로그램들을 컴파일하는 데 필요한 다양한 라이브러리와 헤더 파일들이 포함되어 있다.
⑥ /usr/lib 디렉토리
각종 라이브러리들이 저장되어 있는 디렉토리이다. 이 디렉토리에는 시스템에서 사용되는 다양한 라이브러리들이 저장되어 있으며, 사용자가 직접 작성한 프로그램을 컴파일 하면 해당 프로그램은 /usr/lib 디렉토리의 파일에 Link된다. 또한 이 라이브러리 안에 실행 코드가 필요하다면 /lib 디렉토리를 참조한다. 이러한 라이브러리들은 프로그래밍 언어의 다양한 기능을 구현하는 데 필수적이다.
⑦ /usr/local 디렉토리
시스템의 특징적인 프로그램들이 저장되는 디렉토리이다. 여기서 특징적인 프로그램은 시스템 관리자에 의해서 따로 설치되는 프로그램들을 말한다. 그러므로 시스템마다 각각의 특징을 가지므로 시스템마다 이 디렉토리에 저장되어 있는 내용들은 모두 다를 것이다. 하지만 이 디렉토리는 시스템에 꼭 필요한 디렉토리는 아니다. 이 디렉토리에는 사용자 지정 프로그램과 라이브러리 등이 저장될 수 있다.
⑧ /usr/share/man 디렉토리
man 페이지의 실제 내용들이 저장되어 있는 디렉토리이다. 이 디렉토리는 각종 명령어와 함수 등에 대한 설명이 포함되어 있다. 디렉토리를 살펴보면 man1, man2, man3 등과 같이 여러 개의 디렉토리들로 나누어져 있는 모습을 볼 수 있을 것이다. 이는 예를 들어 man1 디렉토리는 섹션 1의 man 페이지 소스를 위한 디렉토리를 의미한다. 이 디렉토리는 사용자가 명령어나 함수 등의 사용법을 참조할 때 유용하게 사용될 수 있다.
⑨ /usr/src 디렉토리
시스템에서 사용하는 각종 프로그램들의 컴파일 되지 않는 소스 파일들이 저장되어 있는 디렉토리이다. 이 디렉토리는 시스템의 프로그래밍 및 컴파일링과 관련된 다양한 파일이 저장되어 있다. /usr/src 디렉토리에서 한 번 살펴본 곳은 /usr/src/linux 디렉토리이다. 이 디렉토리가 바로 리눅스의 커널 소스를 저장하고 있는 디렉토리이기 때문이다. 이 디렉토리에서는 시스템의 프로그래밍 및 컴파일링과 관련된 다양한 소스 파일들을 찾을 수 있다.
⑩ /usr/share/info 디렉토리
GNU Info 문서들을 저장하고 있는 디렉토리이다. 이 디렉토리에는 GNU 프로젝트의 매뉴얼과 관련된 다양한 정보들이 포함되어 있다. 이러한 매뉴얼은 소프트웨어 개발자들에게 유용한 정보를 제공하며, GNU 소프트웨어를 사용하는 데 도움이 된다.
⑪ /usr/share/doc 디렉토리
각종 문서들이 저장되어 있는 디렉토리이다. 이 디렉토리에는 시스템의 사용자 매뉴얼, 시스템 문서, 개발자 문서 등이 저장되어 있다. 이러한 문서들은 시스템의 사용자들이 시스템을 보다 효율적으로 사용할 수 있게 돕는다.
/lib 디렉토리
프로그램에서 사용할 수 있는 라이브러리들은 /lib 디렉토리에 저장되어 있다. 이 디렉토리에는 여러 라이브러리들이 존재하며, 이들은 대부분 공유 라이브러리로 제공된다. 공유 라이브러리를 사용하면, 다른 프로그램에서도 같은 라이브러리를 공유하여 사용할 수 있으므로 보다 편리하다. 또한, 이 라이브러리들은 프로그램 파일의 크기를 줄여서 실행할 때 불러 사용하게 된다. 따라서, 이 디렉토리에는 프로그램을 작성하는 데 필요한 많은 라이브러리들이 존재하므로, 이를 잘 활용함으로써 프로그램 개발의 효율성을 높일 수 있다.
# ls /lib
bdevid/ libgobject-2.0.so.0@
cpp@ libgobject-2.0.so.0.1200.3*
dbus-1/ libgthread-2.0.so.0@
device-mapper/ libgthread-2.0.so.0.1200.3*
firmware/ libiw.so.28*
i686/ libkeyutils-1.2.so*
iptables/ libkeyutils.so.1@
kbd/ liblvm2cmd.a
ld-2.5.so* liblvm2cmd.so@
ld-linux.so.2@ liblvm2cmd.so.2.02*
ld-lsb.so.3@ libm-2.5.so*
libBrokenLocale-2.5.so* libm.so.6@
libBrokenLocale.so.1@ libnsl-2.5.so*
..... (중략) .....
/lib/modules 디렉토리
커널 모듈을 저장하는 디렉토리입니다. 커널 모듈은 커널의 일부분으로서, 커널의 기능을 확장하기 위한 추가적인 코드입니다. 이 디렉토리는 시스템에서 커널 모듈들이 적재될 때 사용됩니다. 이러한 모듈들은 커널에서 동적으로 로드되며, 커널의 새로운 기능이나 장치를 지원하는데 사용됩니다. 이 디렉토리는 시스템의 중요한 부분이며, 사용자가 실수로 삭제하지 않도록 주의해야 합니다.
# cd /lib/modules
# cd 2.6.18-164.el5
# ls
build@ misc/ modules.dep modules.isapnpmap modules.seriomap source@
extra/ modules.alias modules.ieee1394map modules.ofmap modules.symbols updates/
kernel/ modules.ccwmap modules.inputmap modules.pcimap modules.usbmap
weak-updates/
/lib/modules 디렉토리에는 커널에서 로드할 수 있는 커널 모듈들이 저장됩니다. 시스템 동작에 필수적인 역할을 합니다. 해당 디렉토리로 이동하면 build, extra, kernel, misc, updates, weak-updates와 같은 여러 하위 디렉토리가 있습니다. 이들 하위 디렉토리 안에는 modules.dep, modules.symbols, modules.alias, source와 같은 중요한 파일들이 있습니다. 이들 파일은 커널 모듈을 올바르게 로드하는 데 필요합니다.
/home 디렉토리
/home 디렉토리는 시스템 계정 사용자들의 개인 공간으로, 홈 디렉토리가 저장됩니다. 이 디렉토리에 저장된 파일과 폴더는 시스템에서 사용되지 않으며, 단지 사용자들이 원격으로 시스템에 접속할 때 사용하는 공간입니다.
/home 디렉토리는 사용자의 계정 정보를 저장하고, 사용자가 데이터를 저장하고 관리할 수 있는 공간입니다. 이 폴더는 사용자의 개인 정보를 보호하기 위해 암호화되어 저장됩니다.
또한, 이 디렉토리는 사용자가 소프트웨어와 설정 파일을 저장할 수 있는 공간입니다. 사용자가 설치한 프로그램과 설정 파일은 이 폴더에 저장되며, 이를 통해 사용자는 프로그램을 사용할 수 있습니다.
따라서, /home 디렉토리는 시스템 계정 사용자들이 자신의 파일을 저장하고 관리할 수 있는 중요한 공간입니다.
fedora/ lost+found/ user01/ user02/
파일 시스템은 꽤 간단한 구조로 조직되어 있습니다. 최상위 디렉토리에는 운영 체제(fedora/)와 잃어버린 파일을 찾을 때 사용하는 폴더(lost+found/) 외에 각 사용자 계정에 대한 폴더가 포함되어 있습니다. 각 사용자 계정 폴더에는 개별 사용자의 파일과 데이터가 들어 있습니다. 더 자세한 폴더 구조를 구현하여 파일을 더 잘 구성하고 분류하는 것이 좋을 수 있습니다. 예를 들어 문서, 이미지 및 음악을 별도의 하위 폴더로 분리하는 등입니다. 또한 하드웨어 장애 또는 기타 문제가 발생해도 중요한 데이터가 손실되지 않도록 백업 시스템 구현을 고려하는 것도 좋습니다.
/dev 디렉토리
/dev 디렉토리는 시스템의 각종 디바이스들의 목록이 들어 있는 디렉토리입니다. 이 디렉토리의 내용을 확인하면 많은 파일들이 위치하고 있다는 것을 알 수 있습니다. 이러한 파일들은 하드 드라이브, 플로피, CD-ROM, 루프백 장치 등과 같은 각종 디바이스 장치들을 대표합니다. 리눅스 시스템은 운영 체제에서 각종 디바이스 장치들을 하나의 파일로 취급합니다. 이러한 이유로 시스템은 각각의 장치로부터의 정보를 /dev 디렉토리에 존재하는 해당 장치 파일로부터 가져온다는 것입니다.
이러한 파일들은 블록 장치 파일과 문자 장치 파일로 구분할 수 있습니다. 블록 장치 파일은 블록 단위로 데이터를 읽고 쓸 수 있는 디바이스 파일입니다. 예를 들어, 하드 디스크와 같은 블록 장치 파일은 'ls -l /dev | grep '^b'' 명령어를 통해 확인할 수 있습니다. 반면, 문자 장치 파일은 문자 단위로 데이터를 읽고 쓸 수 있는 디바이스 파일입니다. 이러한 파일은 'ls -l /dev | grep '^c'' 명령어를 통해 확인할 수 있습니다.
아래는 각각의 디바이스 파일들을 확인할 수 있는 명령어 예시입니다.
[EX] Disk Device File
# ls -l /dev/sd?
# ls -l /dev/hd?
① /dev/console 디바이스 파일은 시스템 콘솔입니다. 이 콘솔은 시스템과 사용자 간의 인터페이스 역할을 합니다. 사용자는 이 콘솔을 통해 시스템의 상태를 확인하거나, 명령을 입력하여 시스템을 제어할 수 있습니다.
② /dev/hda 디바이스 파일은 시스템 하드 디스크(IDE 방식의 디스크)입니다. 이 파일은 첫 번째 하드 디스크를 의미합니다. 만약 시스템에 여러 개의 하드 디스크가 장착되어 있다면 /dev/hdb, /dev/hdc 등의 파일들도 이와 같은 형식으로 저장되어 있습니다. 또한, /dev/hda1, /dev/hda2 등의 파일들은 첫 번째 하드 디스크의 첫 번째 파티션, 두 번째 파티션 등을 의미합니다.
③ /dev/sda 디바이스 파일은 시스템 하드 디스크(SCSI 방식의 디스크)입니다. 만약 시스템에 SCSI 하드 디스크를 장착했다면 /dev/hda 등과 같은 파일들 대신 이 파일에서 정보를 얻어 장치에 접근할 것입니다.
④ /dev/lp 디바이스 파일은 시스템의 병렬 포트 장치입니다. 병렬 포트는 주로 프린터와 연결하여 사용합니다.
⑤ /dev/ttyS 디바이스 파일은 직렬 포트 장치입니다. 이 포트는 주로 모뎀과 연결하여 인터넷에 접속하는 데 사용합니다.
⑥ /dev/null, /dev/zero 다바이스 파일은 블랙홀이라고도 부르는 특별한 장치입니다. 이 장치로 데이터 등을 보내면 모두 폐기되므로 주의해야 합니다.
⑦ /dev/pts 디렉토리는 시스템으로의 원격 접속을 위한 'pesudo_terminal'입니다. 이 디렉토리 안에는 여러 개의 터미널이 포함되어 있습니다. 이들 터미널은 시스템 계정 사용자들이 원격지에서 시스템으로 Telnet 등을 이용하여 시스템에 접속을 시도할 때 사용됩니다.
⑧ /dev/tty 디바이스 파일은 시스템의 가상 콘솔(Virtual Console)입니다. 이 가상 콘솔은 하나의 화면에 여러 개의 콘솔을 만들어 사용할 수 있습니다. 만약 사용자가 시스템 앞에 앉을 수 있다면 Alt +F1, Alt + F2 등을 이용하여 리눅스에서 제공하는 여러 개의 가상 콘솔을 직접 볼 수 있을 것입니다. 이 기능은 사용자가 다중 작업을 수행할 수 있도록 도와줍니다.
/proc 디렉토리
/proc 디렉토리는 시스템의 각종 프로세서, 프로그램 정보 그리고 하드웨어적인 정보들이 저장되어 있습니다. 이 디렉토리는 가상 파일 시스템으로, 하드디스크 상에 물리적인 용량을 갖지 않습니다. 이것은 실제로 존재하지 않는다는 것을 의미합니다. 이 디렉토리에 존재하는 파일들은 실제 하드 디스크에 저장되지 않고, 커널에 의해 메모리에 저장됩니다. 이로 인해 디렉토리 안의 파일들은 현재의 시스템 설정을 보여주는 것입니다.
/proc 디렉토리는 시스템 관리자나 프로그램 개발자에게 매우 유용한 정보를 제공합니다. 예를 들어, /proc/cpuinfo 파일은 시스템의 CPU 정보를 제공합니다. 또한, /proc/meminfo 파일은 시스템의 메모리 사용 정보를 제공합니다. 이러한 파일들은 시스템의 성능을 모니터링하고, 문제를 해결하는 데 도움을 줍니다.
다음은 /proc 디렉토리의 하부 디렉토리에 대한 설명입니다.
- /proc/sys: 커널 설정을 제어하는 파일들이 저장되어 있습니다.
- /proc/net: 네트워크 관련 정보가 저장되어 있습니다.
- /proc/bus: 버스의 정보가 저장되어 있습니다.
- /proc/fs: 파일 시스템 관련 정보가 저장되어 있습니다.
1단계: /proc/partitions 파일
/proc/partitions 파일은 하드디스크 분할영역 상태에 대한 정보를 표시합니다. 이 파일의 출력을 통해 각 하드디스크와 파티션의 크기를 알 수 있습니다.
# cat /proc/partitions /* 관련된 명령어 : fdisk -l, df -h, free */
major minor #blocks name
8 0 31457280 sda
8 1 27832581 sda1
8 2 1052257 sda2
8 3 514080 sda3
8 4 1 sda4
8 5 514048 sda5
8 6 514048 sda6
8 7 514048 sda7
8 8 514048 sda8
2단계: /proc/filesystems 파일
/proc/filesystems 파일은 시스템에 설정되어 있는 파일 시스템에 대한 정보를 저장하고 있는 파일입니다. 이 파일을 통해 리눅스 시스템에 설정되어 있는 파일 시스템의 종류와 지원 여부를 확인할 수 있습니다.
# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev bdev
nodev proc
nodev cpuset
nodev binfmt_misc
nodev debugfs
nodev securityfs
nodev sockfs
nodev usbfs
nodev pipefs
nodev anon_inodefs
nodev futexfs
nodev tmpfs
nodev inotifyfs
nodev eventpollfs
nodev devpts
ext2
nodev ramfs
nodev hugetlbfs
iso9660
nodev mqueue
ext3
nodev vmhgfs
nodev vmblock
nodev rpc_pipefs
nodev autofs
3단계: /proc/swaps 파일
/proc/swaps 파일은 시스템에 설정되어 있는 스왑 영역의 정보를 제공해줍니다. 이 파일의 출력을 통해 현재 시스템이 사용하고 있는 스왑 영역의 정보를 알 수 있습니다.
# cat /proc/swaps /* 관련 명령어 : free */
Filename Type Size Used Priority
/dev/sda2 partition 1052248 88 -1
4단계: /proc/version 파일
/proc/version 파일은 현재 시스템에 설치되어 있는 리눅스 커널의 버전 정보를 제공해줍니다. 이 파일의 출력을 통해 현재 시스템에 설치되어 있는 리눅스 커널의 버전을 확인할 수 있습니다.
# cat /proc/version /* # uname -a */
Linux version 2.6.18-164.el5 (mockbuild@builder16.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Thu Sep 3 03:33:56 EDT 2009
5단계: /proc/devices 파일
/proc/devices 파일은 현재 시스템에 설정되어 있는 하드웨어 디바이스의 목록을 제공해줍니다. 이 파일의 출력을 통해 현재 시스템에 설정되어 있는 하드웨어 디바이스의 종류와 이름을 확인할 수 있습니다.
# cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
....
Block devices:
1 ramdisk
2 fd
8 sd
9 md
....
# ls -l /dev | grep '^c'
# ls -l /dev | grep '^b'
6단계: /proc/ioports 파일
/proc/ioports 파일은 시스템의 입출력 포트 주소 범위를 보여주는 가상 파일입니다. 이 파일은 시스템에 설치된 하드웨어와 함께 사용되는 입출력 포트를 나열합니다. 이 파일의 내용에는 입출력 포트 시작 및 종료 주소와 해당 포트를 사용하는 드라이버 이름이 포함됩니다. 이 파일은 시스템에서 하드웨어 충돌 문제를 진단하기 위해 유용합니다.
[참고] IRQ (interrupt request)의 개념
컴퓨터 시스템에서 IRQ 값은 주변장치들이 자신의 운영에 관하여 컴퓨터에게 신호를 보내는 장소입니다. 각 주변장치마다 미리 할당된 IRQ 값을 사용하여 컴퓨터가 주변장치와 통신할 수 있습니다. 예를 들어 프린터가 출력을 완료하면 인터럽트 신호를 컴퓨터에 보내어 컴퓨터가 다음 작업을 수행할 수 있도록 합니다. 이러한 인터럽트 신호는 같은 회선을 통해 도착하므로, 컴퓨터는 각 주변장치와 회로마다 고유한 IRQ 값을 할당하여 구분합니다.
PnP 장치가 등장하기 전에는 새로운 주변장치를 추가할 때마다 사용자가 IRQ 값을 수동으로 할당해야 했습니다. 하지만 모든 주변장치가 PnP를 지원하는 것은 아니기 때문에, PnP를 지원하지 않는 주변장치를 추가해야 할 때는 제조사의 설치설명서 등을 참조하여 IRQ 값을 설정해야 합니다. 그러나 IRQ 값을 설정하는 방법을 잘 모르는 경우, 제조사의 기술지원센터에 문의함으로써 시간을 절약할 수 있습니다.
/proc 디렉터리
/proc 디렉터리는 가상 파일 시스템이다. 파일 시스템은 하드 디스크, SSD, USB 등의 저장 장치에 대한 데이터를 저장하는 방식이다. 하지만 /proc 디렉터리는 메모리에 저장되어 있는 커널 정보를 파일로 제공한다. 이러한 파일들은 시스템의 상태 정보를 제공하고, 프로세스, 하드웨어, 네트워크 등의 정보를 제공한다.
CPU 정보 확인
/proc/cpuinfo 파일은 리눅스 서버의 CPU 정보가 들어 있다. CPU의 타입, 모델, 제조회사, 성능 등에 관한 정보를 알려 준다. 다음은 /proc/cpuinfo 파일에서 확인할 수 있는 정보의 일부이다.
# cat /proc/cpuinfo /* # dmesg | grep -i cpu */
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 5
model name : AMD Athlon(tm) II X4 620 Processor
stepping : 2
cpu MHz : 2600.210
cache size : 512 KB
....
메모리 정보 확인
/proc/meminfo 파일은 메모리 사용량에 관한 정보를 보여 준다. 실제 메모리뿐만 아니라 가상 메모리까지 모두 확인할 수 있다. 다음은 /proc/meminfo 파일에서 확인할 수 있는 정보의 일부이다.
# cat /proc/meminfo /* # dmesg | grep -i mem ,# free */
MemTotal: 515340 kB
MemFree: 27556 kB
Buffers: 27348 kB
Cached: 343184 kB
SwapCached: 0 kB
....
커널 모듈 정보 확인
/proc/modules 파일은 커널 모듈에 대한 정보를 확인할 수 있다. 디바이스 된 장치의 드라이브를 확인할 때 이더넷 카드를 인식시킬 때 내렸던 lsmod 명령처럼 현재 커널 메모리에 올려서 사용하고 있는 모듈에 대한 정보를 확인할 수 있다.
# cat /proc/modules /* # lsmod */
autofs4 29253 3 - Live 0xe0cf2000
hidp 23105 2 - Live 0xe0c95000
rfcomm 42457 0 - Live 0xe0c5f000
l2cap 29505 10 hidp,rfcomm, Live 0xe0c8c000
bluetooth 53925 5 hidp,rfcomm,l2cap, Live 0xe0cd9000
....
DMA 정보 확인
/proc/dma 파일은 현재 어느 DMA 채널이 사용 중인지를 알려 준다. 주로 사운드 카드를 설정할 때 확인하는 부분이다. DMA는 CPU를 통하지 않고 하드웨어와 메모리 사이에 데이터를 직접 전송시켜 고속으로 데이터를 전송하는 방식이다. 플로피 디스크와 같은 방식의 데이터 전송방식을 말한다.
# cat /proc/dma
2: floppy
4: cascade
....
DMA의 개념
DMA (Direct Memory Access) ; 메모리 직접 참조
DMA[디에메이]는 부착된 주변장치 (하드디스크 드라이브 등)로부터 컴퓨터 마더보드 상의 메모리로 데이터를 직접 보낼 수 있는 몇몇 컴퓨터의 버스의 기능이다. 이때, 마이크로프로세서는 데이터 전송에 관여하지 않으므로, 전체적인 컴퓨터 성능이 높아진다.
대개, 메모리의 일정 부분이 DMA에 사용될 영역으로 지정된다. ISA 버스 표준에서는, 최고 16 MB까지의 메모리가 DMA를 위해 주소 지정될 수 있다. EISA와 MCA 표준은 전체범위의 메모리 주소에 액세스를 허용한다 (그것들이 32 비트 주소지정이 가능하다는 전제하에). PCI는 마이크로프로세서가 PCI 콘트롤러에 입출력제어를 위임하는 버스 마스터링을 사용하여 DMA를 성취한다.
DMA의 대안으로서, PIO 인터페이스가 있는데, 이는 장치들 간에 전송된 모든 데이터가 프로세서를 거쳐가는 것이다. ATA/IDE 인터페이스를 위한 새로운 프로토콜이 Ultra DMA/33인데, 집중모드에서는 초당 33 MB까지의 데이터를 전송할 수 있다. Ultra DMA/33과 함께 딸려오는 하드드라이브는 PIO 모드 1, 3, 그리고 4와 멀티워드 DMA 모드 2 (초당 16 MB)를 함께 지원한다.
쉬운 설명] DMA 컨트롤러는 입출력장치와 관련된 개념입니다. 일반적으로 이러한 입출력창치는 직접 시스템 버스에 연결되지 않습니다. 그 이유는 입출력 장치가 다양하고, 각기 전송속도의 차이가 나며, 데이터의 형식과 길이가 다르기 때문입니다. 그래서 입출력 장치를 제어하기 위해서는 입출력 제어기가 필요하고, 입출력 제어기는 입출력 장치의 제어와 타이밍을 조절하는 역할을 하며, CPU와 입출력 장치의 통신을 담당하게 됩니다. 또한 데이터의 버퍼링이나 오류를 검출하는 역할을 수행하는데, 물론 CPU는 해당 입출력 제어기를 통하여 입출력 동작을 수행합니다. 그래서 DMA는 넓은 의미로 입출력 제어기의 범위로 이해하기도 합니다.
하지만, 컴퓨터 성능을 향상시키는 데 DMA가 유일한 방법은 아닙니다. 캐시 메모리와 파이프라이닝과 같은 다른 방법도 컴퓨터의 처리 속도를 최적화하는 데 활용될 수 있습니다. 또한, 하드웨어와 소프트웨어에 따라 DMA가 항상 필요하거나 적절하지 않을 수 있으므로, 시스템의 요구 사항과 기능을 신중하게 고려하는 것이 중요합니다.
또한, DMA는 주로 컴퓨터의 성능을 향상시키기 위해 사용되지만, 오디오 및 비디오 녹화와 같은 다른 문맥에서도 사용될 수 있습니다. 예를 들어, DMA를 사용하여 녹음 장치에서 오디오 또는 비디오 데이터를 직접 컴퓨터 메모리로 전송할 수 있으므로, 프로세서가 전송에 참여할 필요가 없어집니다. 이를 통해 더 높은 품질의 녹음과 더 빠른 전송 속도를 구현할 수 있습니다.
또한, DMA는 최근 몇 년간 많은 연구와 개발의 대상이 되어, 더 나은 기능을 제공하기 위한 새로운 기술과 기술이 개발되고 있습니다. 예를 들어, 일부 연구자들은 DMA를 분산 컴퓨팅의 문맥에서 사용하기 위한 기술로 탐색하고 있으며, 데이터가 네트워크를 통해 여러 컴퓨터 간에 전송되는 경우 DMA를 활용하여 전송 속도와 효율성을 개선할 수 있습니다.
종합적으로, DMA는 컴퓨터 및 기타 장치의 성능을 향상시키는 강력한 도구이지만, 사용하는 문맥에서의 제한 사항을 이해하고 신중하게 고려하여야 합니다. 신중한 계획과 구현을 통해 DMA는 다양한 시스템 및 응용 프로그램의 성능을 최적화하는 효과적인 방법이 될 수 있습니다.
⑪ /proc/ide 디렉토리
이 디렉토리에는 IDE 인터페이스와 연결된 IDE 기기들에 대한 정보가 파일 형태로 들어 있다. 대표적인 IDE 기기로 하드디스크를 들 수 있다. ide 디렉토리에 있는 hdc 디렉토리에는 하드디스크에 대한 정보가 저장되어 있다. /proc/ide/ide1/hdc 디렉토리에서 cat model이라는 명령을 내리면 하드디스크의 모델 이름을 표시해 준다.
# ls -l /proc/ide/ide1
-r--r--r-- 1 root root 0 5월 24 17:55 drivers
lrwxrwxrwx 1 root root 8 5월 24 17:55 hdc -> ide1/hdc
dr-xr-xr-x 3 root root 0 5월 24 17:55 ide1
# cat /proc/ide/ide1/hdc/model
VMware Virtual IDE CDROM Drive
위 코드에서는 /proc/ide 디렉토리에 대한 설명을 하고 있다. 이 디렉토리에는 IDE 기기들에 대한 정보가 파일 형태로 들어있다. /proc/ide/ide1 디렉토리에는 IDE 인터페이스와 연결된 IDE 기기들에 대한 정보가 들어 있다. hdc 디렉토리에는 하드디스크에 대한 정보가 저장되어 있다. /proc/ide/ide1/hdc 디렉토리에서 cat model 명령을 내리면 하드디스크의 모델 이름을 표시한다.
⑫ /proc/uptime 파일
시스템이 얼마나 오래 동작했는지에 대한 정보를 저장하고 있는 파일이다.
# cat /proc/uptime /* # uptime */
128847.80 124604.75
# uptime
18:37:16 up 1 day, 11:45, 5 users, load average: 0.00, 0.00, 0.00
위 코드에서는 /proc/uptime 파일에 대한 설명을 하고 있다. 이 파일은 시스템이 얼마나 오래 동작했는지에 대한 정보를 저장하고 있다. cat /proc/uptime 명령을 내리면 시스템이 동작한 시간과 idle한 시간을 초 단위로 알려준다. uptime 명령을 내리면 시스템의 부하 평균과 함께 시스템이 동작한 시간을 보여준다.
/var 디렉토리
/var 디렉토리는 시스템에서 사용되는 가변적인 파일들이 저장되는 중요한 디렉토리입니다. 이 디렉토리는 각종 시스템 로그파일, 사용자 로그인에 대한 보안 기록, 그리고 만약 시스템에 메일 서버를 운영한다면 사용자들에게 전송된 메일들을 임시로 저장하는 역할을 합니다. 이러한 기능은 시스템의 안정성과 보안에 아주 중요한 역할을 합니다.
레드햇 7.0에서부터는 /var 디렉토리의 용도에 대한 변경 내용이 있습니다. 예전에는 /home 디렉토리에 저장되던 /home/ httpd 디렉토리가 /var/www 로 이름이 변경되어 저장됩니다. 이 변경은 사용자들이 웹 서버에 접근할 때 더욱 편리하게 하기 위한 것입니다. 또한 /home/ftp 디렉토리가 /var/ftp로 변경되었습니다. 이를 통해, FTP 서버에 접근하는 사용자들은 더욱 쉽게 접근할 수 있게 되었습니다.
/var 디렉토리는 시스템의 안정성과 보안에 매우 중요한 역할을 합니다. 이 디렉토리를 더욱 자세히 살펴보면, 다음과 같은 파일이 포함되어 있습니다:
- /var/log: 시스템 로그 파일이 저장되는 디렉토리
- /var/spool: 인쇄 작업, 메일 전송, 사용자 및 프로세스 큐 등의 임시 파일을 포함하는 디렉토리
- /var/run: 시스템에서 실행 중인 프로세스와 관련된 파일을 포함하는 디렉토리
- /var/cache: 패키지 설치 및 업데이트, 라이브러리 캐시, 웹 브라우저 캐시 등을 포함하는 디렉토리
- /var/lock: 파일 잠금을 위한 디렉토리
이러한 파일들은 시스템의 안정성과 성능을 유지하는 데 매우 중요합니다. 따라서, /var 디렉토리는 항상 관리되어야 하며, 필요한 경우에는 디스크 공간을 추가로 할당하여 시스템이 원활하게 작동하도록 해야 합니다.
① /var/log 디렉토리
프로그램들의 로그 파일들이 저장되는 디렉토리입니다. 이 디렉토리에서 중요한 파일은 wtmp와 messages 파일입니다. 이들은 각각 login과 syslog의 로그 파일들입니다. wtmp는 시스템의 모든 사용자 로그인과 로그아웃에 대한 정보를 저장하고 있는 파일이고, messages는 커널과 시스템의 모든 출력 메시지를 저장하고 있는 파일입니다. /var/log 안의 파일들은 시스템의 사용량에 따라 그 크기가 무한대로 증가할 수 있으므로 정기적으로 파일들을 삭제해야 합니다. 이 외에도, 로그 파일을 백업하고, 디렉토리를 관리하는 것이 좋습니다.
# tail /var/log/messages (# gnome-system-log)
Jan 7 13:02:36 linux249 avahi-daemon[4022]: Received response from host 172.16.6.26 with invalid source port 52450 on interface 'eth0.0'
Jan 7 13:02:36 linux249 avahi-daemon[4022]: Received response from host 172.16.6.26 with invalid source port 52450 on interface 'eth0.0'
Jan 7 13:02:36 linux249 avahi-daemon[4022]: Invalid legacy unicast query packet.
Jan 7 13:02:37 linux249 avahi-daemon[4022]: Invalid legacy unicast query packet.
Jan 7 13:02:37 linux249 avahi-daemon[4022]: Received response from host 172.16.8.103 with invalid source port 59480 on interface 'eth0.0'
Jan 7 13:02:37 linux249 avahi-daemon[4022]: Invalid legacy unicast query packet.
Jan 7 13:02:37 linux249 avahi-daemon[4022]: Received response from host 172.16.6.26 with invalid source port 52450 on interface 'eth0.0'
Jan 7 13:02:40 linux249 last message repeated 6 times
Jan 7 13:02:53 linux249 avahi-daemon[4022]: Received response from host 172.16.8.105 with invalid source port 64324 on interface 'eth0.0'
Jan 7 13:05:35 linux249 avahi-daemon[4022]: Invalid query packet.
② /var/run 디렉토리
시스템의 현재 정보들을 저장하고 있는 디렉토리입니다. 간단하게 /var/run/atd.pid 파일의 경우에는 현재 사용 중인 atd 데몬의 프로세스번호를 저장하고 있습니다. 이 외에도, 시스템의 현재 상태를 저장하고 있는 파일들이 위치하고 있습니다.
# ps -ef | grep atd
root 2480 1 0 May23 ? 00:00:00 rpc.statd
root 2881 1 0 May23 ? 00:00:00 /usr/sbin/atd
# cat /var/run/atd.pid
2881
③ /var/spool 디렉토리
메일이나 뉴스, 프린터 큐 등과 같은 시스템 상에서 대기 상태에 있는 작업들을 위한 디렉토리입니다. 각각의 대기 작업들은 모두 /var/spool 아래 고유의 디렉토리에 위치하게 됩니다. 예를 들어 시스템의 계정 사용자들의 메일은 /var/spool/mail에 저장됩니다. 이외에도, 시스템에서 대기 중인 작업들이 어떤 것이 있는지 확인하여 처리하는 것이 좋습니다.
# ls /var/spool/mail
FEDORA fedora root user01
/tmp 디렉토리
/tmp 디렉토리는 임시 파일이나 폴더가 생성되는 위치입니다. 이 디렉토리는 프로그램이 실행 중에 사용하는 임시 파일들이 저장되는 곳입니다. 이 디렉토리는 운영체제가 부팅될 때마다 자동으로 생성되며, 그 안에 들어있는 파일들은 재부팅시 삭제됩니다.
/tmp 디렉토리는 많은 프로그램들이 사용하기 때문에, 이 디렉토리의 용량이 부족하면 프로그램이 비정상적으로 종료되거나, 다른 오류가 발생할 수 있습니다. 따라서 이 디렉토리의 용량을 충분히 확보해 두는 것이 좋습니다. 또한, /tmp 디렉토리에 저장된 파일들은 민감한 정보를 담고 있을 수 있으므로, 주기적으로 삭제하거나 암호화하는 것이 좋습니다.
다음은 /tmp 디렉토리에 있는 파일과 디렉토리 목록입니다:
# ls -al /tmp
VMwareDnD/ scim-bridge-0.3.0.lockfile-0@localhost:0.0 ssh-gWLtvP4408/
gconfd-root/ scim-bridge-0.3.0.socket-0@localhost:0.0= virtual-root.wQlgkr/
keyring-YT6EqU/ scim-helper-manager-socket-root= vmware-config0/
mapping-root= scim-panel-socket:0-root= vmware-root/
orbit-root/ scim-socket-frontend-root= vmware-root-1983851911
위 결과에서 확인할 수 있듯이 /tmp 디렉토리에는 VMwareDnD/, gconfd-root/, orbit-root/ 등이 포함되어 있습니다. 이러한 디렉토리와 파일들은 소켓 통신, 가상 머신, 설정 파일 등 다양한 용도로 사용됩니다. 이러한 파일과 디렉토리의 내용은 시스템의 올바른 동작에 매우 중요하며, 적절히 유지 관리되어야 합니다.