아미아미아미 :: '리눅스' 태그의 글 목록

매끈한 커맨드 근육을 만드는 노하우


IT

Written by 복날집 on 2023. 4. 21. 08:08

반응형

셸을 단순히 사용하는 것에서 나아가 ‘잘’ 활용할 수 있다면 더 많은 일을 쉽게 할 수 있습니다. 개발자뿐만 아니라 시스템 관리자 등 셸을 항상 사용해야 하는 사람이라면 더더욱 셸 명령을 잘 알아야 합니다. 예를 들어 한 디렉터리 안에서 내용이 같은 파일을 찾고 싶다면 어떻게 해야 할까요? 셸 명령(셸 스크립트)에 익숙하지 않다면 파이썬 등의 언어로 프로그램을 하나 짜야겠죠? 이 문제는 이번에 나온 《아트 오브 셸 원라이너 160제》의 실전 문제 109번 내용입니다.

 

귀여운 근육 야옹이

 

챗GPT에게 파이썬으로 짜라고 시키니까 29줄짜리 코드가 나옵니다. 

 

승리의 챗GPT

 

검색해보니 스택오버플로에는 더 긴 코드가 있긴 하네요(중복 파일을 찾아서 제거까지 하는 버전). https://stackoverflow.com/questions/748675/finding-duplicate-files-and-removing-them

 

Finding duplicate files and removing them

I am writing a Python program to find and remove duplicate files from a folder. I have multiple copies of mp3 files, and some other files. I am using the sh1 algorithm. How can I find these dupli...

stackoverflow.com

 

단순히 해시값 같은 파일들만 찾는 게 이렇게 어려울 필요가 있을까요? awk, find, md5sum, xargs 같은 셸 커맨드를 알고 있다면 다음과 같이 단 한 줄로 해결할 수 있습니다. 자세한 해설은 《아트 오브 셸 원라이너 160제》 394~396쪽을 참고하세요. 

 

sudo find /etc -type f | sudo xargs md5sum | awk '{a[$1]=a[$1]" "$2}END{for(k in a){print k, a[k]}}' | awk 'NF>2'

 

물론 짧은 코드가 항상 좋은 건 아닙니다. 그럼에도 코드 골프 같은 스포츠(?)가 존재하는 것처럼, 이렇게 문제를 간단하게 해결하기 위해 사고하는 행위 자체로 문제 해결 능력을 키울 수 있습니다. 그런 의미에서 하루 한 문제씩 꾸준하게 160개 문제를 풀며 커맨드 근육을 키우는 방법을 설명한 책이 바로 《아트 오브 셸 원라이너 160제》입니다. 일본의 ‘셸 장인’들이 출제한 극한 문제들이 당신을 기다리고 있습니다. 지금 도전해보세요. 

 

 

■ 미리보기(옮긴이 머리말, 베타리더 후기, 지은이 소개, 이 책에 대하여, 감사의 글, 1장 일부)

https://jpub.tistory.com/1392 jpub 제이펍

반응형
반응형

이 블로그 구독하고 있는 분은 알겠지만 제가 컴퓨터를 못 쓰는 환경에 있는데 태블릿은 사용 가능해가지고 태블릿에서 코딩하는 방법을 찾아봤습니다. 그중에서 루팅 없이 안드로이드 기기에 우분투를 실행할 수 있는 방법을 발견해서 공유하려고 합니다.

사진에서 보시듯이 터미널만 덩그러니 있는 버전이 아니라 GUI까지 다 되는 버전이고 비주얼 스튜디오 코드에서 C, C++, 러스트, 파이썬까지 실행이 됩니다.

그리고 제가 발견한 몇 가지 팁도 공유해드리겠습니다.

목차:

설치할 앱

리눅스(우분투) 설치

C / C++ 실행하기

Python 실행하기

설치할 앱

먼저 설치해야 할 앱은 다음 3개다. 다 구글 플레이스토어에 있다.

▶Andronix : 리눅스 설치하는 주소를 만들어준다.

https://play.google.com/store/apps/details?id=studio.com.techriz.andronix

▶Termux : 터미널을 실행할 수 있게 해준다.

https://play.google.com/store/apps/details?id=com.termux

▶VNC Viewer : GUI를 가능하게 해준다.

https://play.google.com/store/apps/details?id=com.realvnc.viewer.android

리눅스 (우분투) 설치

