Search

딥러닝 시작하기

Developer/DNN 2019. 6. 19. 02:36 Posted by JAKE_SLEEPY

<준비물>

Python 3
numpy (math)
matplotlib (graph)




Anaconda 설치 (Ubuntu 16.04 LTS)


Linux 클릭 -> python 3.7 version Download


Save File 선택 후 OK


$ bash ~/Downloads/Anaconda3-2019.03-Linux-x86_64.sh


ENTER


yes



설치가 끝나고 conda 명령어 사용을 위해 .bashrc 어쩌고 하는게 있었는데
딴짓하다보니 지나가버렸다 :(

conda 명령이 적용되지 않아서 ... 찾아보았다.

$ source ~/anaconda3/bin/activate
$ conda init

터미널 창을 보니 .bashrc를 수정했다고 한다.

터미널을 껐다가 다시 켰다.
(base) 라는 문구가 앞에 붙게된다.


$ conda config --set auto_activate_base False
$ source ~/.bashrc

이후 (base) 가 사라졌다...!

알고보니 (base) 라는게 anaconda 환경이 활성화되었다는 표시였다.



$ source ~/anaconda3/bin/activate

비활성화시킬려면

$ conda deactivate




anaconda 실행하기

$ anaconda-navigator


'Developer > DNN' 카테고리의 다른 글

Visual Studio Code 설치 (ubuntu)  (0) 2019.10.06
Anaconda 환경 관리  (0) 2019.10.05

쉘 스크립트 작성(5)

Developer/Linux 2019. 6. 18. 23:49 Posted by JAKE_SLEEPY

For 문

for var in list
do
        command set
done

list 의 값들이 차례대로 하나씩 var에 대입된다.

1st    iteration : var = list[0]
2nd  iteration : var = list[1]
3rd   iteration : var = list[2]
                ...
Nth iteration : var = list[N-1]

list의 모든 element를 참조할 때까지 계속 실행된다.


[목록에서 값을 읽기]

스크립트


결과


[목록에 추가]

스크립트


마치 string을 결합하는 느낌이 든다.
str + str !


결과



'Developer > Linux' 카테고리의 다른 글

윈도우에서 Ubuntu Bootable USB 만들기  (0) 2019.06.30
쉘 스크립트 작성(4)  (0) 2019.06.18
쉘 스크립트 작성(3)  (0) 2019.06.16
쉘 스크립트 작성(2)  (0) 2019.06.16
쉘 스크립트 작성  (0) 2019.06.16

쉘 스크립트 작성(4)

Developer/Linux 2019. 6. 18. 01:51 Posted by JAKE_SLEEPY

복수 조건

[ condition 1 ] && [ condition 2 ]
: condition 1 과 condition 2가 모두 TRUE 일때

[ condition 1 ]  | |   [ condition 2 ]
: condition 1 이 TRUE 이거나 condition 2가 TRUE 일때


스크립트


결과



이중 괄호

(( expression ))

expression 에는 수식이나 비교 표현식이 들어갈 수 있다.


!
논리 부정
~
비트 부정
**
지수화
<<
비트 왼쪽 쉬프트
>>
비트 오른쪽 쉬프트
&
비트 단위 AND
|
비트 단위 OR
&&
논리 AND
||
논리 OR
num++
후위증가
num--
후위감소
++num
전위증가
--num
전위감소

스크립트



(( expression )) 에서는 > 기호가 리다이렉트가 아닌 부등호로 인식된다.


결과





이중 대괄호

문자열 비교에 사용한다.

스크립트


결과





'Developer > Linux' 카테고리의 다른 글

윈도우에서 Ubuntu Bootable USB 만들기  (0) 2019.06.30
쉘 스크립트 작성(5)  (0) 2019.06.18
쉘 스크립트 작성(3)  (0) 2019.06.16
쉘 스크립트 작성(2)  (0) 2019.06.16
쉘 스크립트 작성  (0) 2019.06.16

쉘 스크립트 작성(3)

Developer/Linux 2019. 6. 16. 20:04 Posted by JAKE_SLEEPY
조건 실행

if [ condition ]
then
    command set
fi

대괄호 앞 뒤에는 한칸 띄어져 있어야 한다.

대괄호 안에는 조건을 적는다.

condition 에는 숫자 비교, 문자열 비교, 파일 비교를 통해 조건 생성



숫자 비교
비교식
기능
num1 -eq num2
num1 과 num2가 같은지 확인한다.
num1 -ne num2
num1 과 num2가 다른지 확인한다.
num1 -ge num2
num1이 num2 보다 크거나 같은지 확인한다.
num1 -gt num2
num1이 num2보다 큰지 확인한다.
num1 -le num2
num1이 num2보다 작거나 같은지 확인한다.
num1 -lt num2
num1이 num2보다 작은지 확인한다.
#!/bin/bash

val_1=45
val_2=36

if [ $val_1 -lt 50 ]
then
    echo "value 1 is less than 50"
else
    echo "value 2 is greater than or equal to 50"
fi

if [ $val_1 -eq $val_2 ]
then
    echo "value 1 is equal to value 2"
else
    echo "value 1 is not equal to value 2"
fi


결과







문자열 비교

비교식
기능
str1 = str2
str1이 str2와 같은지 확인한다.
str1 != str2
str1이 str2와 다른지 확인한다.
str1 < str2
str1이 str2보다 작은지 확인한다.
str1 > str2
str1이 str2보다 큰지 확인한다.
-n str
str의 길이가 0보다 큰지 확인한다.
-z str
str의 길이가 0인지 확인한다.

[ 두 문자열이 일치하는지 확인 ]




결과






[ 두 문자열의 크기 비교 ]


결과


banana??

실행 오류의 원인: 

    부등호 기호를 이스케이프 하지 않아서 리다이렉트 기호로 해석해버렸기 때문.


수정

    


결과

    




[ 데이터 존재 유무 확인 ]


결과






파일 비교

비교식
기능
-d file
파일이 존재하며, 파일의 종류가 디렉토리인가?
-e file
파일이 존재하는가? (파일 종류는 상관X)
-f file
파일이 존재하고 정규 파일(Regular file)인가?
-r file
파일이 존재하며, 읽을 수 있는가?
-s file
파일이 존재하며, 비어 있지 않은가?
-w file
파일이 존재하며, 기록할 수 있는가?
-x file
파일이 존재하며, 실행할 수 있는가?
-O file
파일이 존재하며, 현재 사용자가 소유했는가?
-G file
파일이 존재하며, 기본 그룹이 현재 사용자와 같은가?
file_1 -nt file_2
file_1이 file_2보다 새것인가?
file_1 -ot file_2
file_1이 file_2보다 오래되었나?


A regular file is a file that is not a directory, symlink, socket, device, etc.

[ -e  FILE ] :   /etc/hosts = TRUE , /dev/null = TRUE
[ -f  FILE ] :   /etc/hosts =  TRUE, /dev/null  = FALSE


[ 디렉토리가 존재하는지 확인한 후에 디렉토리 위치 변경]


결과


[ 파일이 존재하면 현재 날짜와 시간을 그 파일에 추가 ]




결과








 



'Developer > Linux' 카테고리의 다른 글

쉘 스크립트 작성(5)  (0) 2019.06.18
쉘 스크립트 작성(4)  (0) 2019.06.18
쉘 스크립트 작성(2)  (0) 2019.06.16
쉘 스크립트 작성  (0) 2019.06.16
쉘 스크립트 파일 만들기  (0) 2019.06.09

쉘 스크립트 작성(2)

Developer/Linux 2019. 6. 16. 16:26 Posted by JAKE_SLEEPY
명령 실행

if-then 구문 사용


if command
then
    command set
fi


if문은 그 줄에 정의된 명령을 실행한다. 

이때 명령이 제대로 실행이 되었다면 반환값은 0이다.

하지만, 명령이 제대로 실행되어지지 않았다면 반환값은 0이 아닌 수이다.




#!/bin/bash

if mkdir my_dir
then
    echo "my directory is created! 1"
    echo "my directory is created! 2"
    echo "my directory is created! 3"
fi



if-then-else 구문 사용


if command
then
    command set 1
else
    command set 2
fi

#!/bin/bash

if mkdir my_dir
then
    echo "my directory is created! 1"
    echo "my directory is created! 2"
    echo "my directory is created! 3"
else
    ls
    echo "my directory is already created!"
fi


if-then-elif 구문 사용


if command 1
then
    command set 1
elif command 2
then
    command set 2
else
    command set 3
fi



elif 문을 쓰면 바로 뒤에 나오는 else 문은 앞에 나온 if-then 구문 코드 블록에 속한 것이 아닌 elif 문에 속한 것!

즉, elif에 대한 else를 의미.


if command1
then
    command set 1
elif command2
then
    command set 2
elif command3
then
    command set 3
elif command4
then
    command set 4
fi



'Developer > Linux' 카테고리의 다른 글

쉘 스크립트 작성(4)  (0) 2019.06.18
쉘 스크립트 작성(3)  (0) 2019.06.16
쉘 스크립트 작성  (0) 2019.06.16
쉘 스크립트 파일 만들기  (0) 2019.06.09
변수 배열  (0) 2019.06.09

쉘 스크립트 작성

Developer/Linux 2019. 6. 16. 16:26 Posted by JAKE_SLEEPY

사용자 변수



쉘 스크립트 안에서 쓸 수 있는 변수를 선언할 수 있다.
변수를 선언함으로써 데이터를 저장하여 사용할 수 있고, 프로그래밍에 가까워 질 수 있다.

변수명=변수값

var=7
var_str="It is my string"

변수형은 쉘에서 자동으로 결정한다.

그리고 변수의 생명주기는 쉘 스크립트가 실행되어 끝날 때까지다.




명령 치환



명령의 결과를 변수에 저장할 수 있다.

#!/bin/bash

echo "hello world!"
test_0=$(ls)
test_1=$(date)

echo $test_0
echo $test_1

$()를 사용하여 명령의 결과값을 얻을 수 있다.

소괄호 안에는 반드시 명령어가 들어가야 한다.

변수명을 적을시 Command not found 라고 뜰 것이다.

왜냐하면 명령어를 적지 않고 변수명을 적었으니 정의된 명령어가 아니므로 에러를 출력할 것이기 때문이다.

ls 명령의 결과를 test_0 변수에 저장하고

date 명령의 결과를 test_1 변수에 저장한다.






활용예) 시뮬레이션 결과를 날짜별로 관리하기

