'ALL'에 해당되는 글 79건

 

원하는 날짜 포맷(yyyyMMdd,yyyyMMddHH 등)을 입력하여 현재날짜를 출력합니다.

  public static String getCurrent(String format) {
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    return sdf.format(Calendar.getInstance().getTimeInMillis());
  }

 

 

댓글을 달아 주세요

 

ex) 현재 위치에서 aa로 시작하는 파일 모두 찾기 

find . -name 'aa*' -print

 

 

댓글을 달아 주세요

beeline
!connect jdbc:hive2://server-host-name:10000 user user

'Programming > Hive' 카테고리의 다른 글

[Hive] beeline 접속 명령어  (0) 2019.07.05
[Hive] 테이블 스키마 컬럼 추가 방법  (0) 2019.07.05
[Hive] parquet 압축 설정  (0) 2019.05.29
[Hive] 쿼리로 파일 추출  (0) 2019.05.29
[Hive] udf 함수 등록 및 사용 방법  (0) 2019.05.23
[Hive] 스키마 샘플  (0) 2019.05.16

댓글을 달아 주세요

-1번 namenode를 Active로 절체하고자 할 때 

hdfs haadmin -failover nn2 nn1

댓글을 달아 주세요

리눅스에 익숙하지 않을 때 많이하는 실수로 윈도우에서 작업한 텍스트를 리눅스로 업로드 후 사용하면 사용이 안됩니다. 예를들어 쉘 파일을 윈도우에서 작업 후 리눅스에서 실행하려고 하면 에러가 발생하는데 리눅스 사용 초기에 한참 고생을 했네요. ㅠㅠ

 

vi로 파일 열어서 아래 명령어 실행하면 됩니다.

:se ff=unix

 

댓글을 달아 주세요

[Oozie] 명령어 모음

etc 2019.07.05 10:56

 

oozie : Apache Hadoop 작업을 관리하는 워크플로우 스케줄러 시스템이다.

-데이터 추출,변환,적재 작업인 ETL(Extraction Transformation Loading)을 수행하기 위해 사용합니다.

 

 

coordinator 등록

-coordinator job을 실행

oozie job -config $job.properties -run

 

coordinator 조회

-등록되어 있는 coordinator job 목록을 조회

oozie jobs -jobtype coord

 

coordinator update

-coordinator의 내용(coordinator.xml) 수정 후 업데이트

oozie job -config $job.properties -update $coordinator_job_id)
ex) oozie job -config aa_job.properties -update 0054885-170318140345166-oozie-hado-C


로그 조회

-job 로그 확인 (에러 내용 확인 가능)

oozie job -log $workflowID


job 재처리

-중지/실패한 job을 재수행 (옵션 failnodes=true : 실패한 job만 재수행)

oozie job -rerun $workflowID -Doozie.wf.rerun.failenodes=true


info 조회

-workflow 상태 확인

oozie job -info $workflowID

 

job KILL

-PREP, SUSPEND, RUNNING 상태의 job을 중단

oozie job -kill $workflowID

 

 

댓글을 달아 주세요

이 방법은 테이블 스키마 마지막에 컬럼을 추가할때만 사용됩니다.

 

ALTER TABLE db_nm.tb_nm ADD COLUMS (`col10` STRING COMMENT '10번째 컬럼', `col11` STRING);

 

'Programming > Hive' 카테고리의 다른 글

[Hive] beeline 접속 명령어  (0) 2019.07.05
[Hive] 테이블 스키마 컬럼 추가 방법  (0) 2019.07.05
[Hive] parquet 압축 설정  (0) 2019.05.29
[Hive] 쿼리로 파일 추출  (0) 2019.05.29
[Hive] udf 함수 등록 및 사용 방법  (0) 2019.05.23
[Hive] 스키마 샘플  (0) 2019.05.16

댓글을 달아 주세요

 

아래 사이트 참고하여 작성한 코드입니다.

 

정렬알고리즘(sorting algorithm) 정리

1.버블정렬(Bubble sort)

