# Linux Commands

{% embed url="<https://explainshell.com/>" %}

### Grep

```
<Command Options>
-o, --only-matching: Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
-P, --perl-regexp: Interpret the pattern as a Perl-compatible regular expression (PCRE). 
-v, --invert-match: Invert the sense of matching, to select non-matching lines.
-r, --recursive: Read all files under each directory, recursively, following symbolic links only if they are  on  the  command  line.
-l, --files-with-matches: Suppress  normal  output;  instead  print  the  name  of  each input file from which output would normally have been printed.

<Examples of Usage>
#Selected lines are those not matching any of the specified patterns.
grep -v ‘keyword’ test.txt

#Print only the mached parts with regular expression
grep -oP '\d{1,5}/open' allports.gnmap | sort -u

# 特定のキーワードを含まない行を表示
grep -v ‘keyword’ test.txt

# 検索したい文字列を含むファイルを表示
grep <keyword> -rl <path>
```

### Sort

```
<Command Options>
-u, --unique: output only the first of an equal run

<Examples of Usage>
#Print only the mached parts with regular expression and make each line unique
grep -oP '\d{1,5}/open' allports.gnmap | sort -u
```

### Wget

```
# 指定したURLからのファイルダウンロード
wget -O <url>

# 指定したURLからの再起的のファイルダウンロード
wget -r <url> 

# 証明書の確認せずにコンテンツを取得
wget <url> --no-check-certificate
```

### Sed

```
<Command Options>

<Examples of Usage>
#Selected lines are those not matching any of the specified patterns.

cat srcip_area.csv | sed 's/"//g' |sed 's/,/ /g' | awk '{print $3, $4$5}' | awk '{arr[$1]+=$2} END {for (i in arr) {print i,arr[i]}}' | sort -nrk 2

cat file.txt | sed -e "s/<instance to find>/<instance to replace it with>/g" > output.txt

```

### Awk

```
* 「cat access_log | grep bullet.gif | awk -F'"' '{print $1 $4}’」
    * -F’”'よりデリミターを指定して、文字を取得
* 「ls -lt | awk '$5>1000 {print $0}'」
    * ファイルの容量が1000bytes以上の行のみを表示
* 「ls /Applications | awk 'length($0)>13{print}'」
    * 長さが13を超える行数のみを表示
* 「cat access_log | awk '$9 == "404"{print $1}' | sort | uniq | wc -l」
    * Awk のマッチング
* 「lsof -nPi | awk '/LISTEN/‘」
* 「ifconfig en1 | awk '/inet/{print substr($2,5,3)}'」
    * print substr（$2, 開始文字位置, 切り取り文字数）
* 「# ps -ef | awk '/sshd/ && !($3 == 1 || /sshd: hal[@ ]/) {print $2}'」
    * &&条件
```

### Tr

```
* 「cat /etc/shells/ | tr a-z A-Z」
    * 小文字を大文字に変換
* 「cat /etc/shells/ | tr -d ‘d’」
    * dを削除
* 「ls -l | tr -s ' ' ‘,'」
    * 連続したスペースを,に変換
* 「ls -l | tr -s ' ' '\t' | cut -f 1,5,9-」
```

### Tar

```
圧縮：tar cvzf tgzファイル名 圧縮対象ディレクトリ
解凍：ar xvzf tgzファイル名
```

### Ps

```
charix@Poison:~ % ps -auwwx

-a: list the processes of all users on the system
-u: provide detailed information about each process
-x: list processes that have no controlling terminal, such as daemons
-ww: Wide output with unlimited width
```

### Find

```
<Command Options>
-name pattern: True if the last component of the pathname being examined matches pattern.
-type t: True if the file is of the specified type.
             b block special
             c       character special
             d       directory
             f       regular file
             l       symbolic link
             p       FIFO
             s       socket
-iname pattern: Like -name, but the match is case insensitive.
-exec command: Execute command
 

<Examples of Usage>
find / -name .DS_Store > filelist.txt 2> errlist.txt
# 標準出力と標準エラー出力をそれぞれリダイレクトするfind [検索対象フォルダのパス] 

-type f -name "[検索したい文字列]"
# 指定フォルダを配下を再帰的検索

find / -name example.txt 2>/dev/null
# 標準エラー出力を捨てる

find . -name "*.php" -type f -exec chmod 755 {} \;

find / -perm -o+w -type d
# Show all world readable directories

find / -perm -o+e -type d
# Show all world executable directories

find / -perm -1000 -type d 2>/dev/null
# Sticky bit - Only the owner of the directory or the owner of a file can delete or rename here.

find / -perm -g=s -type f 2>/dev/null
# SGID (chmod 2000) - run as the group, not the user who started it.

find / -perm -u=s -type f 2>/dev/null
# SUID (chmod 4000) - run as the owner, not the user who started it.
```

### Cut

```
```

### Kill

```
kill -9 $PID
```

### Sudo

```
<Command Options>
-l, --list: list user's privileges or check a specific command; use twice for longer format
-u, --user=user: run command (or edit file) as specified user name or ID

<Examples of Usage>
sudo -l

sudo -u scriptmanager bash
# execute command as specified user
```

### Extracting archives

```
tar xvfj test.tar.bz2
tar zxvf test.tar.gz
tar zxvf test.tar
gzip -d test.gz
unzip test.zip
zcat rockyou.txt.gz > rockyou.txt
```

### Compressing archives

```
tar -zcvf test.tar test
gzip test
zip -9 test.zip test
zip -r test.zip test/
```

### Copy files remotely

```
scp /path/to/local/file.txt user@targetIP:/path/to/share # local to remote
scp -r user@targetIP:/path/to/share /local/share # remote to local
cat ~/.ssh/id_rsa.pub | ssh user@targetIP 'cat >> .ssh/authorized_keys'
```

## Bash

### for

```
for i in $(seq 0 12); do echo -n '|base64 -d';done
|base64 -d|base64 -d|base64 -d|base64 -d|base64 -d|base64 -d|base64 -d|base64 -d|base64 -d|base64 -d|base64 -d|base64 -d|base64 -d
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gitbook.nori-zamurai.com/useful-commands/linux-commands.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
