반응형

출처 : 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


반응형
반응형

출처 : http://serverfault.com/questions/62411/how-can-i-sort-du-h-output-by-size

크기로 du -h의 출력을 정렬할 수 있나요?

저는 du 출력을 사람이 읽을 수 있는 목록으로 얻고 싶습니다.

하지만, du는 "크기로 정렬"이란 옵션이 없기 때문에 sort로 pipe하는 것은 사람이 읽을 수 있도록 하는 플래그(human readable flag)가 작동하지 않습니다.

예를 들어 다음 명령을 실행하면

du | sort -n -r 

(내림차순으로) 크기로 정렬된 디스크 사용량이 출력됩니다.

du |sort -n -r
65108   .
61508   ./dir3
2056    ./dir4
1032    ./dir1
508     ./dir2

하지만, 사람이 읽을 수 있도록 하는 플래그(human readable flag)를 사용하여 실행하면 적절하게 정렬되지 않습니다.

du -h | sort -n -r
508K    ./dir2
64M     .
61M     ./dir3
2.1M    ./dir4
1.1M    ./dir1

크기로 du -h를 정렬하는 방법을 아시는 분이 계신가요?


39 개의 답변 중 1개의 답변

2009년 8월에 GNU coreutils 7.5 가 나오고 부터, du -h와 같은 종류의 접미사를 사용하는 -h 파라미터를 sort에서 쓸 수 있습니다.

du -hs * | sort -h

만약 -h를 지원하지 않는 sort를 사용하신다면, GNU Coreutils를 설치할 수 있습니다. 다음은 오래된 Mac OS X 입니다.

brew install coreutils
du -hs * | gsort -h

다음은 sort 매뉴얼 내용입니다.

-h, --human-numeric-sort 사람이 읽을 수 있는 숫자를 비교한다 (예시, 2K 1G)

반응형
반응형

리눅스 shell에 색깔 입히기


bash shell일 경우
~/.bashrc, ~/.bash_profile, ~/.profile 중에서 다음 환경변수를 세팅하시면 됩니다.
PS1='\[\e[1;32m\]'