medium.com

	public static void main(String[] args) {
		int arr[] = {41,34,6,16,38,36,28,19,45,43,49};
		for (int i : mergeSort(arr)){
			System.out.print(i +" ");
		}
	}
	
	/**
 	* 버블정렬
 	*  
 	*/
	public static int[] bubbleSort(int[] arr){
		for(int i=arr.length-1; i>0; i--){
			for(int j=0; j<i; j++){
				if (arr[j] > arr[j+1]){
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		return arr;
	}
		
	/**
 	* 선택정렬
 	*  
 	*/
	public static int[] selectionSort(int[] arr){
		for(int i=0; i<arr.length; i++){
			int min = arr[i];
			for(int j=i+1; j<arr.length; j++){
				if(min > arr[j]){
					min = arr[j];
					arr[j] = arr[i];
					arr[i] = min;
				}
			}
		}
		return arr;
	}
		
	/**
 	* 삽입정렬
 	*  
 	*/
	public static int[] insertionSort(int[] arr){
		for(int i=1; i<arr.length; i++){
			for(int j=i; j>0; j--){
				if(arr[j] < arr[j-1]){
					int tmp = arr[j];
					arr[j] = arr[j-1];
					arr[j-1] = tmp;
				}
			}
		}
		return arr;
	}
		
	/**
 	* 병합정렬
 	*  
 	*/
	public static int[] mergeSort(int[] arr){
		System.out.println("before");
		for(int i : arr){
			System.out.print(i + " ");
		}		
		System.out.println();
		
		if (arr.length < 2){
			return arr;
		}
		
		int mid = arr.length / 2;
		int[] leftArr = mergeSort(Arrays.copyOfRange(arr, 0, mid));
		int[] rightArr = mergeSort(Arrays.copyOfRange(arr, mid, arr.length));
		int[] mergedArr = new int[arr.length];
		int m = 0, l = 0, r = 0;
		while (l < leftArr.length && r < rightArr.length) {
			if (leftArr[l] < rightArr[r]) {
				mergedArr[m++] = leftArr[l++];
			} else {
				mergedArr[m++] = rightArr[r++];
			}
		}
		while (l < leftArr.length) {
			mergedArr[m++] = leftArr[l++];
		}
		while (r < rightArr.length) {
			mergedArr[m++] = rightArr[r++];
		}
		System.out.println("after");
		for(int i : mergedArr){
			System.out.print(i + " ");
		}		
		System.out.println();
		return mergedArr;
	}

 

 

댓글을 달아 주세요

DataNode 추가

1. NameNode의 hosts 파일에 추가할 DataNode IP,HOST 추가

vi /etc/hosts

2. NameNode의 includes 파일을 생성 또는 편집하여 추가할 node의 hostname을 추가

vi /hadoop설치경로/etc/hadoop/dfs.hosts

3. 추가한 서버 접속 후 노드 실행

hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager

4. Namonde 서버에서 node refresh 명령 수행

hdfs dfsadmin -refreshNodes

 

DataNode 제거

1. NameNode의 dfs.hosts.exclude 파일을 생성 또는 편집하여 추가할 node의 hostname을 추가

vi /hadoop설치경로/etc/hadoop/dfs.hosts.exclude

2. Namonde 서버에서 node refresh 명령 수행

hdfs dfsadmin -refreshNodes

3. NameNode web으로 접속하여 node decommissioned가 완료되면 NameNode의 excludes 파일을 열어 제거할 node의 hostname을 삭제한다.

 

댓글을 달아 주세요

Python Rest API 호출 샘플 코드입니다.

  ex) 지정시간 이후로 수행되는 api kill하는 코드

import httplib, json, datetime

print datetime.datetime.now()          #날짜 출력

INGEST_LIST="/druid/indexer/v1/tasks"  #API 주소
HOST="aaa-bb-001"                      #API 호스트
PORT="8090"                            #API 포트

hour = (datetime.datetime.now() + datetime.timedelta(hours=-9)).hour

conn = httplib.HTTPConnection(HOST, PORT)  #connection 설정
conn.request("GET", INGEST_LIST)           #request 
res = conn.getresponse()                   #response 결과 변수에 저장
taskList = json.loads(res.read())          #json문자열 dictionary로 변환

for task in taskList :                     #list for문
        print "id : " + task
        taskStartTime = task.split('T')[1][0:2]
        if (int(hour)-int(taskStartTime)) > 2 :
                print "KILL ID : " + task
                conn.request("POST", "/druid/indexer/v1/task/" + task + "/shutdown")
                res = conn.getresponse()
                print "response msg : " + json.loads(res.read())

댓글을 달아 주세요

 

 

	private static boolean isBlank(String str) {
		int strLen; if (str == null || (strLen = str.length()) == 0) {
			return true; 
		} 
		for (int i = 0; i < strLen; i++) {
			if ((!Character.isWhitespace(str.charAt(i)))) {
				return false; 
			} 
		} 
		return true; 
	}

 

 

댓글을 달아 주세요

 

휴대폰 번호를 asterisk(*)로 암호화하는 코드입니다.

	/**
	 * encrypt number in text
	 * 
	 * maskingCallNumber
	 *  
	 * @param str
	 * @return String
	 */
	public static String maskingCallNumber(String str){
		String replaceString = str;
		String matchedStr ="";

		String pattern ="(\\d{2,3})-?(\\d{3,4})-?(\\d{3,4})";
		Matcher matcher = Pattern.compile(pattern).matcher(str);

		if(matcher.find()){
			StringBuffer br = new StringBuffer();
			for(int i = 1 ; i<=matcher.groupCount(); i++){
				matchedStr = matcher.group(i);
				for(int j = 0 ; j <matchedStr.length();j++){
					br.append("*");
				}
				if(i !=matcher.groupCount()){
					br.append("-");
				}
			}
			replaceString =matcher.replaceAll(br.toString());
		}
		return replaceString;
	}

 

 

댓글을 달아 주세요

 

이름을 asterisk(*)로 암호화하는 코드입니다.

	/**
	 * maskingName
	 *  
	 * @param str
	 * @return String
	 */
	public static String maskingName(String str) {
		String replaceString = str;

		String pattern = "";
		if(str.length() == 2) {
			pattern = "^(.)(.+)$";
		} else {
			pattern = "^(.)(.+)(.)$";
		}

		Matcher matcher = Pattern.compile(pattern).matcher(str);

		if(matcher.matches()) {
			replaceString = "";

			for(int i=1;i<=matcher.groupCount();i++) {
				String replaceTarget = matcher.group(i);
				if(i == 2) {
					char[] c = new char[replaceTarget.length()];
					Arrays.fill(c, '*');

					replaceString = replaceString + String.valueOf(c);
				} else {
					replaceString = replaceString + replaceTarget;
				}

			}
		}
		return replaceString;
	}

 

 

댓글을 달아 주세요

 

 

   /**
    * 날짜 더하기
    * 
    * @param dataeFormat yyyyMMdd ..
    * @param strDate 20190612 ..
    * @param dateUnit DATE or HOUR
    * @param addDate 1, -1 ...
    * @return
    */
   public static String dateAdd(String dataeFormat, String strDate, String dateUnit, int addDate) {
       DateFormat dateFormat = null;
       Date date = new Date();
       
       try {
           dateFormat = new SimpleDateFormat(dataeFormat);
           date = dateFormat.parse(strDate);
       } catch (ParseException e) {
    	   EDWLogger.error(CommonUtil.class, e.getMessage());
       }
       
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);
       if ("DATE".equals(dateUnit)) {
           cal.add(Calendar.DATE, addDate);
       } else if ("HOUR".endsWith(dateUnit)) {
           cal.add(Calendar.HOUR, addDate);
       } 
       return dateFormat.format(cal.getTime());
   }

 

 

댓글을 달아 주세요

 

두가지 방식 있습니다. 상황에 따라 사용하시면 되겠습니다.

 

1.

String command = "ls";
new ProcessBuilder("/bin/bash", "-c", command).start();

2.

    /**
     * cmd 명령어 실행
     *
     * @param cmd
     */
    public static boolean executeCmd(String cmd) {
        Process process = null;
        Runtime runtime = Runtime.getRuntime();
        StringBuffer successOutput = new StringBuffer();
        StringBuffer errorOutput = new StringBuffer();
        BufferedReader successBufferReader = null;
        BufferedReader errorBufferReader = null;
        String msg = null;
        boolean result = false;
 
        List<String> cmdList = new ArrayList<String>();
 
        cmdList.add("/bin/sh");
        cmdList.add("-c");
        
        cmdList.add(cmd);
        String[] array = cmdList.toArray(new String[cmdList.size()]);
 
        try {
        	Logger.info(CommonUtil.class, "cmd : " + cmd);
            process = runtime.exec(array);
 
            successBufferReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "EUC-KR"));
 
            while ((msg = successBufferReader.readLine()) != null) {
                successOutput.append(msg + System.getProperty("line.separator"));
            }
 
            errorBufferReader = new BufferedReader(new InputStreamReader(process.getErrorStream(), "EUC-KR"));
            while ((msg = errorBufferReader.readLine()) != null) {
                errorOutput.append(msg + System.getProperty("line.separator"));
            }
 
            process.waitFor();
 
            if (process.exitValue() == 0) {
                result = true;
            } else {
                Logger.error(CommonUtil.class, "abnormal finish error : " + successOutput.toString());
            }
 
            if (isNotBlank(errorOutput.toString())) {
                Logger.error(CommonUtil.class, "error : " + successOutput.toString());
            }
 
        } catch (IOException e) {
            Logger.error(CommonUtil.class, e.getMessage());
        } catch (InterruptedException e) {
            Logger.error(CommonUtil.class, e.getMessage());
        } finally {
            try {
                process.destroy();
                if (successBufferReader != null) successBufferReader.close();
                if (errorBufferReader != null) errorBufferReader.close();

            } catch (IOException e1) {
                Logger.error(CommonUtil.class, e1.getMessage());
            }
        }
        return result;
    }

