removetab.py


한 디렉토리 안에 있는 모든 데이터파일을 읽어서 중복된 tab을 없애고 다른 확장자로 저장하는 코드. python을 완전 잘하는 편이 아니어서 그냥 기초적인 방법으로 주욱주욱 만들었음...


import glob


Flist = glob.glob('*.txt')


OldExt = 'txt'

NewExt = 'dat'


for i in range(len(Flist)):

#Flist is str class !!!

fr = open(Flist[i], 'r')

fwriteName = Flist[i].replace(OldExt, NewExt)

fw = open(fwriteName, 'a')

print(Flist[i], "to", fwriteName)

ContentL = fr.readlines()

for j in range(len(ContentL)):

rowL = ContentL[j]

rowL = rowL.split('\t')

TabCnt = rowL.count('')

for k in range(TabCnt):

rowL.remove('')

#Change list to str with \t delimiter

rowStr = "\t".join(rowL)

fw.write(rowStr)


Class가 list인지 str인지에 따라 쓰이는 함수(method)가 다르기 때문에 꽤나 헷갈린다. 자주 다루지 않다보니 벌어지는일! 아무튼 이렇게 하면 중복된 tab을 없앨 수 있다. 


주의!!

용량이 큰 데이터파일들의 tab을 지워야 할 경우 이 프로그램은 컴터를 넉다운시킬수 있다. 왜냐면 readlines()로 그냥 한번에 주욱 읽어서 리스트로 저장하기 떄문이다... 메모리관리는 전혀 신경쓰지 않았는데 지금 다루는 데이터파일들 용량이 작은편이어서이다.ㅋㅋㅋ



접속하려는 컴퓨터의 운영체제가 바뀌면 ssh의 key가 잘못되었다는 메세지와 함께 ssh접속이 되지 않는다.

사실 컴터가 뱉어내는 설명을 자세히 보면 힌트가 있는데 별건 아니고...


ssh_keygen -R 123.145.145.335(ip 또는 domain name)


이렇게 하면 ssh key를 다시 생성하고 접속이 가능해진다. man ssh_keygen을 입력해 설명을 보면 다음과 같이 나온다.


진짜 별거 아니네...-.-


     -R hostname

             Removes all keys belonging to hostname from a known_hosts file.

             This option is useful to delete hashed hosts (see the -H option

             above).


유저들에게 sudo 권한을 주고 싶다면 /etc/sudoers 에서 설정을 바꾸어야한다. 


그런데 이게 퍼미션때문에 vi로 수정이 안된다. 열리긴 하는데 읽기전용...


sudo visudo를 입력해 수정해보자. (nano editor가 열린다!!ㅋㅋ)

sudoers에서 수정할 부분은 아래와 같다.


#User privilege specification 에서 

id    ALL=(ALL:ALL) ALL 을 추가해준다.



:ㅂ  (이건!!! vim 의 습관이닷!!!)


'Study > Computer' 카테고리의 다른 글

python으로 중복된 tab없애기  (0) 2012.10.03
ssh 접속이 안될때  (0) 2012.09.21
Linux Backup 때 챙기는 파일들  (0) 2012.09.20
Linux에서 Memory 정보 확인하기  (0) 2012.07.31
Linux에서 Valgrind 사용하기  (0) 2011.08.11

/etc/passwd

/etc/shadow

/etc/group


이 세 파일을 백업해두어야 유저들의 정보를 살릴 수 있다.


세 파일들의 구조는, 


1. passwd

id : x : 1000 : 1001 : ,,, : /home/id : /bin/bash


id는 유저의 id이고 x는 비밀번호를 shadow에 암호화하여 저장했다는 뜻이다. 뒤에 숫자가 2개 보이는데 첫번째 숫자는 유저의 UID이다. 뒤의 숫자는 GID인데 Group을 나타낸다. 뒤에 ,,, 는 사용자 정보인데 입력하지 않으면 저렇게 보인다. 뒤는 홈의 위치와 bash의 위치이다.


2. group

id : x : 1001 : 


위와 마찬가지인데 숫자는 각 group ID를 나타낸다. GID가 겹치게 되면 같은 Group으로 볼 수 있는데 보통 리눅스에서 유저들은 각자 달은 GID를 가지고 있다. 어떻게 GID를 운영하는게 좋은지 공부해봐야 알듯.


3. shadow

