curl: symbol lookup error - anaconda 이슈 해결




curl: symbol lookup error - anaconda 이슈 해결






curl 'http://localhost:9200/?pretty'

curl: symbol lookup error: /root/anaconda3/bin/../lib/libcurl.so.4: undefined symbol: SSLv2_client_method



???? 갑자기 뭐지????



# whereis curl

curl: /usr/bin/curl /usr/bin/X11/curl /usr/include/curl /usr/share/man/man1/curl.1.gz





전체 경로를 다 써서 /usr/bin/curl 'https://www.naver.com' 으로 하면 된다 

뭐지 -_-;;


anaconda의 curl이 기존에 설치되어있던 curl보다 우선적으로 잡히고 있는데 

여기서 에러가 나는 것 같다. 검색해보니 conda의 curl을 업데이트하거나 삭제하면 된다고 한다. 



It seems this occurs because (1) anaconda/bin is prepended to the $PATH, and (2) anaconda includes its own anaconda/bin/curl which then takes over subsequent curl invocations in the deploy script. This seems to be misconfigured by default for SSL, causing the error (apparently looking for CA data in a nonexistent path).



일단 conda curl 업데이트를 먼저 해봤는데 다행히 문제없이 잘 되어서 해결 완료 


 


conda update curl 





참고: 

https://github.com/ContinuumIO/anaconda-issues/issues/8971


https://github.com/lsst/lsstsw/issues/40







shell script - for 문 사용 예시



쉘 스크립트에서 for문 사용 예시 




- 기본 



#!/bin/bash

for i in 1 2 3 4 5

do

   echo "Welcome $i times"

done





- 배열 사용하기 



#!/bin/bash

arrayname=(value1 value2) 


for i in ${arrayname[@]}

do

   echo "Welcome $i times"

done







- 숫자범위 사용하기 



#!/bin/bash

for i in {2000..2011};do echo " $i times";done




- 명령어 결과 사용하기 


#!/bin/bash