안드로닉스에 들어가면 다음과 같은 화면이 뜬다. 원하는 리눅스 배포판을 클릭한다.

나는 우분투를 선택했다.

여기서 '우분투 Moded OS를 사용해보세요' 라는 버튼이 보이는데 이건 유료 버전이다. 우분투를 더 가볍고 태블릿에서 쓰기 좋게 만들어놓은 버전이다. 총 4천원 정도를 내면 앞으로도 계속 사용할 수 있는데 내가 사용해본 경험으로는 아주 강력 추천한다. 필자는 우분투 XFCE 버전으로 진행하겠다.

여기서 설치를 누르면 다음과 같은 화면이 뜨고,

여기서 설치 글자 바로 밑의 버튼을 누르면 설치 주소가 복사된다.

이제 터뮥스 (Termux) 앱을 연다.

이 사진에 모자이크를 해놨는데 저건 사용자만을 위한 주소니까 다른 사람한테 넘겨주진 말자.

위처럼 복사된 주소를 붙여 넣고 엔터를 치면 설치가 진행된다.

설치가 완료되면 다음과 같이 글자들이 멈춰있는 화면이 뜬다.

여기서 맨 밑줄 오른쪽에 ./start-andronix.sh 가 뜨는데 이건 설치한 리눅스 배포판을 실행하기 위해서 입력해야 되는 명령어다. 버전에 따라서 명령어가 다르게 안내될 수도 있다. 이건 꼭 외워두도록 하자.

이제 이 명령어를 입력하고 엔터를 누르면 다음 화면이 뜬다.

이 화면도 리눅스 버전마다 다를 수 있다. 필자 기준에서 설명하겠다.

일단 우리가 아시아에 살고 있으니 위아래를 사용해서 'Asia' 선택해 주고 엔터를 누르면 도시 이름을 선택해야 되는데 'Seoul'을 선택했다.

그다음에는 키보드 배열을 선택하는 화면이 나왔는데 아마 자동으로 인식한 결과가 현재 선택되어 있을 것이다. (여기서는 Generic 105-key PC (intl.) ) 대체로 101키를 사용하면 호환이 된다. 다른 외부 키보드를 사용할 일이 있을 수도 있어서 나는 'Generic 101-key PC'를 선택했다.

그리고 키보드 언어 설정이 나오는데 나는 영어를 선택했다. 경험상 한국어를 깔아서 한영 키를 통해 영어와 한국어를 써본 결과 뭔가 설정이 잘 안되었는지 한국어 타이핑할 때 이상할 때가 많았다. 나는 코딩에만 사용하려고 해서 그냥 영어를 선택했다. (한국어도 사용하실 분께는 죄송합니다만, 구글에서 검색해 주시기 바랍니다.)

AltGr 키를 설정하라고 하는데 사실 사용할 일이 거의 없다. 기본 설정을 사용했다.

Compose key 라는 설정이 있던데, 이것도 영어를 자판에서 사용할 일이 없다. 그래서 No compose key 를 선택했다.

그러고 나면 또 아까의 검은 화면이 뜨면서 설정이 진행된다.

그러고 나서 다음 화면이 뜬다.

사용자 이름 설정이다. 시스템에 별로 상관없고, 마음에 드는 이름을 적으면 된다. 그다음에 풀네임 설정, 비밀번호 설정이 있다.

설정을 마치고 나면 또 다음과 같은 검은 창이 뜬다.

그러면 이제 설치가 완료된 것이다!!

Termux를 껐다 켜보자. exit 누르고 엔터를 하는 것을 두 번 하면 꺼진다.

그리고 아까 외워뒀던 시작 명령어 (나의 경우는 ./start-andronix.sh) 를 입력한다. 그리고 vncserver-start 를 입력하면 다음 창이 뜬다.

이건 화질 설정인데 원하는 설정으로 고르자. 나는 FHD를 했다. 만약 맨 밑의 커스텀 화질을 설정한다면 반드시 포트 번호는 1번으로 하자.

그러고 나서 VNC Viewer 앱을 켠다.

오른쪽 아래의 플러스 버튼을 누른다.

주소는 반드시 localhost:1 로 설정한다. 이름은 마음대로 설정해도 된다. 그리고 CREATE를 누른다.

새로 생긴 이 버튼을 누른다.