비밀번호가 암호화되어 저장되어 있다. 퍼미션 때문에 sudo 권한으로 접근해야 한다.



'Study > Computer' 카테고리의 다른 글

ssh 접속이 안될때  (0) 2012.09.21
Ubuntu superuser 추가하기  (0) 2012.09.20
Linux에서 Memory 정보 확인하기  (0) 2012.07.31
Linux에서 Valgrind 사용하기  (0) 2011.08.11
MS-SQL to MySQL  (0) 2011.02.26

Windows에서는 CPU-Z라는 강력한 프로그램이 있어서 컴퓨터의 많은 하드웨어의 정보를 케이스를 열지 않고도 확인할 수 있다. (Download cpu-z)

그러면 Linux는?? 윈도우보다 하드웨어의 제어가 편할 것 같이 생긴 괴물에서는 어떻게 정보를 확인하나?


cat /proc/meminfo 이렇게 입력하면 역시 RAM의 정보가 뜨긴 하지만 하드웨어에서 필요한 정보가 아니다. 만약 RAM의 클럭속도 등의 하드웨어 정보가 필요하다면, 


  • $ sudo dmidecode --type 17 

이렇게 입력하시라. (위에 하이픈이 2개입니다...) 그럼 

# dmidecode 2.9
SMBIOS 2.6 present.

Handle 0x002D, DMI type 17, 28 bytes
Memory Device
Array Handle: 0x002A
Error Information Handle: No Error
Total Width: 64 bits
Data Width: 64 bits
Size: 2048 MB
Form Factor: DIMM
Set: None
Locator: DIMM0
Bank Locator: BANK0
Type: <OUT OF SPEC>
Type Detail: Synchronous
Speed: 1333 MHz (0.8 ns)
Manufacturer: Samsung      
Serial Number: 0050014
Asset Tag: AssetTagNum0
Part Number: M378B5773CH0-CH9  


이런 정보들이 나온다. 여기서 볼 내용은 BOLD로 되어있다. 필요하다면, 

  • $ sudo dmidecode --type 17 | grep Speed
이렇게 따로 grep을 통해 뽑아 볼 수도 있다.

참고 사이트 : 


'Study > Computer' 카테고리의 다른 글

Ubuntu superuser 추가하기  (0) 2012.09.20
Linux Backup 때 챙기는 파일들  (0) 2012.09.20
Linux에서 Valgrind 사용하기  (0) 2011.08.11
MS-SQL to MySQL  (0) 2011.02.26
도스에서 작업한 txt파일 리눅스에서 편집하기  (2) 2011.01.03
 gcc로 컴파일해서 열심히 프로그램을 돌리다보면 Segmentation Fault가 나는 경우가 있다. 
보통 배열에 접근할 때나 포인터를 넘길 때 잘못하면 이런 문제가 생기는데 보통 for문 등 루프에서 배열에 접근할 때의 조건을 잘 보면 해결된다. 그런데도... Segmentation Fault가 해결이 안된다면 Valgrind를 사용해보자.

우분투의 경우 apt-get install valgrind 를 이용해 설치하면 되며 이외에는 valgrind.org에서 다운로드 받아 설치하면 될 것 같다..
(우분투만 써봐서요...ㅎㅎ)

설치 후 컴파일에서 옵션을 주어야 하는데 -g를 꼭 넣어줘야 한다.

Valgrind의 옵션은 꽤 다양해서 Valgrind --help를 입력해 옵션의 설명을 보는 것도 유용하다. 그래도... 귀찮다면

valgrind --leak-check=full --log-file=memcheck.txt -v --error-limit=no ./abc.out arg1 arg2
옵션은 버전마다 다를 수 있으므로 확인해서 맞는 옵션을 쓰자.

프로그램이 실행되면 로그가 memcheck.txt에 남게 되는데 이를 열어서 보면.... 꽤 많은 기록이 쏟아져 나온다.
우선 로그의 좌측 숫자는 프로그램의 PID이며 에러의 경우 == PID == 로 나타난다. -- PID --라면 이는 일반적인 정보이다.

다음의 블로그에서 정보를 얻었다.
http://adnoctum.tistory.com/555
 
도스에서 작업한 txt파일을 리눅스에서 불러와 작업하면 상당히 애로사항이 많게 됩니다. 

