윈도우에서 해시값을 얻기 위해 PowerShell을 사용할 수 있다.

 

PowerShell 5버전 이상에서는 Get-FileHash라는 유틸을 사용할 수 있지만

 

PS C:\> Get-FileHash $pshome\powershell.exe | Format-List
Algorithm : SHA256
Hash      : 6A785ADC0263238DAB3EB37F4C185C8FBA7FEB5D425D034CA9864F1BE1C1B473
Path      : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

 

윈도우 7을 사용하고 있는 PC에서는 PowerShell 버전이 낮아 사용할 수 없다.

아래와 같이 CertUtil 명령어를 사용할 수 있다.

 

PS C:\Users\Administrator\Desktop> certutil -hashfile .\rhel-5-client-x86_64-disc7.iso SHA256
SHA256 해시(.\rhel-5-client-x86_64-disc7.iso 파일):
f0 62 da 01 42 b8 a5 62 be 34 84 24 0b a0 7a d0 08 79 46 8e 8e c3 d9 bb 4d f8 61 5a 5c 23 9d cc
CertUtil: -hashfile 명령이 성공적으로 완료되었습니다.

Posted by dcmru
,
쉘 스크립트에서 read 명령어를 이용하여 값을 입력 받을 때 비밀번호를 입력 받을 때 처럼 화면 출력을 끄는 방법

1. stty 명령어 이용

#!/bin/sh

stty -echo
read RVAL
stty echo

echo $RVAL

exit 0

2. read 명령어에 -s 옵션 사용하여 사이런트 모드로 입력, -r 옵션은 역슬래시(\)를 이스케이프로 받아들이지 않는다.
   (리눅스에서는 확인하였고, 솔라리스에서는 -s 옵션이 없으므로 확인 필요)

read -s RVAL
Posted by dcmru
,
스크립트를 실행할 때 현재 실행한 스크립트의 절대경로를 구해야 하는 경우가 있다.

절대경로를 구하는 명령어가 있는것 같지만 OS 국한적으로 그런 명령어를 가지고 있지않은 OS 또한 있다.

내가 만든 방법은 아래와 같다.
#!/bin/sh
EXEC_FILE="$0"
BASE_NAME=`basename "$EXEC_FILE"`
if [ "$EXEC_FILE" = "./$BASE_NAME" ] || [ "$EXEC_FILE" = "$BASE_NAME" ]; then
        FULL_PATH=`pwd`
else
        FULL_PATH=`echo "$EXEC_FILE" | sed 's/'"${BASE_NAME}"'$//'`
        cd "$FULL_PATH"                 > /dev/null 2>&1
        FULL_PATH=`pwd`
fi

설명을 하자면,

먼저 스크립트를 실행한 이름으로 base name을 구하고,

./으로 실행한 스크립트 또는 이름으로 실행한 스크립트이면, 실행위치에서 pwd로 절대경로를 구했고,

상대경로로 실행하거나 경로에 링크가 걸려있다면, 실행 경로의 끝에 위치한 스크립트 이름만 제거하고,
 
그경로로 이동한 후 pwd로 절대경로를 구한 것이다.

FULL_PATH 변수를 찍어 보면 절대경로가 들어가 있는것을 볼 수 있다.

쉽게 만들지는 못했지만, 예전에 kldp에 질의도 하고해서 만든 결과로 정리 차원에서 글을 써본다.
Posted by dcmru
,

본 쉘 프로그래밍을 할 때 화면에 문자를 표시해야할 때가 많다.
이럴 땐 echo 명령어보다 printf 명령어를 이용해서 표시하면, OS간의 옵션이 다른 echo 명령어보다 일관성이 있게 화면에 표시가 가능하다.
사용법은 --help 옵션을 입력하거나 man 페이지를 보면 나오지만 간단한 사용법은 C언어의 printf 함수와 비슷하다.
예를 들면, 아래와 같이 사용하면 된다. 명령어 다음에 스페이스로 한칸을 띄우고, 쌍따옴표로 묶은 중간에 타이핑을 하면된다.

printf "This is test.\n"

변수를 출력해야한다면, 문자열 중간에 $변수명을 넣어주면된다.
A="apple"
printf "The value is $A.\n"

화면에 출력되는 값는 "The value is apple." 이 된다.
Posted by dcmru
,
find 명령어를 이용하여 파일이름에 특수문자가 있으면, 찾아주는 방법이다.

find . -name '*[+{;"\=?~()<>&*|$ ]*' -print

위의 명령어를 실행하면, [] 사이에 있는 문자를 포함하는 파일들을 찾아준다.
간단하게 공백만 들어가있는 파일이름은 아래 옵션으로 실행하면 된다.

find . -name "* *" -print

예전에 리눅스 서버에 해킹을 당한적이 있다.
어느 순간 ls -al 로 디렉토리를 보는중 이상한 파일이름이 있음을 알아차렸다.
"\" 로 시작하는 파일이름이었는데, 무심코 보면 숨김파일 같다.
특수문자를 포함하는 파일을 찾았으면, 간단하게 삭제까지 할 수 있다.
"|" 파이프로 출력을 리다이렉션 한 후 xargs 를 이용하여 "xargs rm -f {}" 하면 된다.

find . -name '*[+{;"\=?~()<>&*|$ ]*' -print | xargs rm -f {}

만약에 정말 숨김파일을 찾고자 한다면, "." 으로 시작하는 파일을 찾으면 된다.

find . -name ".*" -print
Posted by dcmru
,