댓글을 달아 주세요

mysql dump 및 import 방법입니다.

 

-DB backup 

1) 테이블 백업

mysqldump --single-transaction -u user -p'password' DB_NM TABLE_NM > table_nm.sql

--single-transaction : 하나의 트랙잭션으로 dump 수행 

  ps ) 용량 큰 테이블 dump 할 경우 해당 테이블 lock 걸림, 이 옵션을 사용해줘야 DB lock 걸리지 않습니다.

 

2) DB 전체 백업

mysqldump --single-transaction --all-databases -u user -p'password' > db_nm.sql

 

-백업한 sql 파일 적용 (import)

mysql -u user -p'password' DB_NM < table_nm.sql

 

 

댓글을 달아 주세요

 

비슷한 규칙에 파일명 동시에 일괄 변경하는 방법입니다.

rename '공통내용' '변경할 공통내용' '변경대상'

ex) rename .txt test.txt *  

 

 

댓글을 달아 주세요

 

자바 date(날짜) 포맷 별 정규식입니다.

public static final String YYYYMMDD = "(19|20)\\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])";
public static final String YYYYMMDDHH = "(19|20)\\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])(0[0-9]|1[0-9]|2[0-3])";
public static final String YYYYMMDDHHMI = "(19|20)\\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])(0[0-9]|1[0-9]|2[0-3])([0-5][0-9])";
public static final String YYYYMMDDHHMISS = "(19|20)\\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])(0[0-9]|1[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])";
public static final String HH= "(0[0-9]|1[0-9]|2[0-3])";
public static final String MMDD = "(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])";
public static final String HHMI = "(0[0-9]|1[0-9]|2[0-3])([0-5][0-9])";

 