Korn shell일 경우
다음 환경변수를 세팅하시면 됩니다. bash shell과는 다르게 echo구문이 추가가 됩니다.
PS1="$(echo -e "\033[35mLinux\033[00m")"


반응형
반응형

expect

Expect는 스크립트에 따라서 다른 상호작용하는 프로그램과 대화하는 프로그램입니다. 번역된 언어는 대화를 하는 데 있어서 분기와 높은 수준의 제어 구조를 제공합니다. 게다가, 사용자는 스크립트로 원할 때 직접 상호작용하면서 제어를 할 수 있습니다.

Expect는 사용자 수준의 어떤 프로그램이나 작업에 대한 명령어로서 실행될 수 있습니다. Expect는 실제로 동시에 여러 프로그램과 대화할 수 있습니다.

사용예시

https://github.com/SDRLurker/shell

mssh.sh

mssh.sh 실행할서버 SSH포트 "명령"

shell 내의 sexecute() 함수가 있습니다. 

ssh로 서버에 접속하여 $PW를 보내 비밀번호를 자동으로 입력하는 기능을 합니다.

# 원격 서버에 접속하여 shell 명령을 수행합니다.
sexecute()
{

local IP=$1
local PORT=$2
local PW=$3
local MSG=$4 

if [ -z $PORT ]; then
    PORT=22
fi

echo "ssh -p$PORT $IP $MSG"
expect <<EOF
set timeout -1
spawn ssh -p$PORT $IP $MSG # SSH로 $IP와 $PORT로 접속해 $MSG명령을 실행하기 위해 접속
expect "password:"                    # SSH에서 password라는 글자를 받으면 다음 줄로 넘어간다.
send "$PW\r"                              # 비밀번호 $PW 문자열을 입력한다.
expect eof
EOF

}

 


출처

http://linux.die.net/man/1/expect

반응형
반응형

출처 : http://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine

ssh를 사용하여 원격 컴퓨터의 shell script를 실행하는 방법?

저는 원격 컴퓨터에서 로컬 shell script(윈도우즈/리눅스)를 실행해야 합니다.

A 컴퓨터와 B컴퓨터 모두에서 설정된 ssh가 있습니다. 저의 스크립트는 B컴퓨터에서 수행할 내용이 A컴퓨터에 있습니다.

로컬과 원격 컴퓨터는 윈도우즈나 유닉스 기반의 시스템일 수 있습니다.

plink/ssh를 사용하여 이를 실행할 수 있는 방법이 있을까요?


20개의 답변 중 1개의 답변

만약 A 컴퓨터가 Windows box라면 -m 파라미터와 함께 Plink(PuTTY의 일부)를 사용하실 수 있고 원격 서버에 로컬(내 컴퓨터의) 스크립트를 실행할 것입니다.

plink root@MachineB -m local_script.sh

만약 A컴퓨터가 유닉스를 기반으로한 시스템이면 다음처럼 사용할 수 있습니다.

ssh root@MachineB 'bash -s' < local_script.sh

이를 수행하기 위해 스크립트를 원격 컴퓨터로 복사하실 필요가 없습니다.


(번역과 관련없는) 추가내용

ssh 뿐만이 아니라 rsh도 똑같은 방법으로 실행이 가능합니다.

ssh root@MachineB 'bash -s' < local_script.sh

ssh 계정명@원격호스트(IP) 수행할명령어 < 로컬_스크립트.sh

만약 원격 컴퓨터의 프로그램이 수행이 되지 않는다면

로컬_스크립트.sh에서 export LD_LIBRARY_PATH를 원격컴퓨터에 맞게 설정하셔야 됩니다.

예) export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib

반응형

'리눅스 shell' 카테고리의 다른 글

expect  (0) 2015.08.09
리눅스 쉘에서 '>/dev/null 2>&1'의 뜻이 무엇인가요?  (2) 2015.07.10
rsync  (0) 2015.02.17
왜 쉘 명령어가 \(백슬래시)로 시작하나요?  (0) 2014.07.08
fg  (0) 2011.08.03
반응형

출처 : http://stackoverflow.com/questions/15691977/why-start-a-shell-command-with-a-backslash

왜 쉘 명령어가 \(백슬래시)로 시작하나요?

\curl -L https://get.rvm.io | bash -s stable

왜 이 명령어가 '\'로 시작하나요 ? 여기를 클릭하면 제가 본 사이트입니다.

2개의 답변

alias curl='curl --some --default --options'

만약 당신이 curl 이란 alias를 설정해 놓았고 이 alias를 사용하고 싶지 않다면 백슬래시를 넣음으로써 alias를 사용하게 않고 curl 바이너리를 직접 실행하도록 합니다.

이는 현재 사용중인 쉘(shell)에서만 적용됩니다. alias는 쉘 스크립트에서는 효과가 없기 때문에 거기엔 넣을 필요가 없습니다. 




 Bourne/POSIX 쉘 명세서는 says 현재 사용중인 쉘에서 alias 치환은 명령어가 인용에 사용하는 문자들이 있을 때 억제된다고 설명이 되어 있습니다. 백슬래시가 그 중 한 방법이고 작은 따옴표와 큰 따옴표를 통해 다른 알려진 방법으로 인용하는 방법도 있습니다. 다음 모두는 alias 치환을 억제할 것입니다.
 \curl
 cur\l
 \c\u\r\l
 "c"url
 "curl"
 "c""u""r""l"
 'curl'
 'cu'"rl"

 \curl 를 사용하는 것은 가장 보편적이고 읽기 쉬운 방법입니다. 이는 표준화된 특징이기 때문에 모든 Bourne 쉘에서 잘 작동할 수 있습니다.

반응형

'리눅스 shell' 카테고리의 다른 글

ssh를 사용하여 원격 컴퓨터의 shell script를 실행하는 방법?  (0) 2015.03.26
rsync  (0) 2015.02.17
fg  (0) 2011.08.03
iostat  (0) 2011.08.03
ntsysv  (0) 2011.07.12

+ Recent posts