반응형

출처

https://serverfault.com/questions/59140/how-do-diff-over-ssh


ssh로 원격 diff 하는 방법

ssh로 접속만이 가능한 원격 머신에 있는 파일이나 폴더를 diff를 어떻게 할 수 있을까요?

------

14개의 답변 중 1 개의 답변만 추려냄.

Bash의 process substitution으로 당신은 원격 diff를 하실 수 있습니다.

diff foo <(ssh myServer 'cat foo')

또는 둘다 원격 서버라면 다음처럼 가능합니다.

diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')


반응형
반응형

출처

https://stackoverflow.com/questions/10856447/sed-command-find-and-replace-in-even-lines-of-a-file


sed에서 파일의 짝수 줄만 찾아 치환하는 명령

저는 이 stackoverflow에서 신입입니다. 저는 SED를 사용하여 파일의 짝수 줄만 표현식으로 치환하고 싶습니다. 제 문제는 원래 파일의 변화는 원래 파일에서 변한 내용을 저장하는 방법을 생각할 수 없다는 점입니다. (예: 파일에서 변한 내용을 덮어쓰는 방법) 저는 다음을 시도해 보았습니다.

sed -n 'n;p;' filename | sed 's/aaa/bbb/'

하지만 이는 변한 내용을 저장할 수 없습니다. 이에 대한 당신의 도움에 감사드립니다.

------

4개의 답변 중 1 개의 답변만 추려냄.

다음을 시도하세요.

sed -i '2~2 s/aaa/bbb/' filename

-i 옵션은 sed에게 해당 filename에서 작동하도록 표준출력(stdout)으로 수정된 버전을 쓰지 않고 즉 원래 파일을 나두지 않고 파일의 변경 내용을 적용하도록 합니다. 2~2부분은 명령어를 통해 적용되어야 할 sed의 줄(라인)에 대한 주소입니다. 2~2는 짝수 줄만 편집(수정)함을 의미합니다. 1~2는 홀수 줄만 편집(수정)함을 의미합니다. 5~6는 6줄마다 편집(수정)하고 5번째 줄부터 시작합니다.

-- 역자 추가 내용--

참고주소

https://www.gnu.org/software/sed/manual/html_node/Addresses.html


반응형
반응형

출처 : https://stackoverflow.com/questions/4585929/how-to-use-cp-command-to-exclude-a-specific-directory

특정 디렉터리를 제외하고 'cp' 명령 사용하는 방법

저는 특정 하위 디렉터리(sub-directory)에서 몇 개의 파일을 제외하고 그 디렉터리의 모든 파일을 복사하고 싶습니다. 저는 cp 명령어는 --exclude 옵션이 없는 것을 알게 되었습니다. 이를 어떻게 할 수 있을까요?

19개 답변 중 1개

rsync는 빠르고 쉽습니다.

rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
rsync -av --progress 원본폴더 /대상폴더 --exclude 제외할폴더

당신은 --exclude를 여러번 사용할 수 있습니다.

rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherfoldertoexclude
rsync -av --progress 원본폴더 /대상폴더 --exclude 제외할폴더 --exclude 또다른제외할폴더

--exclude 뒤의 폴더에 thefoldertoexclude 디렉터리는 sourcefolder, 즉 sourcefolder / thefoldertoexclude와 관련이 있습니다.

또한 실제 명령을 실행하기 전에 무엇이 복사되는 지 보기만 하려면 -n을 추가할 수 있고 괜찮다면 명령줄에서 -n을 제거하면 됩니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/37201918/spark-job-keep-on-running

Spark 작업을 실행한 채 유지하기

저는 다음 명령을 사용하여 ambari-server에서 저의 Spark 작업을 제출 하였습니다.

./spark-submit --class  customer.core.classname --master yarn --numexecutors 2 --driver-memory 2g --executor-memory 2g --executor-cores 1 /home/hdfs/Test/classname-0.0.1-SNAPSHOT-SNAPSHOT.jar newdata host:6667

이 명령은 잘 작동하였습니다.

하지만, 명령 프롬프트를 닫거나 그 작업을 kill하려고 할 때 그 작업은 실행한 채 유지하여야 합니다.

어떠한 도움이든 감사합니다.


4개 답변 중 1개의 답변

몇 가지 방법으로 이를 이룰 수 있습니다.

1) nohup을 사용하여 백그라운드(background)로 드라이버(driver) 프로세스를 spark-submit으로 실행할 수 있습니다.

nohup  ./spark-submit --class  customer.core.classname \
  --master yarn --numexecutors 2 \
  --driver-memory 2g --executor-memory 2g --executor-cores 1 \
  /home/hdfs/Test/classname-0.0.1-SNAPSHOT-SNAPSHOT.jar \
  newdata host:6667 &

2) 드라이버 프로세스가 다른 노드에서 실행되도록 배포 모드에서 클러스터로 실행하십시오.