*정규식 해석 (ex : yyyyMMdd)

 - (19|20) :  19 또는 20로 year 앞 2자 표현

 - \\d{2} : 2자리 숫자(00~99 까지) year 뒤 2자 표현

 - (0[1-9]|1[012]) : 0과 1~9에서 1개 또는 1과 012에서 1개로 month 2자 표현

 - (0[1-9]|[12][0-9]|3[01]) : 0과 1~9 또는 1,2와 0~9 또는 3과 0,1로 day 2자 표현

 

 

 

- 위 정규식 사용하여 문자열에서 특정 패턴의 date 검출하는 방법

2016/06/20 - [Programming/JAVA] - [JAVA] 문자열에서 date 특정 패턴 가져오기

 

 

댓글을 달아 주세요

 

이클립스로 java, jar 파일 생성하여 리눅스상에서 java, jar 파일 실행하는 방법입니다.

자바코드는 메인함수로 입력되는 값을 출력하는 간단한 코드로 작성했습니다.

 

public class test{
  public static void main(String[] args){
    for(String arg:args){
      System.out.println(arg);
    }
  }
}

 

1. java 파일 실행

1) java 파일 컴파일

javac -d . Test.java

 - 디렉토리 안에 자바파일을 컴파일하여 클래스 생성

 

ex) 여러 lib jar 파일의 클래스 패스 연결해서 컴파일 

javac -d . -cp lib/hadoop-common-2.7.0.jar:lib/hadoop-distcp-2.7.3.jar:lib/hadoop-hdfs-2.6.0.jar:lib/hadoop-annotations-2.7.0.jar:lib/hadoop-mapreduce-client-core-2.3.0.jar DistCpTest.java

 

 