#!/bin/bash

sim_time=$(date +%y%m%d.%H%M%S)
mkdir sim_$sim_time






출력 리다이렉트


이전 포스트에 간략히 설명하였다.


출력 리다이렉트는 명령의 출력을 받아서 파일로 전송한다.

기본 출력 리다이렉트 형식은 다음과 같다.

command > outputfile


기존의 내용에 출력 결과를 추가하고 싶다면

command >> outputfile







입력 리다이렉트


입력 리다이렉트는 출력 리다이렉트와는 반대로, 

파일의 내용을 받아서 명령으로 보내준다.

command < inputfile


다른 점이 하나 있다면 << 부호는 인라인 입력 리다이렉트라는 기호다.

파일 대신 터미널로 입력 리다이렉트를 할 데이터를 지정할 수 있다.

command << marker
data 0
data 1
data 2
...
marker

시작과 끝의 marker 는 동일해야 한다.


wc 명령은 데이터의 줄, 단어, 바이트의 수를 출력한다.

총 3줄, 15개의 단어,
4(띄어쓰기)+19(글자)+1(NULL)+
4(띄어쓰기)+20(글자)+1(NULL)+
4(띄어쓰기)+19(글자)+1(NULL) = 73 바이트





'Developer > Linux' 카테고리의 다른 글