반응형
반응형

출처

https://unix.stackexchange.com/questions/223543/get-the-date-of-last-months-last-day-in-a-shell-script


shell 스크립트에서 지난 달의 마지막 날짜 구하기

어떻게 처리할 날짜에 기반하여 지난 달의 날짜를 구할 수 있습니까?

예시:

* 처리할 날짜 = 15jan2015, 2015년 1월 15일

* 예상 날짜 = 31dec2014, 2014년 12월 31일

* 처리할 날짜 = 15feb2015, 2015년 2월 15일

* 예상 날짜 = 31Jan2015, 2015년 1월 31일

------

4개의 답변 중 1개의 답변만 추려냄.

GNU의 date로 

몇 가지 shell은 날짜 조작 지원이 내장되어 있습니다.

$ date +%d%b%Y
16Aug2015
$ date -d "$(date +%Y-%m-01) -1 day" +%d%b%Y
31Jul2015

ksh93로 

$ printf "%(%d%b%Y)T\n" "1st day, yesterday"
31Jul2015

zsh로 

$ zmodload zsh/datetime
$ strftime -s d %Y-%m-01-12 $EPOCHSECONDS
$ strftime -rs d %Y-%m-%d-%H $d
$ strftime %d%b%Y $((d-86400))
31Jul2015


반응형
반응형

출처 : https://stackoverflow.com/questions/13322485/how-to-get-the-primary-ip-address-of-the-local-machine-on-linux-and-os-x

리눅스와 OS X에서 현재 컴퓨터의 중요 외부 IP를 알아내는 방법

저는 127.0.0.1보다 현재 컴퓨터(localhost)의 중요(첫 번째) IP 주소를 리턴하는 command를 찾고 있습니다.

이 해결책은 적어도 리눅스(Debian과 Redhat)과 OS X 10.7+에서 작동해야 합니다.

저는 둘다 ifconfig로 가능하지만 이 플랫폼 사이에 출력이 일관성이 없다는 게 문제입니다.


30개의 답변 중 2개의 답변

ifconfig로 부터 grep을 사용하여 IP 주소를 걸러낼 수 있습니다.

ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'

아니면 sed

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

만약 특정 인터페이스인 wlan0, eth0, 등등에만 관심이 있다면 다음처럼 사용가능합니다.

ifconfig wlan0 | ...

예를 들어 myip라 불리는 당신이 명령어를 만들어 .bashrc에 명령어를 별명(alias)으로 사용할 수 있습니다.

alias myip="ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'"

더 간단한 방법은 hostname -I(hostname -ihostname의 옛날 버전에서 되므로 댓글을 보세요.) 입니다. 하지만 리눅스에서만 됩니다.


리눅스에서(OS X 아님) 다음 명령어로 가능합니다.

hostname --ip-address
반응형
반응형
출처 

http://www.linuxproblem.org/art_9.html

비밀번호 없이 SSH 로그인

목표

당신이 리눅스를 사용하고 당신의 작업을 자동화하기 위해 OpenSSH를 사용하기 원합니다. 그래서 당신은 host A / 사용자 a에서 호스트 B / 사용자 b로 자동 로그인이 필요합니다. 당신은 쉘 스크립트(shell script)로 ssh를 호출하고 싶기 때문에 비밀번호를 입력하길 원하지 않을것입니다.

방법

우선 호스트 A에서 a 사용자로 로그인하여 인증 키 쌍을 생성합니다. passphrase는 입력하지 않습니다.

a@A:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa):
Created directory '/home/a/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A


이제 호스트 B에서 b 사용자로 ssh 프로그램을 사용하여 ~/.ssh 디렉터리를 만듭니다. (디렉터리가 이미 있을지 모르지만 괜찮습니다.)

a@A:~> ssh b@B mkdir -p .ssh
b@B's password:


마지막으로 a 사용자의 새로운 공개키를 b@B:.ssh/authorized_keys에 추가하고 마지막으로 b 사용자의 비밀번호를 입력합니다.

a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
b@B's password:


이제부터 비밀번호 없이 호스트 B의 b 사용자로 로그인 할 수 있습니다.

a@A:~> ssh b@B


독자중 한명으로부터 당신의 SSH 버젼에 따라 당신은 다음 작업을 해야할 수 있습니다. 

  • .ssh/authorized_keys2에 public key를 넣습니다.
  • .ssh 디렉터리 권한을 700으로 변경(chmod)합니다.
  • .ssh/authorized_keys2의 권한을 640으로 변경합니다.

다음 출처 : https://opentutorials.org/module/432/3742

역자 추가내용 : 호스트 B의 b 사용자는 .ssh 디렉터리에 다음 권한처럼 설정이 필요합니다.

1
2
3
4
5
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub 
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts


반응형
반응형
출처 

https://unix.stackexchange.com/questions/3586/what-do-the-numbers-in-a-man-page-mean

