컴퓨터활용/리눅스 11

리눅스 디렉토리 사용량

디렉토리별 사용량을 보려면 du 명령을 사용한다. 그런데 그냥 du 명령을 치면 하위 디렉토리까지 다 보여 주게 되므로 정신이 없다. 현재 디렉토리 기준으로 1 레벨만 보고 싶다면 --max-depth 옵션을 사용한다. du --max-depth=1 그러면 내가 접근할 수 없는 디렉토리의 경우 "허가 거부" 메시지가 뜨게 된다. 이런 거 지저분해서 보기 싫다면 du --max-depth=1 2>/dev/null "허가 거부" 등과 같은 오류 메시지는 화면으로 출력되지 않도록 한다. 디렉토리 사용량 크기별로 정렬해서 보면 편할 것이다. du --max-depth=1 2>/dev/null | sort -n 다른 이야기 지만 사용량을 byte 단위가 아닌 K, G로 보고 싶다면 -h 옵션을 사용한다.

U2L프로젝트 문자열 이슈

유닉스로 개발된 C 소스를 리눅스에서 컴파일만 하고서 돌리면 잘 돌아갈까? 대부분 프로그램들은 잘 돌아가지만 몇몇 코드들은 손을 봐줘야 하는 것들이 있다. 그중에서 함수로 아규먼트를 넘길 때 문자열 이슈가 있다. 특히 readonly 문자열 값을 아규먼트로 넘길 때 끝처리에서 다르게 동작한다. 001: void function_test_str( char *str ) { 002: char tmp_str[100]; 003: size_t len; 004: 005: len = strlen(str); 006: strncpy( tmp_str, str, sizeof(tmp_str)); 007: tmp_str[len] = 0x00; /* 확실한 막음처리 */ 008: printf("len=[%u] str=[%s] tm..

U2L프로젝트 ltoa 이슈

IBM이나 HP 유닉스에서 사용했던 ltoa 함수를 리눅스에서는 지원하지 않는다. int형 변수의 값을 char 배열에 넣는 함수를 사용하고 싶다면 할 수 없이 sprintf() 함수를 사용하는 방법을 사용해야 한다. 하지만 ltoa() 는 바로 문자열 포인터를 return 받기 때문에 바로 사용하면 되었지만 sprintf() 를 사용할 경우 결과를 저장할 변수를 하나 선언해야하는 번거로움이 있다. sprintf(버퍼,"형식지정자", 값) 예를들어, long cnt = 400; char str[100]; sprintf(str, "%ld", cnt ); 라고 하면 버퍼에 문자열 400 이 들어간다. 프로그램내에서 빈번하게 사용된다면 매크로로 선언해 놓고 사용하는 것을 권장한다. #define LTOA( _..

U2L프로젝트 printf 이슈

포매팅으로 패딩하여 출력하거나 문자열을 구성할 때 동작의 차이가 있다. printf("[%06s]\n", "AB"); 라고 했을 때 유닉스에서는 0 이 좌패딩되었다. 그런데 리눅스에서는 스페이스가 좌패딩된다. printf() 는 출력하는 거라 로직에 영향을 미치지 않을 수 있다고 치더라도 포매팅을 사용하는 sprintf 도 동일한 현상이 발생된다. 이런 로직의 경우는 프로그램 속에 숨어 있어서 찾아내기 어렵기 때문에 꼼꼼한 테스트가 필수이다. printf 함수의 포매팅으로는 커버할 수 없기 때문에 별도의 함수를 만들어야 하기 때문에 상당히 번거롭게 된다.

U2L 프로젝트 fclose() 이슈

유닉스 프로그램을 리눅스로 변환할 때 발생되는 이슈들 1. 변수가 NULL 일 때 access 하면 코어덤프가 발생되다. 유닉스에서는 이렇게 민감하지 않아서 coredump 가 나지는 않았았으나 linux 에서는 변수가 NULL 일 때 참조를 하면 바로 coredump 가 발생된다. 예를 들어 유닉스에서는 fclose(fp); 후에 다시 fclose(fp); 를 호출해도 코어덤프 발생되지 않았으나 리눅스에서는 짤없이 죽는다. 그래서 wrapper 함수를 만들어야 한다. int fn_fclose(FILE *_fp) { if( _fp != NULL && _fp->_fileno >= 0 ) return fclose(_fp); return 0; } 여기서 file structure pointer 변수가 fclo..

티맥스 서버가 수행중 죽을 때

티맥스 서비스를 호출했는데 느닷없이 프로그램이 죽었다. 정확하게 말하면 IPPR 서비스를 수행 중 해당 서버가 죽고 재기동 된다. 어떤 신호도 없이 서버가 죽는 경우에 뭐 부터 점검해야 하는 것인가. ulimit -a core file size (blocks, -c ) 0 stack size (kbytes, -s) 8192 여기서 스택사이즈가 너무 작게 잡혀 있을 경우 내부 변수를 선언해 나가다가 한계를 넘어가면 메모리 오류가 나면서 프로그램이 죽게 된다. tmax 계정의 .bash_profile 에 다음과 같이 스택사이즈를 늘려 준 후 재접속하고 tmax를 재기동 하면 오류 없이 거래가 통과되었다. ulimit -c 99999999 ulimit -s 143360 Linux 3.10.0 x86_64 Re..

리눅스 민트 설치

바야흐로 리눅스의 시대가 도래하고 있다. 예전에는 리눅스 설치하기도 어려웠을 뿐 아니라 사용하기에도 상당히 낯설었던 기억이 있다. 그래서 힘들게 리눅스를 설치하고도 그 다음에 뭐 할 만한 것이 없어서 삭제했던 기억이 많다. 그러나 이제는 많은 종류의 PC용 리눅스가 개발되어 보급되고 있다. 사용자 인터페이스면에서도 상당한 진보가 되어서 초보자도 쉽게 설치하고 가정용, 업무용으로도 사용할 수 있는 수준으로 발전되었다. 집에서 굴러 다니는 많은 노트북 PC가 있다. 요즘 아이들은 이런 노트북은 게임이 안 돌아간다는 이유 때문에 거들떠도 안 본다. 사양이 떨어지는 이런 노후 컴퓨터에 리눅스를 깐다면 아직도 충분히 사용할 수 있는 장비가 될 수 있다. 그래서 리눅스 설치를 시도하고 그 경험을 기록해 놓는다. |..

우분투 기본언어 설정

처음 우분투를 설치할 때 한국어를 선택하고 설치를 했다. 그러다가 영어로 바꾸고 싶어졌다. 마치 스마트폰에서 언어설정을 한국어로 바꿨다가 영어로 바꾸는 것은 쉽게 되는 것처럼 리눅스에서도 가능할 것이라는 생각에 인터넷을 검색해 보니 방법이 있었다. System Settings -> Language Support 메뉴를 선택한다. 여기서 Language 탭에서 Language for menus and windows 에서 English 를 맨 앞으로 옮겨 놓으면 된다. 마우스로 찍어서 맨위 위치에 떨어트리면 된다.(Drag and Drop) 그리고 리눅스를 재부팅(Restart) 하면 메뉴가 모두 영어로 바뀐 것을 알 수 있다. 폴더명도 "다운로드" 는 Downloads 와 같이 영어로 자동으로 바뀐다. 하..

우분투에서 한글/Eng 토글키 설정

오래된 컴퓨터가 하나 있어서 윈도우를 깔려고 하다가 우분투로 설치했다. 오른쪽 Alt 키를 누를 때 한글 입력 모드로 토글 되도록 설정하고 싶었다. 현재로는 Shift-Space 를 누를 때 토글되는데 습관적으로 오른쪽 Alt 키를 눌러서 토글을 하려고 한다. 문제는 오른쪽 Alt 키를 누를 때 우분투의 검색 메뉴가 떠서 불편하였다. 인터넷을 찾아 보니 System Setting -> Keyboard 메뉴에서 설정할 수 있다는 것을 보고 시도 해 봤다. 결국 성공했다. 다음과 같이 세팅을 했더니 잘 된다. 이제 리눅스가 모든면에서 윈도우에 못지 않도록 사용이 편해져서 불편함을 모를 정도로 발전했다고 생각된다. [우분투 16.04]

ubuntu Linux 에서 root passwd 변경

우분투 리눅스에서 루트의 비밀번호를 설정해 줄 수 있다. 콘솔에서 다음과 같이 한다. [jin@~]$ sudo passwd rootEnter new UNIX password: Retype new UNIX password: passwd: password updated successfully[jin@~]$ [jin@~]$ [jin@~]$ su - rootPassword: root@jin-desktop:~# root@jin-desktop:~# 루트는 터미널로는 로그인 할 수 없다. 일단 다른 일반 계정으로 로그인 한 후에 su 명령으로 재로그인 해야 한다.

반응형