쉘 스크립트 작성(3)  (0) 2019.06.16
쉘 스크립트 작성(2)  (0) 2019.06.16
쉘 스크립트 파일 만들기  (0) 2019.06.09
변수 배열  (0) 2019.06.09
PATH 환경 변수  (0) 2019.06.09

쉘 스크립트 파일 만들기

Developer/Linux 2019. 6. 9. 15:45 Posted by JAKE_SLEEPY

쉘 명령어를 스크립트 파일에다 작성한다.

왜 파일에다 작성해야 할까?

장점
  1. 반복적인 일련의 명령을 매번 입력하지 않아도 된다.
  2. 업무에서의 생산성 증가
  3. 재사용의 용이 (파일 단위이므로)

단점
  1. 스크립트 작성에 익숙하지 않은 사람은 건드릴 수 없다.
  2. 재작성할 기회가 적어지므로 스크립트 작성 능력이 떨어질 수 있다.





개인적인 생각을 정리해보았다.

결국 스크립트를 지겹도록 작성하는 사람에겐 단점이라는 건 있을 수 없겠다.

업무의 생산성을 향상시키기 위해선 쉘 스크립트를 작성하여 자동화시키는 것이

이윤 추구를 위해선 당연한 것처럼 보인다.






쉘 스크립트가 실행되도록 설정해야 할 것들

1.#!{쉘 지정}
2.PATH 환경 변수 설정
3.chmod u+x {스크립트 파일} (실행권한 부여)

쉘 스크립트를 만들 때, 가장 첫 번째 줄에서 쉘에게 해당 스크립트를 실행할 쉘을 지정해줄 수 있다.

다른 쉘에서 실행시킬 수 있다. 예를 들면 bash에서 csh로 스크립트를 실행하는 경우가 있겠다.

#기호는 주석처리할 때 사용하지만, 첫줄에 #!를 표시하고 그 뒤에 사용할 쉘의 위치를 알려준다.

#!/bin/bash #!/bin/csh

참고로, #!/bin/csh -f 라는 걸 볼 수 있는데 여기서 -f 옵션은 Fast start로써 .cshrc나 .login 파일을 읽지 않고 실행한다고 한다.

PATH 환경 변수 포스트에 위의 과정이 있으니 참고하도록 하자.










'Developer > Linux' 카테고리의 다른 글

쉘 스크립트 작성(2)  (0) 2019.06.16
쉘 스크립트 작성  (0) 2019.06.16
변수 배열  (0) 2019.06.09
PATH 환경 변수  (0) 2019.06.09
사용자 정의 변수 선언  (0) 2019.06.07

변수 배열

Developer/Linux 2019. 6. 9. 02:52 Posted by JAKE_SLEEPY
환경 변수를 배열로 선언할 수 있다.



변수명=(원소0 원소1 원소2 ...)


myvar_arr 변수가 a,b,c,d,e,f 를 원소로 가지도록 선언하였다.

