728x90
반응형

 

passwd에 stdin으로 패스워드 전달하기

usernam="root"
password="12345"
echo $password | passwd --stdin $username

 

여러 파일에서 특정 키워드 찾기

keyword="alias"
path="/root/"
filename=".bash_profile"
grep $keyword `find $path -name $filename`

 

여러 파일에서 특정 문자열 변경하기

source="127.0.0.1"
dest="192.168.0.100"
path="/etc/"
filename="ifcfg-*"

sed -i s/$source/$dest/g `find $path -name $filename`

 

여러 파일에서 (특수기호 공백 제외하고) 특정 문자열 검색

#!/bin/bash
egrep -v '^[[:space:]]*(#.*)?$' `find $path -name $filename` | grep "$1" | grep "$2"

 

입력받은 알파벳 대문자, 소문자로 변경하기

read input
input="`echo $input | tr [A-Z] [a-z]`"

 

ssh-key 원격 서버에 복사하기

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.123

 

Reverse SSH로 원격지에서 스크립트 실행하기

scp -P 22 ./script_file.sh root@192.168.0.123:/root
ssh root@192.168.0.123 -p 22 "/bin/bash < script_file.sh"

 

tar.gz 압축 쉽게하기

tar -czvf $1.tar.gz $1

 

압축해제 함수

function tar_xvzf() {
	local File=$1.tar.gz
	local Dir=`echo $File | sed 's/.tar.gz//g'`	
	
	if [[ ! -d $Dir ]]; then
		#echo $Dir " - not exist"
		if [[ ! -f $File ]]; then
			#echo $File " - exist"
			echo "<Start Release - $File >"

			tar -xvzf $File

			echo "<End Release - $File >"
		fi
	fi

	#echo ""
}

tar_xvzf "test*"

 

압축파일 원격지에 전송하고 해제하기

scp $1 root@192.168.0.123:/root
ssh root@192.168.0.123 "tar -xzvf $1"

 

오늘 날짜 구하기

local date_today=`date "+%Y%m%d"`
echo ${date_today}
728x90
반응형
728x90
반응형

명령어로 휴지통 비우기

아래 명령어를 활용하면 파워쉘로 휴지통을 비울 수 있다. 

PowerShell.exe -NoProfile -Command Clear-RecycleBin

 

만약 cmd에서 지우고 싶다면 아래처럼 활용이 가능하다.

cmd.exe /c "echo Y|PowerShell.exe -NoProfile -Command Clear-RecycleBin"

 

윈도우 작업 스케줄러 활용하기

위 명령어들을 정해진 날짜, 시간, 조건 등에 자동으로 시행하기위해 윈도우 작업 스케줄러를 사용했다.

 

작업 스케줄러를 열어준 뒤 새 작업을 만들어준다.

이름, 설명 지정

 

트리거 탭으로 이동해 새로만들기 버튼을 눌러주면, 작업이 수행되는 조건(트리거)를 지정할 수있다.

매일 18시에 자동으로 실행되게 설정해 주었다.

트리거 만들기

 

동작 탭으로 이동해서 위의 코드를 프로그램/스크립트에 붙여넣기 해주고 확인을 누른다.

새 동작 만들기

 

확인을 누르면 아래와 같은 팝업이 나오는데 그냥 예(Y) 버튼을 눌러주면 된다.

 

마지막으로 확인을 눌러 등록하면, 이제부터 매일 18시에 휴지통이 자동으로 비워진다.

혹시 잘 동작하는지 확인하고 싶다면 등록된 스케줄을 우클릭하면 직접 실행해볼 수 있다.

728x90
반응형

'프로그래밍 > Shell Script' 카테고리의 다른 글

[Script] 쉘 스크립트 모음  (0) 2022.09.01
[PowerShell] File_Share.ps1  (0) 2021.10.10
[PowerShell] 파워쉘 사용법 정리  (0) 2021.09.22
728x90
반응형

1. 개요

 - 같은 라우터 내부에서 외부 인터넷이 제한되었으며, 파일을 공유해야할 때 작성하여 사용

 - 같은 공유기 내부의 사설 IP(Private IP)를 사용하여 TCP 소켓 스트림 방식으로 파일을 송수신함

 

2. 사용법

 - 원하는 경로에 File_Share.ps1, send.bat, recv.bat의 3개 파일을 위치시키고, 동일 위치에 전송할 대상을 send.zip으로 압축해 넣어둔다.

 - 파일을 받을 대상 PC에서 recv.bat을 실행 시키고  send.zip이 위치한 PC에서 send.bat을 실행한다.

 

3. 코드 (파워쉘 스크립트 작성)

# File_Share.ps1
param ( 
    [int] $sel = 1,
    [string] $IP = "127.0.0.1",
    [int] $Port = 29800,
    [String] $Send_FileName = "send.zip",
    [String] $Recv_FileName = "recv.zip"
) 

