리눅스: 두 판 사이의 차이
편집 요약 없음 |
→주요 쉘 명령어들: 쉘 명령어 리스트 추가(busybox 기준) |
||
| 25번째 줄: | 25번째 줄: | ||
* poll: 장치와의 통신에서 응답을 감시 | * poll: 장치와의 통신에서 응답을 감시 | ||
=== 주요 쉘 명령어들 === | === 주요 쉘 명령어들 === | ||
< | |||
다음은 busybox<ref>임베디드 리눅스를 위해 필수 유닉스 유틸리티들을 단일 실행 파일로 줄인 유틸리티 프로그램</ref>에서 지원하는 기본적인 쉘 명령어들이다. [https://busybox.net/downloads/BusyBox.html 출처] | |||
acpid, addgroup, adduser, adjtimex, ar, arp, arping, ash, | |||
awk, basename, beep, blkid, brctl, bunzip2, bzcat, bzip2, cal, cat, | |||
catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, | |||
chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, | |||
cryptpw, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, | |||
devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, | |||
dos2unix, dpkg, du, dumpkmap, dumpleases, echo, ed, egrep, eject, | |||
env, envdir, envuidgid, expand, expr, fakeidentd, false, fbset, | |||
fbsplash, fdflush, fdformat, fdisk, fgrep, find, findfs, flash_lock, | |||
flash_unlock, fold, free, freeramdisk, fsck, fsck.minix, fsync, | |||
ftpd, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, hd, | |||
hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id, | |||
ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init, inotifyd, | |||
insmod, install, ionice, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, | |||
iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, | |||
last, length, less, linux32, linux64, linuxrc, ln, loadfont, | |||
loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr, | |||
ls, lsattr, lsmod, lzmacat, lzop, lzopcat, makemime, man, md5sum, | |||
mdev, mesg, microcom, mkdir, mkdosfs, mkfifo, mkfs.minix, mkfs.vfat, | |||
mknod, mkpasswd, mkswap, mktemp, modprobe, more, mount, mountpoint, | |||
mt, mv, nameif, nc, netstat, nice, nmeter, nohup, nslookup, od, | |||
openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, | |||
pivot_root, pkill, popmaildir, printenv, printf, ps, pscan, pwd, | |||
raidautorun, rdate, rdev, readlink, readprofile, realpath, | |||
reformime, renice, reset, resize, rm, rmdir, rmmod, route, rpm, | |||
rpm2cpio, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script, | |||
scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont, | |||
setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum, | |||
sha512sum, showkey, slattach, sleep, softlimit, sort, split, | |||
start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, | |||
svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, | |||
tail, tar, taskset, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, | |||
time, timeout, top, touch, tr, traceroute, true, tty, ttysize, | |||
udhcpc, udhcpd, udpsvd, umount, uname, uncompress, unexpand, uniq, | |||
unix2dos, unlzma, unlzop, unzip, uptime, usleep, uudecode, uuencode, | |||
vconfig, vi, vlock, volname, watch, watchdog, wc, wget, which, who, | |||
whoami, xargs, yes, zcat, zcip | |||
=== 지원 CPU === | === 지원 CPU === | ||
== 기타 == | == 기타 == | ||
2023년 8월 24일 (목) 19:24 판
리눅스(Linux)는 리누스 토르발즈에 의해 1991년부터 개발되는 운영체제의 커널 소프트웨어이다.
이 커널을 사용해 개발된 운영체제를 리눅스 계열 운영체제라고 부르며, GNU에서 개발한 각종 OS 차원 프로그램과 결합한 경우 GNU/Linux라고 한다.
역사
1991년 핀란드 헬싱키 공대에 재학 중이던 리누스 토르발즈가 i386 미닉스 컴퓨터를 이용해 제작했다. 초기부터 오픈 소스 프로젝트로 진행하며 기여자들을 명시하는 등 회사가 아닌 개별 개발자에 친근하게 다가간 결과 기여자가 많아지며 성장세가 빨랐고, 리처드 스톨먼이 주도하는 GNU가 이 프로젝트에 주목하여 Hurd를 사실상 버리고 리눅스에 GNU 유틸리티를 붙이면서 오늘날과 같은 규모가 되었다.[1]
구조
리눅스는 기본적으로 모놀리식 커널로 분류되어 커널 자체에 핵심적인 프로세스 스위칭 및 메모리 관리, 시스템 콜, 장치 통신 기능에 더해 장치(디바이스) 드라이버, 네트워킹 기능 등의 추가 기능까지 모조리 합친 구조이다. GNU는 Hurd라는 프로세스 스위칭 및 메모리 관리, 장치 통신 기능만 구현하는 마이크로커널 구조의 커널 개발이 지연되자 Linux를 대용으로 쓰려다가 이 조합이 아예 본진이 되어버렸다(Hurd는 현재 개발이 명목 상으로만 이어지며 Debian 적용 버전을 제외하고 사실상 프로젝트 중단 상태에 가깝다).
리눅스는 원래 태스크라 하여 프로세스에 해당하는 프로그램 실행 흐름 단위만 있었다가 추후에 스레드에 대응하는 경량 프로세스(Lightweight Process) 개념이 이식되었다. 다만 스레드 개념을 적극적으로 쓰는 Windows와 달리 리눅스는 대부분의 응용 소프트웨어가 프로세스 개념만 쓰는 경우가 많다. 리눅스는 PID 숫자로 이들 프로세스를 구분한다. 프로세스 간 데이터를 주고 받을 때에는 IPC(Inter-Process Communication) 기능으로 시그널(OS 차원의 신호, CPU 연산 과정에서 발생한 에러 등을 소프트웨어에게 보낸다), 파이프(부모-자식 종속이 걸린 프로세스들에서 하는 단방향 데이터 통신), FIFO 파이프(종속 없는 프로세스 간의 양방향 데이터 통신), 세마포어(Semaphore)를 걸은 공유 메모리, 메세지 큐 등을 사용하며 서로 다른 컴퓨터 간의 프로세스들과 한 컴퓨터 내의 프로세스들 사이의 통신을 모두 지원하는 POSIX 호환 소켓 통신도 있다.
리눅스의 장치 드라이버는 dev 폴더 안에 있다. 하나의 파일이 하나의 장치 제어에 쓰인다. 응용 소프트웨어는 sys 폴더의 장치 정보 및 설정 파일을 이용해 장치를 제어한다. 커널의 각종 핵심 동작(CPU 정보, 프로세스 스케줄링 정보, 메모리 관리 상태 등 각종 시스템 정보)은 proc 폴더에서 확인/처리할 수 있다.
다른 모놀리식 커널처럼 리눅스도 최하위에 아키텍처 의존 코드(리눅스 소스 코드의 arch 폴더나 include 폴더의 asm 폴더의 내용물 같은 특정 CPU 아키텍처의 어셈블리 코드)를 두고 그 위의 커널 코드로 하드웨어를 제어하며 응용 소프트웨어와 시스템 콜 인터페이스에 따라 기능을 넘겨준다.
POSIX의 영향을 받아 파일 입출력이나 장치 제어를 위한 데이터 통신 시에 다음과 같은 함수를 호출한다.
- open: 파일은 열기, 장치 통신은 초기화
- close: 파일은 닫기, 장치 통신은 종료
- read: 파일/장치에서 데이터 읽어오기
- write: 파일/장치에 데이터 쓰기
- ioctl: 장치와의 통신에서 메타데이터가 되는 정보에 접근/조작하는 식으로 장치 동작 제어
- poll: 장치와의 통신에서 응답을 감시
주요 쉘 명령어들
다음은 busybox[2]에서 지원하는 기본적인 쉘 명령어들이다. 출처
acpid, addgroup, adduser, adjtimex, ar, arp, arping, ash, awk, basename, beep, blkid, brctl, bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, dpkg, du, dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, expand, expr, fakeidentd, false, fbset, fbsplash, fdflush, fdformat, fdisk, fgrep, find, findfs, flash_lock, flash_unlock, fold, free, freeramdisk, fsck, fsck.minix, fsync, ftpd, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, hd, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init, inotifyd, insmod, install, ionice, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, last, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lzmacat, lzop, lzopcat, makemime, man, md5sum, mdev, mesg, microcom, mkdir, mkdosfs, mkfifo, mkfs.minix, mkfs.vfat, mknod, mkpasswd, mkswap, mktemp, modprobe, more, mount, mountpoint, mt, mv, nameif, nc, netstat, nice, nmeter, nohup, nslookup, od, openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root, pkill, popmaildir, printenv, printf, ps, pscan, pwd, raidautorun, rdate, rdev, readlink, readprofile, realpath, reformime, renice, reset, resize, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont, setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum, sha512sum, showkey, slattach, sleep, softlimit, sort, split, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, taskset, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top, touch, tr, traceroute, true, tty, ttysize, udhcpc, udhcpd, udpsvd, umount, uname, uncompress, unexpand, uniq, unix2dos, unlzma, unlzop, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, volname, watch, watchdog, wc, wget, which, who, whoami, xargs, yes, zcat, zcip