값을 참조하면 index가 0 인 값이 출력된다.




원하는 index의 값을 참조하고 싶을 경우

{변수명[index]} 형식을 사용한다.





모든 index의 원소를 전부 출력하고 싶을 경우 index 자리에 *(asterisk)를 넣는다.



특정 index의 원소를 없애고 싶다면 unset 명령을 이용한다.




'Developer > Linux' 카테고리의 다른 글

쉘 스크립트 작성  (0) 2019.06.16
쉘 스크립트 파일 만들기  (0) 2019.06.09
PATH 환경 변수  (0) 2019.06.09
사용자 정의 변수 선언  (0) 2019.06.07
환경 변수  (0) 2019.06.07

PATH 환경 변수

Developer/Linux 2019. 6. 9. 01:00 Posted by JAKE_SLEEPY


명령을 쉘에 입력하면 쉘은 그 명령을 찾으려고 할 것이다.

이때 이 명령이 어디에 있는 지 알려주는 기능을 하는 것이 PATH 환경 변수다.

그래서 PATH에 해당 쉘 명령이 없다면 쉘은 명령을 실행할 수 없다.



gvim mytest

mytest의 코드는 ~/에 다음과 같이 작성하였다.


#!/bin/bash
echo "hello world!"





bash에 puts 명령이 있을 줄 알았는데 없었다.

그래서 echo 명령을 사용했다. 

chmod +x mytest  명령으로 실행가능하게 만들고

./mytest

실행하여서 hello world! 라고 터미널에 출력된다.




~/Music 디렉토리에서 실행을 하였는데 명령을 찾지 못했다고 한다.

그래서 PATH 환경 변수에 mytest가 있는 디렉토리 위치를 추가하였더니

mytest를 실행할 수 있었다.


'Developer > Linux' 카테고리의 다른 글

쉘 스크립트 파일 만들기  (0) 2019.06.09
변수 배열  (0) 2019.06.09
사용자 정의 변수 선언  (0) 2019.06.07
환경 변수  (0) 2019.06.07
코프로세싱  (0) 2019.06.06

사용자 정의 변수 선언

Developer/Linux 2019. 6. 7. 21:10 Posted by JAKE_SLEEPY
사용자 정의 지역 변수 선언하기


변수이름=변수값



서브 쉘을 생성하고 이전 쉘에서 선언한 변수를 참조했더니

참조할 수 없었다.

왜냐하면 지역 변수를 선언 했기 때문에.




사용자 정의 전역 변수 선언하기

전역 환경 변수를 만들기 위해서는 먼저 지역 변수를 생성하고 이를 전역 환경으로 내보내면 된다.

export {지역 변수명}



서브 쉘을 생성하는 쉘을 부모 쉘이라고 하고 생성된 쉘을 자식 쉘이라고 한다면

지역 변수는 부모 쉘에서 선언한 변수가 자식 쉘에서는 참조될 수 없었지만,

전역 변수는 부모 쉘에서 선언한 변수가 자식 쉘에서도 참조될 수 있다.






변수 제거하기

unset {변수명}





'Developer > Linux' 카테고리의 다른 글

변수 배열  (0) 2019.06.09
PATH 환경 변수  (0) 2019.06.09
환경 변수  (0) 2019.06.07
코프로세싱  (0) 2019.06.06
백그라운드  (0) 2019.06.06

환경 변수

Developer/Linux 2019. 6. 7. 01:43 Posted by JAKE_SLEEPY


환경 변수는 쉘 세션과 작업 환경에 대한 정보를 저장하기 위해 사용된다.
 
환경 변수를 이용해 메모리에 데이터를 저장할 수 있기 때문에 쉘에서 실행 중인 모든 프로그램이나 스크립트를 쉽게 사용할 수 있다.
 
 
환경 변수에는 전역 변수와 지역 변수가 있다.
전역 변수는 어디에서든 참조하여 쓸 수 있지만, 지역 변수는 생성한 쉘에서만 사용할 수 있다.
그렇기 때문에 생성한 쉘이 종료되면 지역 변수도 사라지게 될 것이다.


printenv 명령을 통해 전역 환경 변수를 출력해보았다.


리눅스 시스템에 상당히 많은 전역 환경 변수들이 선언되어 있는 것을 알 수 있다.

이러한 시스템 환경 변수는 일반 환경 변수와 구별되기 위해서 대문자로만 선언한다.





환경 변수를 참조하려면 환경 변수 이름 앞에 $ 기호를 넣어야 한다.





참조한 변수를 다양하게 활용할 수 있다.









'Developer > Linux' 카테고리의 다른 글

PATH 환경 변수  (0) 2019.06.09
사용자 정의 변수 선언  (0) 2019.06.07
코프로세싱  (0) 2019.06.06
백그라운드  (0) 2019.06.06
서브 쉘(2)  (0) 2019.06.06

코프로세싱

Developer/Linux 2019. 6. 6. 21:08 Posted by JAKE_SLEEPY