비밀번호를 입력해야 되는데 아까 설정 창에서 설정했던 비밀번호를 입력한다.. 그리고 앞으로 비밀번호를 입력하지 않아도 자동으로 되게 하기 위해 Remeber password를 입력한다.

짠! 우분투의 화면이다. 맨 아래의 왼쪽에서 두 번째 아이콘이 터미널 아이콘이다. 다음과 같이 터미널에서 apt-get update 명령어도 잘 먹고 파이썬도 실행된다.

종료하는 방법은 VNC Viewer를 닫은 다음 Termux에서 vncserver-stop을 입력한다. 그리고 1을 입력하고 엔터를 누른다. 그리고 exit를 두 번 입력해서 나간다.

추가: 한국어 안 깨지게 하기.

https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%82%98%EB%88%94%ED%8F%B0%ED%8A%B8_%EC%84%A4%EC%B9%98

이 방법을 따라한 다음에

sudo fc-cache -f -v

이 명령어를 수행하면, 폰트 캐시가 갱신되고 바로 화면에 변화가 나타날 것이다.

+팁: VNC Viewer 에서 화면 보기에서 위의 아이콘 중 i 를 누른 다음 Picture quiality 를 설정할 수 있는데 여기서 High 로 선택하면 선명하게 보인다.

여기까지가 우분투 설치 방법이지만 C/C++, 파이썬을 실행하는 방법도 공유하겠다. 리눅스를 처음 다뤄보고 설정을 직접 해보지 않은 사람도 있을거라 생각한다. 이 언어들을 실행/디버그 하기 위한 기본적인 방법까지 설명하겠다.

그리고 파이썬에도 해당되는데, gcc와 g++는 반드시 설치되어 있어야 나중에 기능 설치할 수 있으니까 아래의 build-essential 설치까지는 반드시 진행해야 된다.

C / C++

우선 터미널을 열어서 다음 명령어를 치면

gcc --version g++ --version

설치가 안 되어있기 때문에 위와 같은 문구가 뜰 것이다. gcc, g++는 C와 C++를 컴파일하기 위해서 반드시 필요한 것이기 때문에 설치해 줘야 된다. 다음 명령어를 입력해서 설치해 준다.

sudo apt-get install build-essential

그러고 나면 비밀번호를 입력하라고 뜬다. sudo 가 붙는 명령어 뜰 때마다 항상 비밀번호를 입력해 줘야 된다.

그러고 나서 글자가 여러 개 뜬 다음에 [Y/n]? 이라는 문구가 뜰 텐데 y를 입력해서 설치를 진행한다.

그리고 gdb도 설치해 줘야 된다.

sudo apt-get install gdb

설치가 완료되고 나서 gcc --version을 입력하면 버전 정보가 위와 비슷하게 뜰 것이다.

그다음은 프로그램 코드를 작성할 곳에 폴더를 만들 것이다. 그런데 얘네들이 뭔가 이상하게 해놓은 것인지 파일 관리자에서 폴더를 만들려면 이렇게 경고 문구가 뜨고 못 만들어진다. 여러 삽질을 해봤지만 그냥 다음처럼 터미널에서 폴더를 만들어줄 것이다.

mkdir 만들폴더이름 cd 이동할위치이름

이렇게 입력하면 폴더가 만들어지고 그 폴더로 이동할 수 있다.

바탕화면에서 오른쪽 아래 보이는 아이콘이 비주얼 스튜디오 코드다. 우리가 사용할 IDE다. 그걸 실행한다.

저 파란 글씨 중 Open folder를 클릭하고 방금 만든 폴더 (나의 경우 MyWorkspace)를 선택한다.

여기에 우 클릭을 한 다음에 나머지 폴더들도 추가해 준다

내가 만든 폴더 구조가

MyWorkspace

- CWorkspace

- CPPWorkspace

- PythonWorkspace

- LustWorkspace

인데 MyWorkspace 추가하면 하위 폴더가 보일 텐데 왜 굳이 하위 폴더까지 다 추가했냐면, 각각 폴더마다 간단하게 설정을 다르게 해줄 수 있게 하기 위해서다. 각 폴더마다 실행을 다르게 설정할 수 있다.

파일 관리자에서는 폴더를 못 만들었는데 여기서는 가능하다. 폴더에 우클릭을 하고 그곳에 새로운 파일이나 폴더를 만들 수 있다. 나는 CWorkspace 폴더에 test1 폴더를 만들고 그곳에 main.c를 만들었다.