man 페이지에 숫자들은 무엇입니까?

예를 들면, 제가 man ls를 쳤을 때 저는 LS(1)볼 수 있습니다. 하지만 man apachectl을 쳤을 때 APACHECTL(8)을 볼 수 있었고 man cd를 쳤다면 cd(n)로 끝났습니다.

저는 괄호 안에 숫자의 의미가 무엇인지 궁금합니다.

 

------

8개의 답변 중 1 개의 답변만 추려냄.

 

숫자는 페이지의 매뉴얼이 무슨 섹션인가를 뜻합니다. 1은 사용자 명령이고 8은 시스템 관리 도구입니다. man 페이지 그 자체(man man )는 이를 설명하고 그 표준을 보여줍니다.

매뉴얼 섹션매뉴얼의 표준 섹션은 다음을 포함합니다.1 사용자 명령2 시스템 콜3 C 라이브러리 함수4 장치와 특별한 파일5 파일 포멧과 규칙6 게임 외7 기타8 시스템 관리 도구 및 대몬매뉴얼 배포는 추가적인 섹션을 주로 포함하는 그 세부사항에 대한 매뉴얼 섹션을 사용자 정의합니다.

다른 섹션에 특정 용어가 있을 수 있습니다. (예 섹션 1에 shell 명령으로

printf

와 섹션 3에

stdlib

 라이브러리 함수로써 printf) 이런 경우 man 명령어에 섹션 번호를 전달하여 원하는 것을 선택하거나 man -a를 사용하여 일치하는 모든 페이지를 연속으로 표시할 수 있습니다.

$ man 1 printf $ man 3 printf $ man -a printf

man -k (apropos 명령과 같음)를 통해 용어가 어느 섹션에 속하는지 물어볼 수 있습니다. 이는 부분문자열이 일치 하더라도 찾을 것입니다. (

man -k printf

를 실행한다면 sprintf를 보여줄 것입니다.) 그래서 이를 제한하려면

^용어

를 사용해야 합니다.

$ man -k '^printf' printf (1) - format and print data printf (1p) - write formatted output printf (3) - formatted output conversion printf (3p) - print formatted output printf [builtins] (1) - bash built-in commands, see bash(1)

섹션에는 때때로 하위 섹션이 포함될 수 있습니다 (예 : 위의 1p 및 3p의 p). p 하위 섹션은 POSIX 사양을 위한 것입니다. x 하위 섹션은 X Window System 문서 용입니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/12845206/check-if-file-exists-on-remote-host-with-ssh

ssh로 원격 호스트의 파일이 존재하는 지 확인

저는 원격 호스트에서 특정 파일이 있는지 확인하고 싶습니다. 그래서 다음을 시도했습니다.

$ if [ ssh reg@localhost -p 19999 -e /home/reg/Dropbox/New_semiosNET/Research_and_Development/Puffer_and_Traps/Repeaters_Network/UBC_LOGS/log1349544129.tar.bz2 ] then echo "okidoke"; else "not okay!" fi
-sh: syntax error: unexpected "else" (expecting "then") 

13개의 답변 중 1 개의 답변

여러 답변에 근거하여 다음처럼 짧게 사용하는 방법이 있습니다.

ssh -q $HOST [[ -f $FILE_PATH ]] && echo "File exists" || echo "File does not exist";

-q는 quiet 모드입니다. 이는 warning과 메세지를 덜 나오게 할 것입니다.

@Mat님이 언급했듯이 이처럼 테스트하는 것의 이득은 -f-nt, -d, -s... 등과 같은 다른 테스트 연산자로 쉽게 바꿀 수 있기 때문에 좋습니다.

테스트 연산자: http://tldp.org/LDP/abs/html/fto.html

반응형
반응형

출처 

http://stackoverflow.com/questions/27141238/is-there-any-time-restriction-for-cloud9-ide

cloud9.ide에서 시간과 관련된 제약이 있습니까?

저는 Cloud9 IDE에서 cron tab에서 빠른 php 업데이트를 실행하려 합니다. 여기에 제가 설정한 crontab -l 이 있습니다.

*/2 * * * * php /home/ubuntu/workspace/public_html/updater.php

저는 간단한 php 대신에 "whereis php"로부터 데이터를 사용하려고 하지만 아무 것도 안하고 있습니다. 여기에 제 질문이 있습니다. C9의 cron에 대해 예를 들어 최소한 1시간 같은 시간과 관련된 제약이 있습니까? 아니면 뭔가 제가 잘못한 것이 있을까요? cron은 이미 재시작 하였습니다.

---

3 개의 답변 중 1 개의 답변만 추려냄.

Cron 대몬이 시작되지 않았습니다. 당신은 수동으로 그것을 시작해야 합니다. px -aef | grep cron 의 출력은 grep 을 통해 cron이 실행되지 않았음으로 보여줍니다. 

sudo cron start


반응형

+ Recent posts