코프로세싱

 

코프로세싱(Co-processing)은 두 가지 작업을 동시에 수행하는 것을 뜻하며, 

백그라운드에서 서브 쉘을 생성하고 서브 쉘에서 명령을 실행한다.

coproc {서브쉘에서 실행할 명령} 

 

coproc 두번 실행했더니 Warning이 떴는데, 실행은 된다.

 

서브 쉘에서 명령을 실행한다고 해서 ps --forest 로 확인을 해봤더니 서브 쉘에서 실행하지 않고 있는데,

 

어떻게 된 것일까?

내가 서브 쉘을 생성해주어야 서브 쉘에서 실행을 하는 걸까?

 

 

coproc 명령을 백그라운드로 보내도 차이가 없다.

 

 

'Developer > Linux' 카테고리의 다른 글

사용자 정의 변수 선언  (0) 2019.06.07
환경 변수  (0) 2019.06.07
백그라운드  (0) 2019.06.06
서브 쉘(2)  (0) 2019.06.06
서브 쉘  (0) 2019.06.05

백그라운드

Developer/Linux 2019. 6. 6. 16:53 Posted by JAKE_SLEEPY

백그라운드에 명령을 실행하면 명령이 처리되는 동안에도 자유롭게 터미널을 다른 일에 쓸 수 있다.

 

백그라운드에서 명령이 실행되도록 하려면 마지막에 & 문자를 붙인다.

 

백그라운드에 명령을 실행하면 프로세스에 대한 정보를 제공하는데, 

대괄호 안의 숫자에 백그라운드 프로세스 번호를 알려주고

그 프로세스의 ID (PID)를 알려준다.

 

 

 

 

백그라운드에서 명령을 실행시킨 후 jobs 명령을 사용하면 현재 백그라운드에서 실행되고 있는

프로세스 목록을 출력하는데, 백그라운드 프로세스 번호, 상태 그리고 명령을 출력한다.

 

 

프로세스가 동작 중일때에는 Running이라고 나타나며, 프로세스가 끝나면 Done이라고 표시한다.

jobs 명령에 -l 옵션을 추가하면 PID가 추가로 출력된다.

 

 

쉘 안에서 많은 양의 작업들을 수행해야 할 경우에 백그라운드로 명령을 실행하면 터미널을 계속 사용할 수 있기 때문에

좀 더 터미널의 사용에 유연해질 수 있다.



터미널을 여러개 띄우는 것보다 백그라운드에서 작업을 하는게 나 개인적으로는 편했다.

'Developer > Linux' 카테고리의 다른 글

환경 변수  (0) 2019.06.07
코프로세싱  (0) 2019.06.06
서브 쉘(2)  (0) 2019.06.06
서브 쉘  (0) 2019.06.05
  (0) 2019.06.05

서브 쉘(2)

Developer/Linux 2019. 6. 6. 01:12 Posted by JAKE_SLEEPY

한 줄에 일련의 명령들을 입력하여 순차적으로 실행하는 방법이 있다.

 

각 명령들 사이에 세미콜론(;)을 넣어주면 연속적으로 명령들을 실행할 수 있다.

 

 

이러한 방식은 명령을 실행하기 위해서 서브 쉘을 생성하지 않는다.

 

그 근거는 BASH_SUBSHELL 변수의 값이 0이라는 것에서 알 수 있다.

 

 

 

 

괄호를 사용해서 명령을 그룹화하는 방법이 있다고 한다.

 

이러한 방식은 명령을 실행하기 위해서 서브 쉘을 생성한다.

 

 

그룹화된 명령 안에 또 다른 그룹화된 명령이 들어갈 수도 있다.

 

그리고 괄호 쌍의 갯수만큼 서브 쉘을 생성한다.

 

 

 

 

 

서브 쉘을 쓰고 안 쓰고가 큰 차이가 있는지 잘 모르겠다.

 

그 이유를 좀 더 알아볼 필요가 있어보인다.

'Developer > Linux' 카테고리의 다른 글

코프로세싱  (0) 2019.06.06
백그라운드  (0) 2019.06.06
서브 쉘  (0) 2019.06.05
  (0) 2019.06.05
파이프 그리고 리다이렉트  (0) 2019.06.01

서브 쉘

Developer/Linux 2019. 6. 5. 22:37 Posted by JAKE_SLEEPY

서브 쉘 생성

 

 

쉘 이름을 터미널에 입력하면 서브 쉘이 생성된다.

 

 

 

 

첫번째 쉘(PID 1775)에서 파생된 두 번째 쉘(PID 2100)의 PPID가 첫 번째 쉘의 PID와 일치하는 것으로 보아 

두 번째 쉘은 첫 번째 쉘에서 파생된 서브 쉘이라는 것을 알 수 있다.

 

 

세 번째 쉘의 PPID는 2100이며, 이는 두 번째 쉘의 PID와 일치한다.

 

 