왼쪽 아이콘 중 아래 아이콘이 추가 도구를 설치할 수 있는 곳이다. 여기서 C/C++랑 파이썬을 설치했다.

그리고 나서 보면 이렇게 자동완성 기능까지 잘 작동하는 모습을 볼 수 있다.

f5를 눌러서 실행해보면 다음과 같은 상태가 된다.

여기서 C++ (GDB/LLDB) 를 선택하고

gcc - Buile and debug active file 을 선택한다.

원하는 대로 결과가 잘 나온 모습이다.

위에서 설정을 해줬기 때문에 앞으로 F5 눌러서 실행할 때는 바로 실행된다.

그리고 지금 작업하고 있는 작업공간 폴더에 .vscode 라는 이름의 폴더가 생겼을 것이다. 그곳에 현재 작업공간의 하위 파일들에 대한 동작을 설정할 수 있다. 다른 공간에는 적용 안된다.

아래에서는 브레이크 포인트를 걸어봤다.

브레이크포인트가 잘 걸리고 변수들의 값까지 잘 보인다.

이제 C++ 실행하는 방법을 알아보자. 일단 다음과 같이 cpp 파일을 하나 만들었다.

그리고 왼쪽 아이콘 중 삼각형을 클릭한다.

Add Config (현재폴더명) 을 선택한다.

C++ (GDB/LLDB) 를 선택한 다음

g++ - Build and debug active file 을 선택한다.

그러면 실행이 된다.

만약 설정을 바꾸고 싶다면 .vscode 폴더의 launch.json 이나 task.json 의 내용을 수정하면 된다. 이것은 vscode 사용 방법을 구글링하면 나온다.

파이썬

파이썬을 실행하려면 간단하게 python3 를 터미널에 입력하면 된다. 추가 패키지를 설치하려면 일단 pip 이 있어야 한다.

sudo apt-get install python3-pip

그러고 나서 원하는 모듈을 설치하면 된다.

python3 -m pip install numpy

이런 식으로 말이다.

그리고 비주얼 스튜디오 코드에서도 동작을 확인해보겠다.

아까와 같이 삼각형 버튼 누르고 Add Config (파이썬 작업할 폴더명) 을 선택해 준다.

그리고 Python File 옵션을 선택한다.

실행이 잘 된 모습이다.

간혹 pip 으로 파이썬 라이브러리가 설치 안될 수도 있는데 실패한 설치를 한 번 더 시도해보면 될 때가 많다... 이유는 나도 모르겠다.

대부분 안드로이드 기기의 cpu 아키텍쳐가 arm 인데, 우리가 컴퓨터로 자주 쓰는 x86-64 와 다르다. 내 태블릿은 aarch64로 arm64에 속해있다. 지원 안하는 모듈도 간혹 가다 있는데 대부분의 유명한 라이브러리는 설치가 된다.

그리고 왜 아나콘다 그런걸 안썼냐고 물어보실 수 있는데 검색하다 찾은 arrch64용 버전은 뻑나고 그래서 안썼다... 몇가지 더 찾아봤는데 이상하게 꼬이는 일이 잦았다. 이걸로 삽질할 바에야 차라리 나중에 파이썬 이상해지면 밀고 다시 까는게 맘 편할 것 같았다.


본문 내용은 다 끝났지만 검색 유입이 잘 되도록 좀 더 써봅니다.

군대에서 코딩하는 방법은 저한테 이거밖에 없었습니다... 군대에서 코딩하는 방법이 일단 크게 1. 태블릿 사용, 2. 사이버지식정보방 컴퓨터 사용, 3. 브라우저에서 코딩. 인데 병사의 태블릿 사용이 가능한 공군에서는 1번이 제게 맞더군요. 2번은 보안 프로그램이 대부분 허락하지 않고 3번은 익숙하지 않았습니다. 1번 방법이 제가 저한테 맞는 환경을 만들어서 그 기반에서 코딩할 수 있다는 만족감을 줬습니다. PC를 사용하실 수 없는 환경에서 코딩하시려는 분께 도움이 되었으면 좋겠습니다.

끝.

반응형
반응형

우분투 리눅스 c++ 파이썬 코딩 언어 사용법 (영상)
https://youtu.be/-7jm1sL41WA

프로그래밍이 대두되는 지금 코딩교육은 필수 입니다.

반응형