Function Recv_File {
    Param (
        [int] $Port = 29800,
        [String] $FileName = "recv.zip",
        [int] $ChunkSize = 1mb
    ) 

	# Socket Init
    $endpoint = new-object System.Net.IPEndPoint([ipaddress]::any, $port) 
    $listener = new-object System.Net.Sockets.TcpListener $endPoint
    $listener.start() 

    # 연결 대기
    $data = $listener.AcceptTcpClient() 

	# Stream 설정
    $socket_stream = $data.GetStream() 
    $FileReader = New-Object System.IO.BinaryReader $socket_stream
    $FileStream = [System.IO.FileStream]::new($FileName, [System.IO.FileMode]::Append, [System.IO.FileAccess]::Write)
    $Writer = New-Object System.IO.BinaryWriter($FileStream)

    for(){
        $Chunk = $FileReader.ReadBytes($ChunkSize)
        if($Chunk.Length){
            $Writer.Write($Chunk, 0, $Chunk.Length)
        }else{
            break
        }
    }
    
    # Close
    $Writer.Close()  
    $socket_stream.close()
    $listener.stop()
}

Function Send_File { 
    Param ( 
        [string] $IP = "127.0.0.1", 
        [int] $Port = 29800,
        [string] $FileName = "send.zip",
        [int] $ChunkSize = 1mb
    ) 
    
    # Setup connection 
    $EndPoint_IP = [System.Net.Dns]::GetHostAddresses($IP) 
    $Address = [System.Net.IPAddress]::Parse($EndPoint_IP) 
    $Socket = New-Object System.Net.Sockets.TCPClient($Address, $Port) 
    
    # stream 설정
    $Socket_Stream = $Socket.GetStream() 
    $Socket_Writer = New-Object System.IO.BinaryWriter($Socket_Stream)
    $FileInfo = Get-Item -LiteralPath $FileName
    $FileStream = $FileInfo.OpenRead()
    $FileReader = New-Object System.IO.BinaryReader $FileStream
    
    for() {
        $Chunk = $FileReader.ReadBytes($ChunkSize)
        $ChunkSum = 0
                    
        if($Chunk.Length) {
            $Socket_Writer.Write($Chunk, 0, $Chunk.Length)
            $ChunkSum += $Chunk.Length
        }else {
            Write-Host $ChunkSum 'Bytes 전송 완료'
            break;
        }
    }

    # Close
    $Socket_Writer.Close() 
    $FileReader.Close()
    $FileStream.Close()
    $Socket_Writer.Close()
    $Socket_Stream.Close()
}

if($sel -eq 1){
    Write-Host 'Listener'
    Recv_File -Port $Port -FileName $Recv_FileName
}else{
    Write-Host 'Sender'
    Send_File -IP $IP -Port $Port -FileName $Send_FileName
}

 

4. 코드(배치파일 작성)

// listener Start
// recv.bat
#echo off

powershell.exe -File File_Share.ps1 -sel 1

pause
// sender Start
// send.bat
#echo off

powershell.exe -File File_Share.ps1 -sel 2 -IP 127.0.0.1

pause
728x90
반응형
728x90
반응형

1. 개요

 - 윈도우에 파워쉘 ISE가 내장되어 있음

 - 기본 OS 설치 시 별도의 IDE, 인터프리터, 가상머신 등을 설치하지 않고 간단한 기능들을 제작할 수 있음

 

2. ISE

PowerShell ISE

 - 윈도우+R > Powershell 입력 > ISE 입력 후 엔터

 

 

3. 기본 골격

# Power Shell Script Example

function Get-SecurityEvents {
	[CmdletBinding()]
	Param(
		[Parameter(Position=0,Mandatory=$True)]
		[string]$ComputerName,
		[int]$EventID = 4634
	)   
    
    BEGIN 
    {
        $LogName = Read-Host "로그 이름을 입력하세요."        
    }
    
    PROCESS
    {
        Get-EventLog 
        -ComputerName $ComputerName `
        -LogName $LogName |
    	Where-Object -Property EventID -eq $EventID |
    	Select-Object -First 7
    }
    
	END 
    {
    }
}

# 출처: https://blog.flgram.com/827 [RedPlug's Tory]

3-1. param()

- 인수(parameter)를 정의함

- 해당 부분에 추가된 인수들은 파워쉘로 Function을 사용할 때 옵션으로 입력이 가능함

 

3-2. BEGIN{}

- 최초 한번만 실행, 필요 없을 시 공백

- 메모리 할당, 서버 기초 작업 등

 

3-3. PROCESS{}

- 함수의 주 로직이 들어가는 부분 (반복 실행됨)

 

3-4. END{}

- 정리 작업에 해당 하는 구문으로 필요없으면 비워놓는다.

- 메모리, 소켓등의 Close 작업


**출처: https://blog.flgram.com/827 [RedPlug's Tory] 블로그 참고하여 작성함.

 

 

4. 리뷰

 - 파워쉘 기능의 강력함과 편의성을 느낄 수 있었음

728x90
반응형

+ Recent posts