for entry in $stockdir/*;do echo " $entry times";done




- 일반 반복문 형식 사용하기


#!/bin/bash

for (( i=0; i<100; i++ ));do echo " $i times";done



#!/bin/bash

for (( i=0; i<100; i=i+5 ))

  do

    j=$((i + 4));

    echo "alter table 테이블이름 add column age_"$i"_"$j"_totalcnt bigint DEFAULT NULL;";

    echo "COMMENT ON COLUMN 테이블이름.age_"$i"_"$j"_totalcnt IS '"$i" - "$j"세 총 인구수';"

done









shell script 작성법 - 수식 계산 & 문자열 조작



shell script 작성법 


수식 계산 & 문자열 조작 



수식 계산은 아래 방식중 하나를 사용해서 작성한다. 


num=$((num1 + num2))

num=$(($num1 + $num2)) 

num=$((num1 + 2 + 3))








문자열 시작에서부터 정규 표현식에 매칭되는 

문자열조각(substring)의 길이 계산하기


expr match "$string" '$substring'
$substring 은 정규 표현식입니다.

expr "$string" : '$substring'
$substring 은 정규 표현식입니다.

예시 1) 'abc[A-Z]*.2' 정규표현식에 매칭하는 문자열 길이 구하기
abc 로 시작하고 
[A-Z] A에서 Z까지 영어대문자가 0번 이상 반복되며
2로 끝남 
stringZ에서 abcABC12 에 해당되고 문자열 조각의 길이는 8임 


stringZ=abcABC123ABCabc


echo `expr match "$stringZ" 'abc[A-Z]*.2'`   # 8
echo `expr "$stringZ" : 'abc[A-Z]*.2'`       # 8

예시 2)  문자열에서 sorted 앞에 있는 문자열 길이만 계산


echo `expr match "Autech_Corporation_body.txt.sorted" '.*sorted'`

34

 echo `expr match "Autech_Corporation_body.txt" '.*sorted'`

0





참고) ttps://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/string-manipulation.html




my.cnf 위치 찾기

 

 

 

리눅스에서 mysql 설정파일 (my.cnf) 위치가 기억이 안날경우

아래 명령어를 입력해서 나온 파일 위치 순서대로 찾아보면 된다.

 


# mysqld --verbose --help | grep -A 1 'Default options'
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

 

 

 

Ubuntu 16.04 업그레이드이후 ssh 접근 에러







 Ubuntu 16.04 업그레이드이후 ssh 접근 에러 




Ubuntu 14 에서 16.04으로 업그레이드하고 ssh 로 새연결하려니까 

갑자기 다음과 같은 에러가 발생하면서 접속이 되지 않는다. 


expected key exchange group packet from server 



검색해보니 해결 방법을 명시한 블로그가 있다. 





접속-SSH-키교환에서 아래와 같이 암호 알고리즘 순서를 변경한다. 


디피-헬만그룹 14

디피-헬만그룹 1

디피-헬만그룹교환




이제 정상적으로 접속이 잘 된다 ㅇㅇ




이 방법이 귀찮으면 putty 최신버전을 깔아도 된다고 한다. ㅇㅇ









리눅스 포트 사용중인 프로세스 확인 방법



리눅스(Ubuntu)에서 포트 사용중인 프로세스 확인 방법




netstat 을 사용하여 열려있는 포트와 연동된 PID, 프로그램 이름을 확인 할 수 있다. 

특정 port 만 확인하고 싶을 경우 netstat -tulpn | grep 포트번호를 사용하면 된다. 




# netstat -tulpn

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 127.0.0.1:45650         0.0.0.0:*               LISTEN      24336/python3

tcp        0      0 127.0.0.1:45490         0.0.0.0:*               LISTEN      8301/python3

tcp        0      0 127.0.0.1:46483         0.0.0.0:*               LISTEN      12022/python3

tcp        0      0 127.0.0.1:41939         0.0.0.0:*               LISTEN      8154/python3

tcp        0      0 127.0.0.1:37395         0.0.0.0:*               LISTEN      1075/python3

tcp        0      0 127.0.0.1:41395         0.0.0.0:*               LISTEN      4683/python2




 프로세스 id를 확인하면 아래와 같이 ld -l /proc/프로세스id/exe 명령어를 사용하여 

포트와 연동된 프로그램 이름과 경로도 확인할 수 있다. 



#  ls -l /proc/5313/exe

l**x 1 user  user 0 11월 26 03:39 /proc/5313/exe -> /kibana/node/bin/node







참고: https://www.cyberciti.biz/faq/what-process-has-open-linux-port/


shell script 작성법 - if문 사용법 (기본 사용법)


기본 사용법 




if [ 조건식 ]; then          // if문 시작

    ~

elif

    ~

else

    ~

fi    


또는 



if [ 조건식 ]

then                    // if문 시작

    ~

elif

    ~

else

    ~

fi                         // if문 종료




if 와 [ 사이는 반드시 한 칸을 띄어써야 한다. 


조건식에 들어가는 조건은 &&(and) 나 ||(or) 로 연결하여 사용 가능하다 



다양한 조건을 연결하여 사용하는 예시 


 if [ $is_sorted_file -eq 0 ] && [ $today_cnt -gt 0 ] && [ $today_cnt_sorted -eq 0 ]; then

         echo "there is new today news:"$entry
 elif [ $is_sorted_file -gt 0 ]; then
                echo "this file is sorted file:"$entry
        elif [ $today_cnt -eq 0 ]; then
                echo "there is no today news:"$entry
        elif [ $today_cnt_sorted -gt 0 ]; then
                echo "new news is already added in sorted file"
        else
                echo "what case?"
    fi



문자열 비교




if [ "$var" != "" ]; then

echo variable is not null

fi


To compare the contents of a variable to a fixed string:


if [ "$var" == "value" ]; then

echo is the same

fi


To determine if variable’s contents are not equal to a fixed string:


if [ "$var" != "value" ]; then

echo not the same

fi


username is not in the sudoers file 에러 메시지





sudo를 사용하기 위해서는 해당 유저의 sudo 권한이 설정되어 있어야 합니다. 

설정은 /etc/sudoers 파일에서 할 수 있습니다. 



# vi /etc/sudoers


파일을 열면 아래와 같은 라인이 나오는데 

# User privilege specification
root    ALL=(ALL:ALL) ALL

그 아래에 해당 유저 라인을 추가해주면 됩니다. 
username ALL=(ALL:ALL) ALL


리눅스(Ubuntu) 하드 디스크 추가하고 mount하기



수집되고 있는 데이터들이 많아져서 1TB 디스크 두 개를 추가하였습니다. 

fdisk -l 로 추가된 디스크를 확인합니다. 





# fdisk -l


...


...

Disk /dev/sdd: 2048.4 GB, 2048408248320 bytes

255 heads, 63 sectors/track, 249038 cylinders, total 4000797360 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000


Disk /dev/sdd doesn't contain a valid partition table


Disk /dev/sde: 2048.4 GB, 2048408248320 bytes

255 heads, 63 sectors/track, 249038 cylinders, total 4000797360 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000


Disk /dev/sde doesn't contain a valid partition table



새로운 디스크 2개의 경로를 확인합니다. 

/dev/sdd 와 /dev/sde 로 잡혀있습니다. 


fdisk /dev/sdd 을 입력해서 파티션 설정을 합니다. 

m을 입력하면 명령어 리스트를 볼 수 있습니다. 





# fdisk /dev/sdd

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0x5bb28c04.

Changes will remain in memory only, until you decide to write them.

After that, of course, the previous content won't be recoverable.


Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)


Command (m for help):


Command (m for help): m

Command action

   a   toggle a bootable flag

   b   edit bsd disklabel

   c   toggle the dos compatibility flag

   d   delete a partition

   l   list known partition types

   m   print this menu

   n   add a new partition

   o   create a new empty DOS partition table

   p   print the partition table

   q   quit without saving changes

   s   create a new empty Sun disklabel

   t   change a partition's system id

   u   change display/entry units

   v   verify the partition table

   w   write table to disk and exit

   x   extra functionality (experts only)


Command (m for help):



fdisk /dev/sdd 를 입력하고 n으로 새로운 파티션을 추가합니다.

primary type만 선택하고 나머지는 enter를 입력합니다.


# fdisk /dev/sdd

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0x183fc52b.

Changes will remain in memory only, until you decide to write them.

After that, of course, the previous content won't be recoverable.


Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)


Command (m for help): n

Partition type:

   p   primary (0 primary, 0 extended, 4 free)

   e   extended

Select (default p): p

Partition number (1-4, default 1):  enter

Using default value 1

First sector (2048-4000797359, default 2048): enter

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-4000797359, default 4000797359): enter

Using default value 4000797359


Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.

Syncing disks.





fdisk -l 명령어를 사용하여 단일 파티션이 구성된 것을 확인했습니다. 




# fdisk -l /dev/sdd


Disk /dev/sdd: 2048.4 GB, 2048408248320 bytes

30 heads, 63 sectors/track, 2116824 cylinders, total 4000797360 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x183fc52b


   Device Boot      Start         End      Blocks   Id  System

/dev/sdd1            2048  4000797359  2000397656   83  Linux




이제 새로운 디스크를 포맷해야 합니다. 

blkid 명령어를 사용하면 해당 디스크의 파일시스템 타입을 알 수 있습니다. 

ext4로 나타나서 mkfs.ext4를 사용하여 ext4타입으로 포맷을 합니다. 



# mkfs.ext4 /dev/sdd

mke2fs 1.42.9 (4-Feb-2014)

/dev/sdd is entire device, not just one partition!

Proceed anyway? (y,n) y

Discarding device blocks: done

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

125026304 inodes, 500099670 blocks

25004983 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=4294967296

15262 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,

        102400000, 214990848


Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done



포맷이 완료되면 이제 mount를 할 준비가 다 되었습니다. 

이제 새로운 디스크를 mount할 새로운 폴더를 생성합니다. 


root 디렉토리로 이동하여 data 디렉토리를 생성합니다. 

그리고 mount 명령어를 사용하여 mount를 완료합니다. 


df -h를 사용하여 mount 정보를 확인합니다. 

새로운 하드 디스크가 제대로 마운트 된 것이 확인 되었습니다. 






# cd/

#mkdir data


# mount -t ext4 /dev/sdd /data

# df -h

Filesystem      Size  Used Avail Use% Mounted on

...

/dev/sdd        1.9T   68M  1.8T   1% /data

root@rt-MS-7885:/#



참고: http://yonoo88.tistory.com/651

http://blog.naver.com/PostView.nhn?blogId=jsky10503&logNo=220730292263&redirect=Dlog&widgetTypeCall=true

리눅스에서 디스크 중 어느것이 ssd인지 확인하기


여러 개의 디스크 중 어느 것이 ssd이고 

어느 것이 하드 디스크인지 확인해보고 싶었다. 


일단 fdisk -l 로 마운트 된 디스크들을 확인하였다. 

sda, sdb, sdc 의 세 개의 디스크가 있는 것을 확인하였다. 


대충 용량을 보니 어느 것이 ssd인 지 알 수 있긴 하다 . 

그래도 확실히 체크를 해 보자. 




# fdisk -l




Disk /dev/sda: 500.1 GB, * bytes

...


Disk /dev/sdb: 500.1 GB, 500107862016 bytes


Disk /dev/sdb doesn't contain a valid partition table


Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes


Disk /dev/sdc doesn't contain a valid partition table







cat /sys/block/sda/queue/rotational 를 했을 때 

hard 디스크면 1, SSD 이면 0의 값이 나온다. 


여기서 sda는 결과를 알고 싶은 디스크 이름으로 변경해야 한다. 




# cat /sys/block/sda/queue/rotational

0

# cat /sys/block/sdb/queue/rotational

0

# cat /sys/block/sdc/queue/rotational

1



예상대로 500 기가의 2개의 디스크는 SSD이고 

대용량의 디스크는 하드 디스크인 것을 확인하였다.