2) java 파일 실행

java -cp $CLASS_PATH: test.Copy TEST_TEST

 - 클래스패스를 정말 잘 설정해줘야 한다.. (NoClassDefFoundError로 고생함..ㅠㅠ)

   계속 클래스 패스를 잘 못찾아서 저는 콜론도 잘 붙여해결했습니다.

 

 ex) java -cp /home/my/test/*: test.Copy TEST_TEST

 

 

*용어정리

 -classpath: 자바 런타임이 class 파일을 찾을 때 사용하는 경로

 -cp : classpath
 -콜론(:) 클래스 패스들을 연결할 때 사용
 -점(.) java 명령어를 실행하는 디렉토리를 cp로 지정하겠다는 의미
 -d : directory

 

 

2. jar 파일 실행

  1) eclipse로 jar 파일 생성

 

 

메인 클래스를 지정해주지 않으면 no main manifest attribute, in test.jar 에러가 발생합니다.

 

 

 

  2) 생성한 jar 파일을 리눅스 서버로 이동시키고 아래 명령어를 실행합니다.

java -jar test.jar TEST

 

결과 : TEST

댓글을 달아 주세요

 

-missing block error msg

cannot obtain block length for LocatedBlock, Could not find CoarseGrainedScheduler or it has been stopped.


-check corrupt file 

hdfs fsck -list-corruptfileblocks 
hdfs fsck /{path} -openforwrite

 

 

댓글을 달아 주세요

CREATE TABLE test(a int, b string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS PARQUET TBLPROPERTIES ("parquet.compression"="SNAPPY");

 

'Programming > Hive' 카테고리의 다른 글

[Hive] beeline 접속 명령어  (0) 2019.07.05
[Hive] 테이블 스키마 컬럼 추가 방법  (0) 2019.07.05
[Hive] parquet 압축 설정  (0) 2019.05.29
[Hive] 쿼리로 파일 추출  (0) 2019.05.29
[Hive] udf 함수 등록 및 사용 방법  (0) 2019.05.23
[Hive] 스키마 샘플  (0) 2019.05.16

댓글을 달아 주세요

delimiter를 변경하여 hive 쿼리로 파일 추출하는 방법입니다.

 

1. 아래내용에서 저장할 파일의 디렉토리 위치와 원하는 구분자, 쿼리 설정 후 hql 파일 저장

INSERT OVERWRITE LOCAL DIRECTORY './directory_name'
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
SELECT * FROM table WHERE id > 100;

 

2. 저장한 파일 실행 ( ex : test.hql)

hive -f test.hql

 

 

'Programming > Hive' 카테고리의 다른 글

[Hive] 테이블 스키마 컬럼 추가 방법  (0) 2019.07.05
[Hive] parquet 압축 설정  (0) 2019.05.29
[Hive] 쿼리로 파일 추출  (0) 2019.05.29
[Hive] udf 함수 등록 및 사용 방법  (0) 2019.05.23
[Hive] 스키마 샘플  (0) 2019.05.16
[Hive] header 제거 옵션  (0) 2019.05.16

댓글을 달아 주세요

 

이클립스에서 Synchronize 사용할 때 초기 설정이 화면 전환되도록 설정되어 있는데 

작업하다 보면 상당히 불편합니다. 아래 옵션 적용해주면 아래 영역에 고정되서 화면 전환되지 않습니다.

 

*Window -> Preferences -> Team -> "Open the associated perspective when a synchronize operation completes" -> Never 클릭

 

*설정 후 적용 화면

 

댓글을 달아 주세요

 

eclipse 글꼴 및 크기 변경 방법입니다.

 

1. Window -> Prefernces

2. General -> Appearance -> Colors and Fonts ->Basic -> Text Font -> Edit

 

3. 원하는 글꼴 및 크기 선택 (저는 Verdana 사용합니다.) 

 

4. Apply and Close 클릭하면 변경 완료

댓글을 달아 주세요

 

리눅스 서버에서 외부서버로 파일 전송할 때 scp 명령어를 사용합니다.

주기적으로 파일을 전송해야 할 경우 아래 내용 스크립트 작성에 참고 해주세요.

 

-scp 사용법

expect << EOF
spawn scp /경로/파일명 계정@아이피:/경로
expect "password:"
        send "패스워드\r"
expect eof
EOF

*용어정리

  - expect : scp 사용시 패스워드를 입력해야 하는데 인증 부분을 체크해 줄 명령어

     ex) "password:" 란 문자가 나타나면 send 로 패스워드를 입력해 줍니다.

  - spawn : expect 안에서 scp 명령어를 실행시킬때 사용 (쉘에서 리눅스 명령어 실행시키는 ``와 같은 의미)

  - \r은 패스워드 입력 후 엔터(개행문자)를 입력하기 떄문에 사용

 

-sftp 사용법 (ex: sftp 접속하여 파일 다운)

expect << EOF
spawn sftp $GET_USER@$GET_SERVER_IP
expect "ord:"
send "${GET_PASS}\r"
expect "p>"
send "cd ${GET_PATH}\r"
expect "p>"
send "mget ${GET_FILE_NM}\r"
expect "p>"
send "bye\r"
expect eof
EOF

 

 

댓글을 달아 주세요

 

1. udf.jar 파일을 hive 설치 경로의 conf 디렉토리에 저장  (해당 udf.jar)


2. .hiverc 파일의 아래 내용 추가 (conf 디렉토리 위치)

CREATE TEMPORARY FUNCTION method AS 'udf.package';  (등록할 함수명과 jar 파일에 패키지 작성)

 

3. hive-env.sh 파일의 아래 내용 추가(jar 파일 위치한 경로로 등록)

export HIVE_AUX_JARS_PATH=/home/hive/conf/udf.jar 

 

4. hive 재기동


5. 등록 함수 사용

 select method(col) from table;

 

'Programming > Hive' 카테고리의 다른 글

[Hive] parquet 압축 설정  (0) 2019.05.29
[Hive] 쿼리로 파일 추출  (0) 2019.05.29
[Hive] udf 함수 등록 및 사용 방법  (0) 2019.05.23
[Hive] 스키마 샘플  (0) 2019.05.16
[Hive] header 제거 옵션  (0) 2019.05.16
[Hive] Delimiter 변경하는 방법  (0) 2017.04.11

댓글을 달아 주세요

 

- PID 하나씩 KILL에 매개변수로 넘겨서 다 죽임

ps -ef | grep '프로세스명' | awk '{print $2}' | xargs kill

 

 

댓글을 달아 주세요

 

리눅스에서 여러 파일들 동일한 내용을 전체 변경하거나 파일에서 원하는 내용만 삭제하고 싶을때

일일이 vi로 열어서 변경하지 않고 sed 명령어를 사용하면 유용합니다.

 

1. 1개 파일 내용 변경

sed -i 's/기존 내용/변경할 내용/g' 파일명.txt

2. 여러 파일 내용 변경

sed -i 's/기존 내용/변경할 내용/g' *.txt

3. 해당 문자가 포함된 줄 삭제

sed -i '/삭제 할 내용/d' *

4. 해당 문자가 포함된 줄만 삭제하지 않고 나머지 내용 모두 삭제 (로그에서 원하는 내용만 보고싶을때 유용)

sed -i '/삭제하지 않을 내용/!d' *

 

 

댓글을 달아 주세요

 

- FTP 계정, 패스워드 생성 방법
1. useradd userID (계정 생성)
2. passwd userID (패스워드 설정)


- FTP 계정 패스워드 만료되지 않도록 설정
1. chage -E -1 -I 0 -m 0 -M 99999 userID (변경) 
2. chage -l userID (조회)


- FTP 계정 패스워드 변경
1. root or sudo (root 계정으로 접속)
2. sudo passwd ${user_id} (패스워드 변경)

 

댓글을 달아 주세요

 

ftp 압축 파일 업로드 할 때 binary 모드 사용해야 파일 깨지지 않고 정상 업로드 됩니다. (자주 까먹는 부분..;;)

 

아래 쉘은 ftp put하는 샘플 코드 입니다.

ftp -n 127.0.0.1 << EOF
quote USER $user
quote PASS $pass
cd $put_path
lcd $local_path
binary
put $file_nm
bye
EOF

 

## binary 모드로 업로드 하지 않으면 일반 텍스트 형태로 올라가 압축 해제 시 아래 에러 메시지가 발생

gzip : test.csv.gz: invalid compressed data--format violated

 

 

댓글을 달아 주세요