네 번째 쉘의 PPID는 2109이며, 이는 세 번째 쉘의 PID와 일치한다.

 

 

 

 

 

ps --forest 명령은 서브 쉘들이 어떻게 가지를 쳤는지 보여준다.

 

 

 

 

exit 명령을 통해 서브 쉘에서 빠져나갈 수 있다.

 

 

 

참고로 쉘 스크립트를 실행하면 서브 쉘이 생성된다.

'Developer > Linux' 카테고리의 다른 글

백그라운드  (0) 2019.06.06
서브 쉘(2)  (0) 2019.06.06
  (0) 2019.06.05
파이프 그리고 리다이렉트  (0) 2019.06.01
링크 파일  (0) 2019.05.31

Developer/Linux 2019. 6. 5. 01:48 Posted by JAKE_SLEEPY

쉘(SHELL)은 무엇일까?

 

 

이름 그 자체를 생각해보았을 때 무엇인가를 외부 요인으로부터 보호하기 위해 둘러싼 껍질이라는 게 떠올랐다.

 

껍질이 있으면 알맹이를 보는 게 어렵다.

 

그리고... 껍질은 외부와 알맹이 사이에 존재한다.

 

이것을 리눅스 커널과 사용자의 개념에 적용해본다면

 

쉘은 사용자(외부)로부터 커널(알맹이)를 보호하는 역할을 함과 동시에 둘 사이에 존재해서 상호작용을 할 수 있도록

 

만들어 주는 역할, 즉 사용자가 명령을 하면 그것을 커널에게 전달해주는 역할을 하는 것이 아닐까?

 

 

 

나의 기본 쉘 확인하기

 

나는 어떤 쉘을 쓰고 있는걸까?

 

/etc/passwd 파일에는 모든 사용자 계정 목록과 각 계정의 기본 쉘들이 지정되어 있다.

 

내가 쓰는 쉘을 알고 싶기 때문에

 

cat /etc/passwd | grep jseok

 

bash로 나의 기본 쉘이 지정되어 있는 것을 확인할 수 있다.

 

 

 

나의 기본 쉘 바꾸기

 

 

chsh 명령을 통해 bash를 csh로 기본 쉘을 바꾸어 보자.

 

 

 

Restart 후에 현재 쉘을 확인하면 /bin/csh로 바뀌었다.

 

 

'Developer > Linux' 카테고리의 다른 글

서브 쉘(2)  (0) 2019.06.06
서브 쉘  (0) 2019.06.05
파이프 그리고 리다이렉트  (0) 2019.06.01
링크 파일  (0) 2019.05.31
압축하고 풀기  (0) 2019.05.31

파이프 그리고 리다이렉트

Developer/Linux 2019. 6. 1. 09:30 Posted by JAKE_SLEEPY

파이프는 | 로 나타내며, 앞에서 실행된 명령의 결과를 뒤쪽의 명령어로 전달하라는 의미이다.

 

 

 

그래서 파이프를 사용하면 뒤쪽의 명령어는 앞쪽의 명령어의 결과를 바탕으로
또 다른 결과가 나오게 할 수 있다.

 

 

 

즉, 각각의 명령어들의 기능을 조합하여 새로운 명령 또는 복잡한 명령을 수행할 수 있게 만들어 준다.

 

 

 

ps u | grep make

 

 

cat compile.log | more

 

 

tail -n 20 compile.log | grep Error

 

 

 

 

리다이렉트(redirect)는 > 또는 < 기호로 나타내며, 표준 입출력의 방향을 바꿔주고 싶을 때 사용한다.

 

 

 

ls > list.txt

 

ls 명령어는 결과를 콘솔 화면(표준 출력)에 출력하는데, 이를 화면이 아닌 list.txt 파일에 저장하라는 뜻.

 

 

 

tail -n 20 compile.log > result.txt

 

compile.log의 제일 끝 부분의 20줄만 콘솔 화면에 출력하는데, 이를 화면이 아닌 result.txt 파일에 저장하라는 뜻

 

 

 

 

grep hello < hello_world.c

 

hello_world.c 파일을 읽어서 hello라는 단어가 있는 줄만 화면에 출력.

 

cat hello_world.c | grep hello 와 같은 결과를 출력.

 

 

 

'Developer > Linux' 카테고리의 다른 글

서브 쉘  (0) 2019.06.05
  (0) 2019.06.05
링크 파일  (0) 2019.05.31
압축하고 풀기  (0) 2019.05.31
용량 체크  (0) 2019.05.31

링크 파일

Developer/Linux 2019. 5. 31. 21:39 Posted by JAKE_SLEEPY

링크 파일은 윈도우 OS에서의 바로가기 파일이라고 보면 된다.

 

 

 

나는 보통 여러 번의 디렉토리를 통하지 않고 한 번에 원하는 파일에 접근하고 싶을 때 사용한다.

 

 

 

프로젝트 디렉토리에서 내가 필요한 파일들을 링크 걸어 내가 원하는 파일에 빠르게 접근한다.

 

 

