IT 프로그래밍/오픈소스소프트웨어

리눅스 정리

기술1 2024. 10. 20. 19:52
반응형

chmod 명령어에 관한 정리

chmod u=rwx, a=rx 이런 식으로 명령이 주어졌을 때

 

change mode의 약자가 chmod입니다. 파일이나 디렉토리의 접근 권한을 변경하는 명령어로 

 

chmod u=rwx,a=rx foo.txt는 foo.txt 권한을 변경하는 명령어입니다.

  • u = rwx : 파일 소유자에게 읽기, 쓰기, 실행권한을 모두 부여하는 것을 의미합니다.
  • a = rwx : 이 경우 모든 사용자(소유자, group, other) 모두에게 읽기, 쓰기, 실행을 모두 부여함을 의미합니다.

rwx 는 111로  7로 변환됩니다. 

rx의 경우 5로 변환됩니다.

 

리눅스의 파일 권한

리눅스에서 파일 권한은 파일의 앞에 drwxr-x--x 이런 방식으로 나타납니다. 이 경우에 소유자는 rwx, 그룹은 r-x, 다른 사용자는 --x의 권한을 가진다는 것을 뜻합니다.

 

mkdir 명령어

새로운 디렉토리를 만드는 명령어입니다. 디렉토리가 만들어지면 기본적으로 해당 디렉토리에 권한이 부여됩니다. 이 권한은 시스템 설정상 다를 수 있지만 기본적으로 소유자, 그룹, 기타사용자에 대한 권한이 설정됩니다.

 

umask

파일이나 디렉토리가 생성될 때, 기본 권한에서 어떤 권한을 제외할지를 설정하는 값입니다. 

 

만약 umask에서 0026이 사용되었다고 가정을 해봅시다. 그럴 경우 0026은 맨 앞의 0은 신경안쓰셔도 되고 그 다음 0은 user, 2는 group, 6은 other의 권한 제외 목록입니다. 

 

user  :  0 -> 000 ->  ---

group : 2 -> 010 - > -w-  

other  : 6 -> 110 -> rw-

여기서 주의해야 할 점은 해당 값을 제외해줘야 한다는 것입니다. 즉 그룹에서는 쓰기를 제외해야하며 기타 사용자는 읽기와 쓰기를 제외해야 하는 것입니다. 

 

drwxr-x--x

여기에서 ----w-rw- 여기 적힌 값을 제거해준다면 drwxr-x--x로 권한이 됩니다.  이는 겹치지 않아 다행히 권한이 바뀌지 않은 것입니다.

 

오픈소스 소프트웨어 개념정리

오슨소스소프트웨어에 free의 의미는 free speech와 free beer로 볼 수 있습니다. 여기서 자유는 무료를 속하기 때문에 이는 비용이 없는 자유로운 사용을 의미합니다.

 

빌게이츠는 이런 소프트웨어 복제가 지적 재산이므로 복제 및 배포에 제한해야한다고 주장을 했습니다. 리눅스는 이런 오픈소스소프트웨어의 대표주자격이며 리눅스는 GPL 라이선스를 사용합니다. 

 

MIT 라이선스 같은 것도 소스코드를 공개할 의무가 없으며 LGPL또한 소스코드를 공개하지 않아도 됩니다.

 

사용자가 명령어를 입력하면 이를 해석하고 실행하는 프로그램을 쉘입니다. 쉘은 운영체제와 사용자 간의 인터페이스 역할을 하며, 사용자가 입력한 명령어를 처리하고 그 결과를 출력하는 역할을 합니다. Linux에서는 기본적으로 Bash와 같은 셀이 존재합니다.

 

GNU GPL은 사용자가 소ㅍ트웨어를 수정하거나 배포할 때 소스코드를 공개해야 하는 라이선스입니다.

 

GNU LGPL은 GPL보다 덜 엄격하지만 2차 저작물에 대해서는 공개 의무가 존재합니다. 

 

