[docker] 기본 쉘 바꾸기 (dash -> bash)

  우분투의 기본 쉘은 dash 이다. $ ls -al /bin/sh lrwxrwxrwx 1 root root 4  1월 12 15:35 /bin/sh -> dash 하지만, 개발용 shell script들 중 bash 용으로 작성된 것들이 많다. shell script도 POSIX standard 를 준수하면 좋겠지만, 당장 빌드 에러가 shell script 때문에 발생하고, 개발 진행이 안되면 난감하다. dash 대신 bash로 기본 쉘을 바꾸자. $ sudo dpkg-reconfigure dash No 라고 답변. 아래처럼 바뀐다. $ ls -al /bin/sh lrwxrwxrwx 1 root root 4  1월 12 22:48 /bin/sh -> bash 관련 정보는 아래 링크에 있다. https://wiki.ubuntu.com/DashAsBinSh ====================================================== 추가: shell script를 제대로 작성했는데 자꾸 syntax error가 난다면 의심해볼만하다. dash 환경으로 기본 설정되어 있는 쉘을 bash로 바꿔주자! 출처:  https://0561blue.tistory.com/61  [공대생으로 살아가기]

[Ubuntu] mail 명령어

 mail -u ubuntu t 메일번호 : 메일 읽기 h : 메세지 리스트 출력 h : 메일박스 첫 리스트 출력 h 2 : 2번부터 출력 n : 다음 메일 e 메일번호 : ex명령 모드로 메일 편집 f 메일번호 : 지정된 리스트 출력 f 1-3 d 메일번호 : 메일 삭제 d 1-3 s 메일번호 : 지정된 메일을 파일로 저장 s 1 mail.txt u 메일번호 : 삭제된 메일 복구 u 1 : (q를 실행하기 전까지 가능) R 메일번호 : 해당 번호 메일 보낸 사람에게 담방 메일 보내기 r 메일번호 : 지정된 메일에 대해 모든 참조자를 포함하여 답변 보냄 pre 메일번호 : make messages go back to /usr/spool/mail m 유저 리스트 : 원하는 유저에게 메일을 보냄 q : mail 모드에서 모든 상태를 저장후 종료 mail 모드에서 한번 읽었던 메일은 q명령으로 빠져나갈 경우 메일박스에서 삭제되고 mbox 파일로 저장됨 x : mail 초기 상태로 돌려 놓고 나감 ! : 쉘 명령을 실행 !pwd : pwd 명령을 실행 cd 디렉토리 : 디렉토리 이동 출처:  https://erider.co.kr/127  [시간을 달리는 e라이더 <전기 자전거 여행, IT 스토리>]

[Django] gmail 연동

이미지
[gmail security enable] 구글에서 gmail 계정을 만든다. gmail계정으로 로그인한 후 상단 오른쪽에 있는 "설정"아이콘 클릭하고 "모든 설정 보기"버튼을 클릭한 후 " 전달 및 POP/IMAP " 탭을 클릭하여 "IMAP 사용"을 활성화한다. gmail계정으로 로그인한 후 상단 오른쪽에 끝에 있는 "이미지"아이콘을 클릭하고 "Google계정관리"을 클릭한다. 그리고 "보안" 메뉴에서 "Google에 로그인" 섹션에 있는 "2단계 인증"을 생성한다. 그리고 "보안" 메뉴에서 "Google에 로그인" 섹션에 있는 "앱 비밀번호"를 생성한다. (16자리 자동생성되며 Django settings.py의  EMAIL_HOST_PASSWORD에 사용한다. ) [settings.py] EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_HOST_USER = 'prefity.mail@gmail.com' EMAIL_HOST_PASSWORD = 'ufosivemfplstpdi' DEFAULT_FROM_MAIL = EMAIL_HOST_USER [Email 사용법] from django.core.mail import EmailMessage msg = EmailMessage('title', 'message', 'biddingcar@gmail.com', ['prefity@gmail.com']) msg.send()

[Pandas] Dataframe의 값을 유일하게 식별하고 카운트하기

 import pandas as pd df = pd.DataFrame({'A':[1,2,3,2,3,2], 'B':[2,3,4,3,4,3], 'C':[3,4,5,4,5,4]}) df1 = df.apply(pd.Series.value_counts) df1      A    B    C 1  1.0  NaN  NaN 2  3.0  1.0  NaN 3  2.0  3.0  1.0 4  NaN  2.0  3.0 5  NaN  NaN  2.0 df2 = df1.fillna(0) # Nan to 0 df2      A    B    C     1  1.0  0.0  0.0  2  3.0  1.0  0.0  3  2.0  3.0  1.0  4  0.0  2.0  3.0  5  0.0  0.0  2.0  df2['D'] = df2['A'] + df2['B'] + df2['C'] df2       A    B    C    D 1  1.0  0.0  0.0  1.0 2  3.0  1.0  0.0  4.0 3  2.0  3.0  1.0  6.0 4  0.0  2.0  3.0  5.0 5  0.0  0.0  2.0  2.0

[Linux] systemd 상세옵션

  systemctl은 systemd의 LGPL 라이센스를 따르는 시스템 자원 통합 관리 도구이다 설정 파일은 /etc/systemd 아래에 위치하며, 각 파일 별로 [Unit], [Service], [Install]로 구성됨 - systemd 는 리눅스 커널 API 로 설계된 시스템 관리 데몬이다. - Lennart Poettering 와 Kay Sievers 가 처음 개발 하였다. (GNU 약소 GPL 라이선스) - 시스템이 부팅하는 동안 데몬 스크립트를 병렬로 수행 할수 있도록 설계하였다. 병렬로 서비스를 수행하기 때문에 서비스간의 종속성 및 실행 순서 관리가 매우 중요하다. - 프로세스간의 통신은 D-bus 에서 담당한다. (소켓, D-bus 지원) - 전통적인 Sysvinit 의 경우 서비스 감시 기능이 부족하다는 단점이 있다. - 전통적인 Sysvinit 의 경우 서비스간 종속성을 관리하지 못한다. - 전통적인 Sysvinit 의 경우 볶잡한 스크립트를 필요로 한다. (start, status, stop 등 각각에 대한 스크립팅이 필요하다.) -> 이건 확실히 그렇습니다. 데몬 관리가 어려움... - 전통적인 Sysvinit 의 경우 udev 관리 면에서 부적당하다. - systemd 서비스 등록 샘플 [Unit] Description=Sample Service Requires=local-fs.target After=local-fs.target [Service] Type=simple PIDFile=/var/run/sample.pid ExecStart=/usr/sbin/sampled -d ExecStop=/usr/sbin/sampled -k [Install] WantedBy=multi-user.target === [Unit] 섹션 === Description= 해당 유닛에 대한 상세한 설명을 포함한다. Requires= 상위 의존성을 구성한다. 목록의 유닛이 정상적일 경우 유닛이 시작된다. (필요 조건) RequiresOverridable...