스크립팅을 할 때에도 요긴하게 쓰인다.

 

 

뭐... 아무튼 바로가기를 만들어 본 사람이라면 왜 링크 파일을 쓰는 지 잘 알 것이라고 본다.

 

 

ln -s src dst

 

 

여기서 -s 옵션은 심볼릭 링크를 생성하라는 뜻이다.

 

 

링크 파일은 두가지 형식이 존재한다.

 

 

 

심볼릭 링크(Symbolic link)는 원본 파일을 가리키는 정보만을 가지고 있다.

 

그래서 원본 파일이 삭제되면 심볼릭 링크 파일은 의미가 없어진다.

 

 

 

 

하드 링크(Hard link)는 원본 파일의 내용을 공유한다. 따라서 원본 파일을 삭제하더라도

링크 파일은 그대로 남아있게 되며, 원본 파일이나 링크 파일이 수정되면 두 파일의 내용이 모두 수정된다.

 

반대로, 하드 링크를 지우더라도 원본 파일은 그대로 남아있다.

 

 

 

 

'Developer > Linux' 카테고리의 다른 글

  (0) 2019.06.05
파이프 그리고 리다이렉트  (0) 2019.06.01
압축하고 풀기  (0) 2019.05.31
용량 체크  (0) 2019.05.31
프로세스 관리  (0) 2019.05.31

압축하고 풀기

Developer/Linux 2019. 5. 31. 00:58 Posted by JAKE_SLEEPY

여러가지 파일을 묶어서 전달하고 싶을 때 압축을 한다.

 

 

 

또는 큰 용량을 압축하여 줄이고 싶을 때에도 압축을 한다.

 

 

 

 

입축 형식은 크게 두가지이다.

 

 

tar.gz과 zip.

 

 

zip은 윈도우 OS를 많이 사용하기 때문에 익숙하겠지만 tar.gz은 익숙하지 않았다.

 

 

물론 나 역시도 리눅스 어린이이기 때문에 이 확장자가 뭔지... 처음보는 형식이라 많이 당황했다.

 

 

익숙한 zip 파일의 경우 파일을 압축하기 위해서는 다음과 같이 입력하면 된다.

 

 

zip myfiles.zip list1.txt list2.txt

 

 

압축을 풀 때에는

 

 

unzip myfiles.zip

 

 

 

 

tar.gz 파일은 리눅스 OS에서 자주 사용되는 압축 형식이다.

 

 

tar.gz은 두가지 형식이 중첩된 구조다.

 

 

tar 형식은 압축하지 않고 모든 파일을 모아서 하나의 파일로 만드는 구조이며,
gz은 묶인 하나의 파일을 압축하는 구조이다.

 

 

 

압축을 할 경우

 