BSD 라이선스는 매우 자유로운 오픈소스 라이선스로 소프트웨어를 자유롭게 수정하고 배포할 수 있습니다. 원저작자는 책임 부인 조항이 있어 소프트웨어 사용 중 발생한 손해에 대해 책임지지 않습니다.

 

MIT또한 소프트웨어를 거의 제한없이 사용할 수 있으며 책임 부인 조항을 포함하고 있습니다.

 

Apache 라이선스 또한 2차 저작물에 대해 소스 코드를 공개할 의무가 없습니다. 

 

명령어

/etc/passwd

이 파일은 리눅스에서 사용자 계정에 대한 정보를 저장하는 파일로 :로 구분된 형식으로 저장을 합니다. 주어진 내용은 /etc/passwd의 일부이며 사용자 foo의 정보를 포함하고 있습니다

 

echo $HOME

현재 사용자 계정의 홈 디렉토리를 출력합니다.

 

foo:x:1002:1003:A4,,8192,:/home/ung:/bin/bash

이런 식으로 ung 사용자의 홈 디렉토리는 echo $HOME 명령어를 실행하면 나오게 되며 이거의 출력값은 /home/ung이 됩니다.

 

wget

인터넷에서파일을 다운로드할 때 사용되는 명령어입니다. 

 

grep

파일에서 특정 패턴을 검색하는 명령어입니다. 예를들면 grep 'Giant' example.txt는 example.txt 파일에서 Giant가 포함된 모든 줄을 출력하는 것입니다.

 

 

 

  • wget: 인터넷에서 파일을 다운로드하는데 매우 유용한 명령어입니다. 주로 텍스트 파일, 이미지 파일 등을 다운로드하는 데 사용됩니다.
  • grep: 파일 내에서 특정 문자열이나 패턴을 찾는 명령어입니다. 정규 표현식을 사용할 수도 있어 복잡한 검색도 가능합니다.

ls | grep '[a-z][0-9]' | wc-l

이 경우 ls는 현재 디렉토리의 모든 파일을 나열합니다. [a-z][0-9]는 알파벳 소문자로 시작하고 숫자로 끝나는 파일들을 필터링 하는 것입니다. ls-l은 파일의 목록을 세부 정보와 함께 나열하는 것입니다. 

 

또한 wc-l은 파이프(|)을 통해 이전 명령어의 결과를 받아서 그 결과의 라인 수를 출력합니다.

 

명령모드

/foo

foo 문자열을 정방향으로 검색하는 것입니다.

 

:q!

현재 파일의 변경 여부와 상관없이 vi를 종료합니다.

 

:wq!

문서를 저장하고 종료합니다.

 

dd

현재 커서가 위치하는 라인을 삭제합니다.

 

$

현재 커서가 위치하는 라인의 끝으로 이동합니다.

 

ls -al

명령어는 디렉토리 내의 모든 파일과 디렉토리의 세부 정보를 출력합니다.

 

ls-l

디렉토리 내의 모든 파일을 출력합니다. 숨김파일 또한 전체 파일 목록에 포함되어 출력됩니다.

 

root

시스템 관리의 홈 디렉토리입니다. 

 

bin

binary의 약자로 실행 파일들이 위치하는 주요 디렉토리 중 하나입니다. 여기서 저장된 프로그램은 모든 사용자가 사용할 수 있는 기본적인 명령어로 실행파일을 주로 위치하는 디렉토리입니다.

 

etc

설정 파일들이 위치하는 디렉토리로 각종 시스템 및 소프트웨어의 설정 정보를 관리하는 파일이 위치합니다.

 

dev

하드웨어 장치들이 파일 형태로 나타나있습니다. 

 

h 왼쪽

j 아래

k 위쪽

l 오른쪽

 

echo 명령어

