리눅스2024. 1. 22. 08:53

 

 

ASUS 팅커보드S(Tinkerboard S)에 암비안(armbian) 리눅스를 설치해서 사용중인데, 16GB eMMC만 사용하다가 좀 더 여유 있게 자료를 저장할 수 있도록 최근에 128GB 마이크로sd 카드를 추가해 주었다. 팅커보드에 마이크로sd 카드 슬롯이 기본으로 제공된다.

마이크로sd 카드를 장착하고 아래와 같이 작업해서 연결. 모니터가 연결되어 있지 않기 때문에 ssh롤 접속하여 명령어 기반으로 진행했다. 

우선 lsblk 명령으로 새로 추가한 저장장치의 파티션 식별자를 확인했다. lsblk에 대한 기본적인 내용은 이전 게시물을 참고하자. 여기로

# 저장장치 목록 확인
lsblk

출력을 보니, 새로 장착한 마이크로sd 카드는 /dev/mmcblk0p1에 대응되어 있다. 이제 mount 명령으로 연결(마운트)해 주면 된다.

# 마운트하기 위한 디렉토리 만들기
cd ~/
mkdir micro_sd

# /dev/mmcblk0p1 파티션을 micro_sd 디렉토리에 마운트
sudo mount /dev/mmcblk0p1 micro_sd

일단 여기까지는 좋았는데, 한가지 문제가 있었다. 루트(root) 계정으로만 쓰기가 가능하고 일반 사용자 계정으로는 쓰기가 불가능했다. 하위에 디렉토리는 만들고 chown 또는 chmod 명령으로 일반 사용자에게 쓰기 권한을 주도록 설정을 변경해 보려고 했으나 권한이 없다는 메시지만 나왔다(operation not permitted).

인터넷을 한참 헤매다가 원인을 찾았다. 마이크로sd 카드의 파일 시스템이 exFAT이었기 때문에 chown과 chmod 명령이 동작하지 않았던 모양이다. exFAT 형식에서는 여러 사용자에 대해 별도의 권한을 부여하지 못하기 때문이다. 루트 권한으로 마운트를 했으니, 쓰기 권한도 루트만 가능한 상황. 이 문제를 해결하려면 ext4 형식으로 파티션을 포맷해야 한다.

우선 마이크로sd 카드가 마운트되어 있는 ~/micro_sd 디렉토리의 연결을 해제했다.

sudo umount ~/micro_sd

마이크로sd 카드의 파티션이 /dev/mmcblk0p1이므로 아래와 같이 포맷을 진행.

# ext4 형식으로 포맷
sudo mkfs -t ext4 /dev/mmcblk0p1

# 마운트
sudo mount /dev/mmcblk0p1 ~/micro_sd

이제 정상적으로 사용 가능.

 

728x90
Posted by 반달가면
리눅스2024. 1. 19. 08:34

리눅스에서 명령어로 usb 포트에 연결된 저장장치(usb 메모리, 외장 HDD/SSD)를 제거하는 방법이다. 일단 df 명령으로 제거할 대상을 확인하자. df에 대한 기본적인 내용은 여기에.

df

예를 들어 대상이 /dev/sdb1이라고 하면 아래와 같이 제거한다. 우선 마운트된 것을 해제하자.

udisksctl unmount -b /dev/sdb1

저장장치의 전원을 끈다.

udisksctl power-off -b /dev/sdb1

이제 저장장치를 usb 포트에서 분리하면 된다.

728x90
Posted by 반달가면
IT_잡담2024. 1. 16. 13:52

 

 

 

 

 

원문 기사는 여기로 

IT 전문 인터넷 언론 the Register의 기사다. 주요 내용을 정리해 보자면 대략 아래와 같다.

작년에 오픈AI(OpenAI)의 GPT-4 언어 모델이 변호사 시험(Bar exam)을 통과할 수 있다고 해서 화제가 된 적이 있었다. 그러나 최근 연구에 의하면 대형 언어 모델(LLM, Large Language Model)이 변호사를 대체하기는 커녕 보조수단으로 활용하는 것도 어려운 것으로 나타났다. 

가장 큰 문제는 AI 언어 모델이 종종 가짜 정보를 지어낸다는 것이다. 사실에 기반한 증거를 다루는 재판에서는 치명적이다. 예일(Yale)과 스탠포드(Stanford) 대학 연구진이 유명한 대형 언어 모델들의 환각(hallucination) 현상을 분석한 바에 의하면, 종종 적합한 법률 정보를 제공하지 못하거나 법률를 정확하게 이해하지 못하고 있음이 드러났다. 

챗GPT(ChatGPT) 무료 버전의 기반이 되는 GPT-3.5의 경우 환각 비율이 무려 69%에 달했다. 구글(Google)의 바드(Bard) 챗봇에 사용되었던 PaLM-2는 더 심해서 72%이고, 메타(Meta)에서 공개한 Llama 2는 88%였다. 

특정 사건이 어느 법원에 배정되어 있는지 조회하는 등 간단한 작업에 대해서는 상대적으로 더 정확한 답변을 할 수 있지만, 그 어떤 법조인보다 많은 양의 법률 문서를 동원해서 학습을 할 수 있음에도 불구하고, 법률을 이해하고 적절한 법률적 주장을 형성하지는 못했다. 

AI가 코딩과 수학에 관한 추론에 대해서는 상당한 발전을 보여주었으나, 법률에서의 추론은 상황이 다르다. 변호사들은 이전 판례를 바탕으로 현재 사건과의 유사성을 파악하고 이를 바탕으로 추론하고 주장을 전개한다. 