tar -czvf cmu.tar.gz ~/work/cmu/*

 

~/work/cmu/ 에 있는 모든 파일들을 cmu.tar.gz으로 압축

 

 

 

압축을 풀 경우

 

tar -xzvf cmu.tar.gz

 

 

 

압축할 때 용량을 압축하지 않고 파일만 묶고 싶은 경우에는 gz 형식을 쓰지 않아도 된다.

 

tar -cvf cmu.tar.gz ~/work/cmu/*

 

 

 

.tar 형식을 압축 풀 경우

 

tar -xvf cmu.tar.gz

 

 

 

 

'Developer > Linux' 카테고리의 다른 글

파이프 그리고 리다이렉트  (0) 2019.06.01
링크 파일  (0) 2019.05.31
용량 체크  (0) 2019.05.31
프로세스 관리  (0) 2019.05.31
리눅스 파일 및 내부 문자열 찾기  (0) 2019.05.30

용량 체크

Developer/Linux 2019. 5. 31. 00:12 Posted by JAKE_SLEEPY

EDA 툴을 돌리다보면 시뮬레이션 파일의 용량이 상당히 커지고, 각종 db 파일들의 용량이 몇백 GB일때도 있다.

 

 

 

그러다보면 디스크의 용량을 체크할 수 밖에 없다.

 

 

 

저장 장치의 목록과 사용량을 확인해보려면 df 명령을 사용한다.

 

 

 

df -h 명령을 입력하면 되는데 여기서 -h는 사람이 보기 편하게 단위를 보여주는 옵션이다.

 

 

 

그리고 저장 장치의 전체 용량을 확인하고 싶은 것이 아니고, 각 폴더의 용량만을 알고 싶은 경우가 있다.

 

 

 

이 경우에는 du -h 명령을 이용한다.

 

 

 

du -h ~/work/cmu/sim

 

 

 

그러면 ~/work/cmu/sim 디렉토리에 있는 파일과 그 하위 디렉토리의 모든 용량을 합한 값을 출력해준다.

 

 

'Developer > Linux' 카테고리의 다른 글

파이프 그리고 리다이렉트  (0) 2019.06.01
링크 파일  (0) 2019.05.31
압축하고 풀기  (0) 2019.05.31
프로세스 관리  (0) 2019.05.31
리눅스 파일 및 내부 문자열 찾기  (0) 2019.05.30

프로세스 관리

Developer/Linux 2019. 5. 31. 00:02 Posted by JAKE_SLEEPY

프로세스는 현재 메모리에 로드되어 있는 프로그램이다.

 

 

 

EDA 툴을 돌릴때 제대로 동작하지 않는 경우가 생기는데, ctrl+z로 해당 프로세스에서 빠져나가는 경우 

 

그 프로세스가 메모리에 계속 로드되어 있는 경우가 있다.

 

 

 

 

나는 보통 ps u 명령을 통해 내가 사용중인 프로세스 목록을 확인한다.

 

프로세스에 대한 여러가지 정보를 볼 수 있다.

 

그리고 kill -9 PID 명령을 통해 죽이고 싶은 프로세스의 ID(PID)를 입력하여 프로세스를 죽인다.

 

추가적으로, killall 명령은 PID 번호가 아닌 이름으로 프로세스를 중지시키는 방법이다.

 

killall make*

 

ctrl+z로 해당 프로세스에서 빠져나간 후 kill %를 하면 바로 이전의 프로세스를 죽일 수 있다.

 

 

 

 

프로세스를 죽였는데 defunct라고 적힌 것들이 보이는데 이를 좀비 프로세스라고 부른다.

 

 

프로세스의 실행이 종료되었지만 아직 정리되지 않은 프로세스를 의미하며, 일번적으로 부모의 프로세스가 자신이 생성한 자식 프로세스를 정리해주어야 하는데, 프로그램 오류나 버그 때문에 부모 프로세스가 실행이 종료된 자식 프로세스를 제대로 정리하지 못해서 생긴다.

 

 

참고로 ps -help 명령을 이용하면 ps 명령에 관한 다양한 옵션들을 볼 수 있다.

 

 

 

 

ps 명령 말고도 프로세스를 모니터링 하는 top 명령어가 있다.

 

누가 내가 쓰는 머신에서 무슨 프로세스를 돌리고 어느 정도 리소스를 잡아먹고 있는지 체크할 수 있다.

 

이 프로그램은 1초에 한번씩 계속 정보를 갱신하면서 가장 프로세스를 많이 쓰는 순서로 리스트하여 보여준다.

 

종료하려면 q를 누르면 된다.

 

'Developer > Linux' 카테고리의 다른 글

파이프 그리고 리다이렉트  (0) 2019.06.01
링크 파일  (0) 2019.05.31
압축하고 풀기  (0) 2019.05.31
용량 체크  (0) 2019.05.31
리눅스 파일 및 내부 문자열 찾기  (0) 2019.05.30

리눅스 파일 및 내부 문자열 찾기

Developer/Linux 2019. 5. 30. 00:35 Posted by JAKE_SLEEPY

리눅스에서 원하는 파일을 찾고 싶을때, find 명령어를 이용하여 찾을 수 있다.

 

일을 하다보니 필요하지 않을 수 없었다.

 

주로 찾고자 하는 이름을 가진 모듈이 어느 폴더에 있는지 알고 싶을 때 자주 쓴다.

 

 

 

 

1) 파일 찾기

 

  • find ./ -name "xxx.db"
  • 현재 폴더부터 하위 폴더를 포함하여 xxx.db라는 파일을 찾아라는 명령
  • find ./ -name "xxx" -type d
  • xxx라는 디렉토리를 찾고 싶은 경우 위와 같이 -type d 옵션을 추가한다.

 

2) 파일 내부 문자열 찾기

큰 파일들은 상당히 많은 내용이 적혀 있기 때문에 일일이 찾으면 시간도 걸리고 실수도 할 수 있으니 grep 명령을 이용하여 어딘가에 있는 특정한 문자열이 포함된 줄을 찾을 수 있다.

 

  • grep -r "xxx" ./*
  • 현재 폴더부터 하위 폴더에 있는 모든 파일에서 xxx라는 문자열 패턴을 찾아라는 명령

grep -v abc list.txt (찾는 패턴이 일치하지 않는 줄만 출력)

grep -n abc list.txt (찾는 패턴과 일치하는 내용이 발견되는 줄 번호 출력)

 

터미널에 파일 위치에 대한 결과가 나오기 때문에 Vim에서 보고 싶어서 redirect 명령을 활용하여 같이 사용하게 된다.

 

 

 

find ./ -name cmu.v > ../cmu_path.list

 

 

 

이걸 몰랐으면 일일이 모든 디렉토리를 뒤져서 찾으려고 했을 것이다.

'Developer > Linux' 카테고리의 다른 글

파이프 그리고 리다이렉트  (0) 2019.06.01
링크 파일  (0) 2019.05.31
압축하고 풀기  (0) 2019.05.31
용량 체크  (0) 2019.05.31
프로세스 관리  (0) 2019.05.31