echo -e ${PATH//:/'\n'} | sort | tail -1

 

${PATH} 는 환경변수 PATH는 시스템에서 실행 파일을 찾는 경로를 담고 있습니다. 여러 경로들이 : 으로 구분되어 있습니다.

 

${PATH//:/'\n'} 여기선 / 치환을 의미하며 : 문자를 개핸문자로 바꾸라는 것입니다. 즉 PATH에 있는 경로들이 각각 새로운 줄로 표시됩니다.

 

echo -e : 이 명령어는 변환된 경로를 화면에 출력합니다. -e 옵션은 이스케이프 문자를 활성화시켜 개행 문자가 실제로 줄바꿈으로 처리되도록 합니다. 

 

| tail -1 은 마지막 줄을 출력해줍니다.

 

run.sh

for v in $@
do
  n=$(($n+$v))
done
echo $n

전달된 모든 인자를 나타내는 것으로 1 2 3 4 5로 run.sh가 있다고 가정해봅시다.

 

for v in $@은 1 2 3 4 5를 하나씩 v에 할당하며, 반복문을 수행합니다. n=$(($n+$v))는 n변수에 v를 더합니다. 여기서 n은 처음의 값이 설정되지 않으므로 기본값은 0입니다.  1부터 5까지 더해져서 15가 출력됩니다.

 

linux 종료문

shutdown + 10 명령은 10분 뒤에 시스템이 종료됩니다. shutdown + 10은 10분 후에 시스템을 종료한다는 뜻입니다.

 

shutdown now명령은 시스템을 바로 명령하는 것입니다.

 

reboot 는 시스템을 바로 재부팅합니다.

 

shutdown -k +30 명령은 30분 뒤에 종료된다는 경고메세지만 전달합니다.

 

shutdown -c 는 종료를 취소하는 것입니다.

 

find 함수 Makefile 분석

find . -name "*.py" | wc -l

find . -name "*.py": 는 find명령어는 디렉토리 및 그 하위 디렉토리에서 파일을 검색하는데 사용이 됩니다. 그리고 find 뒤에 . 은 현재 디렉토리에서 검색하겠다는 것을 의미하며 -name "*.py"는 .py로 끝나는 파일을 찾겠다는 것입니다. 

 

이후 | 를 사용하여 find 명령어의 출력 결과를 wc -l 명령어로 전달합니다.

 

wc-l은 라인 수를 세는 명령어로 이 경우 .py의 파일 개수를 셉니다.

 

Makefile은 각 파일의 의존성을 설정하고 파일이 변경되었을 때 필요한 작업을 자동으로 처리해줍니다.

 

while [ $path ]; do
  path=${path%:*}
  echo $path
done

$PATH 는 실행 파일을 찾는 경로들이 저장된 환경변수입니다. 이는 :로 구분되어 있습니다.

 

/home/cam/bin:/usr/local/bin:/usr/bin:/bin

만약 파일이 이런 형식일 때 ${PATH%:*}는 마지막 콜론 이후 부분을 제거합니다. $PATH 변수에서 마지막 경로를 제거하는 동작을 수행합니다. 

 

wc-l 은 \n을 기준으로 되기 때문에 경로가 모두 제고된 후 마지막으로 빈문자가 출력됩니다. 이 빈문자 또한 echo로 출력되기 때문에 4줄이 됩니다.

 

#ifndef, #define, #endif 매크로:

  • 이 구조는 다중 포함 방지를 위한 매크로입니다. 헤더 파일이 여러 번 포함되더라도, 실제로는 한 번만 포함되도록 보장합니다.
  • #ifndef __COMMON_H__: __COMMON_H__가 정의되지 않았을 때만 다음 코드를 포함하라는 뜻입니다.
  • #define __COMMON_H__: __COMMON_H__를 정의합니다. 이후에 이 파일이 다시 포함될 때는 이미 정의되었기 때문에 파일이 다시 포함되지 않습니다.
  • #endif: 조건부 컴파일의 끝을 나타냅니다.

extern 키워드는 다른 파일에 정의된 변수를 선언할 때 사용합니다. 이 키워드를  사용하면 변수의 정의가 다른 파일에 있다는 것을 컴파일러에게 알릴 수 있습니다. "extern char* global_stack;" 을 추가하면 global_stack을 사용할 수 있습니다. 

 

 

반응형