AI는 단순한 요청에서도 실수하는 경우가 나타났다. 특정 인물의 이름이나 변론에서 인용된 특정 사건이 실제 존재하는지 파악하기 위해 AI에게 질문했을 경우 GPT-3.5, PaLM-2, Llama 2 모두 가짜 정보를 생성해서 제공할 수 있음이 드러났다. 

AI 언어 모델이 사용자의 요청이나 주장에 되도록 동조하는 방향으로 답변하도록 동작한다는 점도 문제가 된다. 사용자의 전제에 문제가 있는지 확인하는 것이 아니라 사용자가 제시한 전제가 옳다고 가정하고 사용자와 동의하는 방향의 답변을 생성하기 때문이다. 

실제로 변호사가 챗GPT를 법률 문서 작성에 활용했다가 존재하지도 않는 사건을 인용한 것으로 드러나 징계를 받은 사례도 있다. 

원문 기사에는 좀 더 많은 내용이 있지만, 핵심은 대충 이 정도인듯. 사소한 것이나 중요한 것이나 관계 없이 법원에 제출하는 문서를 작성할 때 AI를 활용하는 것은 상당히 위험할 수 있다. 사실 법률 문제가 아닌 사안에 대해서도 AI 언어 모델이 거짓말을 할 수 있다는 점은 이미 드러나 있기 때문에(이전 게시물을 참고하자. 여기로) 증거를 기반으로 하는 재판에서는 당연히 사용하지 않는 것이 좋을 것이다. 적어도 현재 기술 수준으로는 AI가 법조인을 대체하는 것은 불가능해 보인다. 

원문 기사에서 인용한 연구 논문은 아래의 링크에 있다. 

Matthew Dahl, Varun Magesh, Mirac Suzgun, and Daniel E. Ho, Large Legal Fictions: Profiling Legal Hallucinations in Large Language Models

728x90
Posted by 반달가면
괜찮은_프리웨어2024. 1. 11. 08:49

 

tshark에서 화면에 출력할 형식을 지정하는 방법이다. 예를 들어 test.pcap 파일에 대해 작업을 할 때 아래와 같이 입력하면 각 패킷에 대하여 IP주소쌍 등 몇가지 정보를 확인할 수 있다.

tshark -r test.pcap

tshark의 GUI 버전인 와이어샤크(wireshark)에서 파일을 열었을 때 화면에 보이는 형식이 있듯이, tshark에도 기본 표시 형식이 있는데 이것을 바꾸는 것이다. 예를 들어 발신 IP주소, 수신 IP주소, 프로토콜, 패킷 길이 형식으로 출력하고 싶다면 아래와 같이 할 수 있다.

# 발신 IP주소(%us), 수신 IP주소(%ud), 프로토콜(%p), 패킷 길이(%L) 출력
tshark -o 'gui.column.format:"src","%us","dst","%ud","proto","%p","length","%L"' -r test.pcap
  10.0.2.15 → 192.168.3.13 TCP 54
  ...
 
"%" 기호로 시작되는 항목이 표시할 값이다. 예를 들어 %p는 프로토콜 정보를 나타낸다. 위의 예시에서 "src", "dst" 등 컬럼 이름은 실제로 출력되진 않으므로 크게 의미는 없고 적당히 지정하면 되겠다.

표시할 수 있는 값들의 종류는 아래의 명령으로 확인할 수 있다.

tshark -G column-formats

위의 예시에서 발신 IP주소와 수신 IP주소 사이에 있는 화살표를 제거하고 각 항목을 공백으로 구분하고자 한다면 awk와 조합해서 아래와 같이 할 수도 있겠다.

tshark -o 'gui.column.format:"src","%us","dst","%ud","proto","%p","length","%L"' -r test.pcap | awk '{ print $1 " " $3 " " $4 " " $5 }'
10.0.2.15 192.168.3.13 TCP 54
...

이와는 별도로 패킷의 특정 정보(field)를 골라서 출력하는 방법도 있는데, 관련 내용은 이전 게시물을 참고하자. 여기로


awk를 활용하면 좀 더 복잡하지만 재미 있는 작업을 해 볼 수도 있다. 위의 예시에서 같은 IP주소쌍과 프로토콜 종류에 따른 패킷 길이의 합(즉, 통신량)을 구해보자. 이와 비슷한 방식의 awk 활용 예시는 여기에

우선 위와 같은 형식으로 출력하여 test.pcap.temp 파일에 저장한다.

tshark -o 'gui.column.format:"src","%us","dst","%ud","proto","%p","length","%L"' -r test.pcap > test.pcap.temp

test.pcap.temp 파일의 내용은 아래와 같을 것이다.

cat test.pcap.temp
10.0.2.15 192.168.3.13 TCP 54
...

이제 awk에서 "[발신 IP주소] [수신IP주소] [프로토콜]" 형식을 인덱스로 사용하는 배열을 만들어서(awk의 배열은 문자열도 인덱스로 사용할 수 있으므로) 같은 인덱스에 대해 패킷 길이값을 더한다. 그리고 맨 마지막에 그 값을 출력해 주면 되겠다.

cat test.pkt.txt | awk '{x[$1" "$2" "$3]+=$4} END {for (i in x) print i " " x[i]}'
10.0.2.15 192.168.3.13 TCP 162
...

728x90
Posted by 반달가면