파일을 편집하다 보면 뒤에 ^M이 생기는 것도 볼 수 있구요... -.-
이외에도 윈도우에서는 UTF-8로 기본 저장하지 않기 때문에 가끔 문제를 일으키기도 합니다.

하지만 리눅스에선 간단히 파일의 인코딩과 속성을 바꿀 수 있어요.

우선 파일의 속성을 살펴보기 위해 다음과 같이 입력합니다.
file test.txt
만약 도스에서 편집된 파일이면 다음과 같이 나옵니다.

test.txt: ISO-8859 text, with CRLF line terminators

이제 파일을 변환해주기 위해 다음과 같이 명령어를 입력합니다. 
dos2unix test.txt
만약 dos2unix 가 설치되어 있지 않다면.... 
sudo apt-get install dos2unix 로 설치해주세요. ^^ 이제 file test.txt 를 다시 입력해 상태를 확입합니다.

test.txt: ISO-8859 text

이제 인코딩을 바꾸어줄 순서인데요. iconv 라는 명령어와 recode 라는 명령어 두개가 있습니다. recode의 경우 *.txt를 지원해서 참 편리하지만... 이상하게도 제가 가지고 있던 파일에선 UTF-8로 변환시 한글이 왕창 깨지더군요..ㅠㅠ 저는 iconv로 변환했을 때 한글이 깨지지 않았습니다. 

iconv -f EUC-KR -t UTF-8 test.txt > test.txt1

위와 같이 입력해주는데 처음에는 현재 인코딩을, 두번째에는 원하는 인코딩을 쓰시면 됩니다. *.txt를 지원하지 않기 때문에 배치파일을 만들어서 쓰시거나 노가다를 좀 해주시면 됩니다... (라고 무책임하게 말하기ㅡ.ㅡㅋㅋ)

다시 file 명령어를 이용해 속성을 확인해보면, 

test.txt: UTF-8 Unicode text

그리고 vi를 이용해 한글이 깨졌는지 확인해보면...! 깨지지 않았죠? (전 안깨졌어요...ㅋ)

많은 파일을 쉽게 변환하는 팁을 알려드리면... 결과파일의 파일이름을 쓸 때 확장자를 조금만 바꾸어주세요. 우분투의 경우 rename 이라는 명령어(별도로 설치하셔야합니다.)를 이용해 간단히 바꿀 수 있어요. 

참고로 recode로 인코딩을 바꾸는 방법은 아래와 같습니다.

 recode -f EUC-KR *.txt

자세한 옵션설명은 구글에서 검색해보세요. ^^

'Study > Computer' 카테고리의 다른 글

Linux에서 Memory 정보 확인하기  (0) 2012.07.31
Linux에서 Valgrind 사용하기  (0) 2011.08.11
MS-SQL to MySQL  (0) 2011.02.26
프랙탈 그림 그리기 (Z^3-1=0)  (0) 2010.04.19
윈도우에서 gcc를 쓸 수 있다?  (2) 2010.01.05
전산물리 숙제로 프랙탈을 그렸습니다. 음...ㅋㅋ 방법은 다음과 같습니다.

복소평면에서 Newton's Method를 이용해 Z^3-1=0의 해를 찾는 건데요. 임의의 점(x,y)에서 뉴턴 메서드를 사용해 해를 찾을 때 세가지 해 중 한가지 해를 찾게 됩니다. 물론 복소평면에서 말이지요. 세가지 해를 각각 R, G, B로 점을 정해놓고 복소평면의 구간의 점들에 대해 모두 해를 찾아줍니다.

그럼 프랙탈 모양이 나온다고 합니다. 물론 메스메티카나 매트랩으로 그리는 방법은 찾기가 쉬우니... 그리고 그리기도 쉽죠? ㅋㅋ(그러나 전 안그려봤음...)

전산물리 숙제이기에 C로 만들어 보았습니다.

코딩하기 전에 복소평면을 실평면에서 그릴 수 있게 허수부와 실수부를 나누는 작업도 해야 합니다. 아래에 뉴턴 메서드에 맞게 계산한 결과가 있습니다.

이제 코딩을 열라 하면 됩니다. 제가 고치고 고쳐서 만든 프로그램은 다음과 같습니다.

./fractal.out x1 y1 x2 y2

이렇게 순서대로 인수를 입력합니다. 그럼 (x1, y1)에서부터 (x2, y2)까지의 범위에서 적절한 해상도로 점을 찍어가며 계산합니다. 이렇게 입력하고 난 뒤에는 di, 즉 해상도가 나옵니다. 

