본문 바로가기

운영체제

Sticky bit 란 무엇인가? (Unix 와 Linux 운영체제) 유닉스와 리눅스에서 파일 퍼미션에 대한 공부를 하다보면 나오는 특수한 파일 퍼미션이 두개가 있다. 하나는 앞의 find 명령어에 대한 고찰(http://blogger.pe.kr/338)에서 조금 살펴본 setuid/setgid 이고 다른 하나는 이번 포스트에서 설명할 sticky bit다. 1. sticky bit 란? 유닉스 운영체제는 기본적으로 파일의 소유자가 아니면 해당 디렉토리 내의 파일을 지우거나 수정하지 못하도록 기본적인 umask를 설정한다. 하지만 딱~두군데 모든 사용자 계정이 파일을 만들고 수정, 삭제할 수 있는 디렉토리가 있다. 바로 /tmp와 /var/tmp다. 이 두개의 디렉토리는 퍼미션이 기본적으로 777로 설정되어 있어 누구나 임의의 파일을 생성하고 수정하고 삭제할 수 있다. 말.. 더보기
쉘스크립트에서 이따금씩 사용되는 2>&1 이해하기 이런저런 쉘스크립트를 보다면 스크립트의 문장 끝부분이 다음과 같은 구문을 종종 보게된다. cat /tmp/error.txt > /dev/null 2>&1 cat 명령은 error.txt 파일의 내용을 출력하는 명령이고... > 는 리다이렉션으로 화면에 출력되는 내용을 > 다음에 지정한 파일로 보내는 것이니 /dev/null 로 결과를 보내고, 즉 화면에는 표시하지 않고...까지는 유닉스 환경을 다루어본 학생이나 엔지니어라면 쉽게 이해한다. 문제는 2>&1 이다. 흔히 "아~저건 에러메시지도 화면에 표시하지 않게하는 거지."라며 아는 척~~하는 사람들도 많다. 맞다. 정확하게 알고 있긴하다. 쉘스크립트를 작성하고 실행할 때 중간에 에러가 발생하게 되면 에러메시지가 화면에 고스란히 출력되어 보기에 썩~좋지 .. 더보기
Debian linux에서 SecureCRT를 사용할 때 한글깨지는 문제 해결 이전 포스트에서 구입한 NAS인 My Book Live를 들여다 보면서 발견한 문제 중 하나가 내가 즐겨 사용하는 SecureCRT에서 한글이 깨지는 것이었다. 무심고 LANG 환경변수..Locale...터미널 등등.. 평소 알고 있던 상식(?)을 동원해 봐도 한글깨짐 문제는 해결이 되지 않고 아래 화면처럼 보인다. 이 문제를 해결하기 위해서는 일단 Debian 리눅스의 locale을 아래와 같이 맞춰주어야 한다. 최근엔 대부분 UTF-8 캐릭터셋(로케일)을 사용하므로 EUC-KR 보다는 UTF-8로 설정한다. 만약 로케일이 ko_KR.UTF-8로 되어 있지 않다면 다음의 명령을 실행하여 로케일을 맞춰주면 된다. # dpkg-reconfigure locales 로케일을 맞췄다면 이제 SecureCRT에서.. 더보기
안드로이드 개발자 옵션 보이기와 감추기 (안드로이드 4.3 이상) 넥서스7 1세대와 2세대 그리고 넥서스 5에서부터 새롭게 지원되기 시작한 ART(Android RunTime)을 사용하기 위해서는 안드로이드의 개발자 환경 옵션에 들어가 ART와 Dalvik 중 하나의 런타임환경을 선택해주어야 한다. 물론... 아직 안정화 되었다고 단정하긴 이르다. 일부 앱에서 오류가 발생한다는 소식이 들리기도 하고 처음 나온 솔루션이 항상 그렇듯 일정기간 동안은 실 환경에서의 테스트와 버그 수정이 필요하기 때문이다. 그런데.. 안드로이드 4.2 (또는 4.3 ??) 부터는 그 이전의 안드로이드 설정에서 보이던 "개발자 옵션"이 사라졌다. 아무리 설정을 뒤져도 "개발자 옵션"이 없다. 구글에서 "개발자 옵션"을 숨긴 이유는 정보보호 때문임이 자명하다. 검증되지 않은 apk 파일을 다운받.. 더보기
안드로이드 속도가 아이폰보다 느릴 수 밖에 없는 이유와 구글의 숙제 아이폰과 안드로이드의 속도 경쟁은 결국 32bit와 64bit 운영체제의 논쟁으로까지 번지는 형국이다. 하지만 그 싸움에서 안드로이드 진영은 애플을 이길 수 없다. 그 이유는 안드로이드의 앱 구동 체계의 구조적 문제 때문이다. 안드로이드는 리눅스 운영체제의 일종이면서도 사용자가 사용하는 앱은 모두 Java 언어로 개발된다. Java로 개발된 앱의 소스파일은 바이트 코드로 컴파일되기 때문에 운영체제가 직접 실행하는 것이 불가능하다. 왜냐하면 Java에서 컴파일된 바이트코드는 java Run-time 이라고 하는 실행환경(가상의 운영체제)에서만 읽고 해석(Just-In-Time 컴파일)이 가능하기 때문이다. 그리고 이러한 역할을 수행하는 것이 안드로이드에서 지원하는 앱구동 환경인 달빅(Dalvik)이다. 하.. 더보기
쉘 스크립트에서의 사칙연산과 문자열 자르기 쉘에서 문자열 자르기를 설명하기 전에 쉘에서의 변수의 특징을 먼저 알아 보자. 일반적인 Java나 C와 같은 프로그래밍 언어에서는 변수의 선언과 타입(type)이 무척 중요하다. 선언하지 않고 사용하거나 잘못 참조하거나 잘못 연산하게 되면 엉뚱한 값이 출력되거나 컴파일 시 에러를 팍팍~뿌려댄다. 하지만 쉘스크립트에서는 변수는 선언하지 않으며 타입을 지정하지 않고 사용해도 된다. 이따금씩 쉘 스크립트를 짜다보면 문자열과 숫자의 취급이 헷갈리곤 한다. C언어나 Java언어에서는 변수에 저장될 값이 숫자냐 문자냐를 무척 따져 형변환을 안해주게 되면 가차없이 컴파일 시 에러를 뿌려주는데 반해 쉘 스스크립트는 거침없이 알아서 연산을 한다. 아래 두 스크립트를 비교해보자. a=10 b=10 let c=a+b ech.. 더보기
메모리 부하 테스트 프로그램 작성하기 (C언어, malloc()) - 가상메모리의 마술 또 간만에 C 코딩할 일이 생겼다. 어쩌다 한번씩 코딩을 하다보니 실력이 늘지를 않는건 당연한 일이고 뭐하나 짜려면 시간이 꽤나 걸린다. 하지만 어쩌다 한번 코딩을 하니 재미가 있는건 사실이다. 이번에 짤 프로그램은 서버의 메모리를 고갈시키는 프로그램이다. 메모리를 할당받았다가 릴리즈하는 작업을 반복하는 프로그램이다. 예를 들어 10개의 프로세스가 각 10 M Byte의 메모리를 100번씩 할당받았다 해제하는 것이다. 즉 10 M Byte * 10 * 100 = 1 Tera Byte 를 할당받았다 해제했다를 반복하는 프로그램이다. 하지만 메모리의 할당과 해제 만으로는 서버에 거의 부하를 줄 수 없다는 것이 중요하다. 실제로 4G Byte의 메인메모리를 가진 서버에서 1 Tera Byte의 메모리를 할당 .. 더보기
쉘 스크립트란 무엇인가? 예전의 포스트에서 운영체제의 쉘(shell)에 대해 설명했다. 이전 글 : [Unix / Linux] 쉘을 이해하자. 그리고 간단하게 쉘의 환경변수에 대한 설명도 했다. 운영체제의 개념과 쉘의 개념에 대해 이해했다면 다음은 쉘스크립트를 공부하는 것이 일반적인 Unix/Linux 운영체제를 공부하는 순서라고 할 수 있다. 쉘 스크립트(Shell Script)란 ?쉘 스크립트를 이해하려면 먼저 스크립트(Script)가 무엇인지 이해해야 한다. 스크립트란 일반적으로 인터프리트(interpret) 방식으로 동작하는 컴파일되지 않은 프로그램이라고 이해하면 된다. 즉 "프로그램의 한 라인을 읽어 해석하고 실행하는 과정을 반복하도록 만들어진 프로그래밍 언어로 작성된 컴파일되지 않은 파일에 저장된 프로그램"이라는 의미.. 더보기
FTP 프토로콜의 Active Mode와 Passive 모드 얼마 전 1회 정보보안기사 필기시험을 치렀다. 시험 준비를 하면서 평소의 내 좌우명(?) 처럼 좋은 남편, 좋은 아빠, 좋은 회사원을 추구하면서 개인적으로 시험공부까지 하려니 하루를 32시간으로 늘리거나 잠안자고도 멀쩡할 수 있는 초능력을 갖고 싶은 마음이 굴뚝 같았다. (물론 이 세가지를 모두 만족할 만큼 하고 있지는 못하다.. -.-) 그런데.. 정보보안기사 시험에 FTP 프로토콜에 대한 문제가 출제되었고 별다른 생각없이 평소 알고 있는 지식을 이용해 가볍게 문제를 맞췄다. 이 문제는 "FTP프로토콜에서 Passive 모드는 서버가 클라이언트에게 알려준 임의의 포트번호로 클라이언트가 접속하는 방식" 이라는 것과 "패시브 모드는 FTP 클라이언트가 서버에게 pasv 커맨드를 보내 설정한다"는 것을 알면.. 더보기
[unix / linux] shell (쉘)을 이해하자. 유닉스나 리눅스를 공부하는 많은 초심자들이 처음으로 부닥치는 어려움이 바로 Shell(쉘) 이다. 이 쉘을 정확하게 이해하지 않으면 유닉스나 리눅스 서버에서 주로 업무를 하는 엔지니어가 되고자 하나 초심자 수준를 벗어날 수 없다. 그만큼 쉘을 정확하게 이해한다는 것은 유닉스나 리눅스의 운영체제를 얼마나 이해하고 있는지에 대한 수준을 가늠하는 하나의 지표로 써도 될만큼 중요하다.쉘의 정의쉘(Shell)은 운영체제에서 사용자가 입력하는 명령을 읽고 해석하여 대신 실행해주는 프로그램이다. 여기서 쉘을 Unix나 리눅스에만 있는 것으로 생각한다면 오산이다. Windows 운영체제나 다른 운영체제에도 Shell은 필수적으로 존재한다. 운영체제는 로그인한 사용자가 없다면 하나의 쉘도 실행되지 않는 상태다. 사용자가.. 더보기
Windows 7에서 노트북의 인터넷 공유하기 (ad-hoc 설정) 연관포스트 ) 노트북에 추가적인 USB타입 인터넷 공유기 사용하기 오래전에 Windows XP 운영체제에서 유선을 통해 인터넷에 연결된 노트북의 무선랜카드를 adhoc 모드로 바꾸어 다른 무선랜카드가 장착된 노트북을 인터넷에 연결하는 인터넷 공유 설정에 대한 포스트를 올린적이 있다. (http://blogger.pe.kr/82) 그 이후 오랜 시간이 흘러 내가 사용하는 노트북에는 Windows 7 운영체제가 설치되어 있다. Windows 7의 경우 유선인터넷을 공유하고 무선랜카드를 adhoc 모드로 변경하는 작업이 훨씬 쉬워졌다. 아래 화면처럼 제어판을 통해 네트워크 및 공유센터까지 들어간다. 연결옵션에서 가장 아래쪽에 있는 "무선 애드혹"을 선택한다. adhoc 연결은 9미터 이내에 있어야 한다고 친절.. 더보기
Solaris10에서 컴파일러 설치하기 및 CD롬 마운트하기 Solaris 10 x86 을 설치 할 때 몇가지 옵션이 있다. 그 옵션에 따라 1G 남짓의 VMWare 이미지를 만들 수도 있고 7G 이상의 큰 용량의 VMWare 이미지를 만들 수도 있다. 여러 사람에게 배포하는 교육용 VMWare 이미지는 작을 수록 배포가 쉽고 관리도 쉽기 때문에 좋긴 하지만 여러 S/W들.. 예를 들면 Apache라든가 MySQL 이라든가... 컴파일러를 Solaris 10 설치 옵션에서 일일이 골라서 설치하기는 쉽지 않다. 서버보안 교육용 Solaris 10 x86 이미지를 만들 때 확인한 바로는 1G 정도의 용량을 갖는 기본 설치 형태와 5G 정도를 갖는 설치 옵션이 있다. 개발자 용 설치 용량은 6G byte가 넘고 전체 설치는 7G byte가 넘는다. 2~3 G byte .. 더보기