그리고 데이터파일 3개에 각각의 근에 해당하는 좌표들을 저장합니다.

여기서 문제가 생기는데.... 허수부가 0이고 실수가 1인 해의 처리입니다. 해를 코드에서 판별할 때 허수부가 0인지 0보다 큰지 또는 작은지로 판단하는데 1의 근에서 허수부가 정확한 0이 아니라 0.00000000001 이런 값을 가질 수도 있더군요.. 컴퓨터로 계산하다보니 그런 것 같습니다... 그래서 작은 범위를 주어 0 근처의 값을 가지면 무조건 0으로 분기시킵니다.

이외에는 코드를 차근차근 보면 이해하기 쉽습니다. 그림은 Gnuplot으로 그렸습니다.

코드를 보시려면 아래를 눌러주세요.


프로그램을 만들고 돌려서 점을 찍으면... 두둥!! (데이터 파일 용량이... 메가 단위네요.. 쩔ㅋㅋ)


규칙적으로 점을 찍어서 plot해보니 하얀 줄무늬가 나오더라구요.. 에이...ㅋㅋ
구글에서 찾아보니 이런 그림을 Basins of attraction이라고 하더군요. 이게 무엇인지는 나중에 공부하게 되면 올려야지....

이제 전공을 위해서 C를 열심히 공부해야 할 때가 왔습니다.. 두둥!

 

그래서 C를 위한 컴퓨팅 환경을 만들기 시작했어요.

 

그냥 빌게이츠 아저씨의 Visual Studio 6.0을 깔아서 쓰려고 했습니다. 그런데... 왠지 뽀대도 안나고 gcc 컴파일러를 꼭 써보고 싶다는 욕구가 들더라구요.. 대부분 연구실에서 리눅스를 쓰기도 하구요..

 

근데 리눅스를 써서 프로그래밍을 배우기엔... 너무 시간이 벅찬 관계로 윈도우에서 gcc를 돌리는 방법을 찾았습니다. 그러니 MinGW라는 프로그램이 나오더라구요. ㅋㅋ 물론! Linux + gcc 조합에 비해선 부족하다고 하지만 입문엔 이만한 툴도 없을까 싶어서 낼름 설치했습니다.

 

그리고 IDE(뭐 대충... 프로그래밍을 편하게 해주는 나모웹에디터 같은 존재라네요.)로는 인터넷을 뒤지다가 SUN의 이클립스(Ecliplse)를 쓰기로 했습니다.

 

장장 한시간 반동안 삽질해서 간신히 성공했네요...ㅋㅋ

 

첨에 에러가 계속 떠서 당황했는데 알고보니... 저장하고 컴파일하면 되는 것이었습니다. ㅡ.ㅡ

저장안하고 컴파일하면 에러나네요 ㅋㅋㅋ

  

 



 


방법이야 구글링을 하거나 네이버에 묻거나 하면 다 나오지만... 간단히 저도 메모를 합니다.

1. 일단 MinGW 윈도우 버전을 다운로드 받는다. (http://sourceforge.net/projects/mingw/files/)

 - 그냥 녹색 버튼(Download now!)를 클릭했다.


2. 실행하면 압축파일 엄청 튀어나오고... install을 눌러서 설치. (옵션은... 모조리 설치했던 듯...)


3.MinGW가 설치된 폴더 안에서  mingw32-make.exe 파일을 찾아 make.exe파일로 이름만 바꿈.


4. 그 다음 배치파일(글 아래 주소 참고)을 만들어서 실행. (한번만 했어요.. 이게 뭐하는건지 이해보단 실천먼저 해서...ㅋ)


6. http://java.sun.com에 가서 JRE(java runtime environment)또는 JDK를 설치. 

(전 다운로드 받는데 느려서... 가벼운 JRE를 설치했습니다.)


7. http://www.eclipse.org/downloads/에 가서 Eclipse IDE for C/C++을 다운로드 받아서 설치한다.


8.  끝! (프로젝트를 만들고 코딩한 다음에 꼭 저장하고 빌드할 것! 안그럼 에러를 뱉어냄...ㅠ)


자세한 문서는 KLDP문서를 참고하세요. (http://kldp.org/node/48962)

이 글을 천문노트에도 같이 올렸습니다. 코멘트가 궁금하시면 클릭


+ Recent posts