기본 bash 기능 사용에 대한 자세한 설명

零下一度
풀어 주다: 2017-07-24 17:28:14
원래의
1612명이 탐색했습니다.

명령 기록

셸 프로세스는 사용자가 실행을 위해 제출한 명령을 기록합니다.

기록을 사용하여 볼 수 있습니다.

[root@localhost dev]# history 1  ss -tnl2  ifconfig3  vi /etc/sysconfig/network-scripts/ifcfg-ens33 4  reboot 5  systemctl stop firewalld6  systemctl disable firewalld7  ifconfig8  ifconfig9  startx   10  ping 114.114.114.114
   11  top
......  140  who -b  141  who -r  142  date
  143  w
  144  history
로그인 후 복사

기록 기능 사용자 정의

HISTSIZE: 명령 기록의 수 쉘 프로세스는

[root@localhost dev]# echo $HISTSIZE1000
로그인 후 복사

HISTFILE: 명령 기록을 지속적으로 저장하는 파일입니다. 로그아웃하면 명령 기록이 HISTFILE

[root@localhost dev]# echo $HISTFILE/root/.bash_history
로그인 후 복사
[root@localhost dev]# cat /root/.bash_history
ss -tnlifconfigvi /etc/sysconfig/network-scripts/ifcfg-ens33 
reboot 
systemctl stop firewalld
systemctl disable firewalldifconfigifconfigstartxping 114.114.114.114topifconfigifconfig --help
type lstype ifconfig......
bash
export nameecho $name
bash
로그인 후 복사

HISTFILESIZE에 기록됩니다. 히스토리 파일

[root@localhost dev]# echo $HISTFILESIZE1000
로그인 후 복사

historyCommon 명령 사용법

-c: 명령 지우기 히스토리

-d 오프셋: 지정된 명령 기록을 삭제하고, 오프셋은 지정된 행 수

-r: 명령을 읽습니다. 파일에서 기록 목록으로 중간

-w: 기록 목록의 명령을 기록 파일에 추가

history #: 최신 # 명령 표시

명령 기록 목록에서 명령 호출

! #: 히스토리 목록에서 # 명령을 다시 실행

!!: 이전 명령을 다시 실행

! STRING: 명령 기록 목록에서 STRING으로 시작하는 최신 명령을 다시 실행

이전 명령의 마지막 매개변수 호출

단축키: ESC를 누른 다음 클릭

또는 문자열 사용:!

명령 기록 방법 제어

[root@localhost /]# echo $HISTCONTROL
ignoredups
로그인 후 복사
ignoredups: 중복 명령 무시

ignorespace: 공백 문자로 시작하는 명령 무시

ignoreboth: 위의 두 가지 모두 동시에 유효합니다. 완성 기능

명령 완성

셸 프로그램이 사용자로부터 명령 실행 요청을 받으면 가장 왼쪽 문자열을 명령으로 간주합니다

명령 검색 메커니즘: 먼저 PATH를 기반으로 내부 명령을 검색합니다. 환경 변수 디렉토리를 설정하고 디렉토리에 있는 파일 이름을 왼쪽에서 오른쪽으로 하나씩 검색합니다.

[root@localhost /]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
로그인 후 복사

Tab 키를 사용하여 완료합니다.

경로 완성

지정된 시작 경로에서 다음으로 해당 시작 경로 아래의 각 파일을 하나씩 일치시키는 경로 아래의 선행 문자열

디렉토리 관리 명령

mkdir

make 디렉터리 디렉터리 생성

mkdir [OPTION]... DIRECTORY... 일반적으로 사용되는 옵션:

-p: 요청 시 자동으로 상위 디렉터리 생성

[root@localhost tmp]# mkdir -p /tmp/x/y/z
[root@localhost tmp]# cd /tmp/x/y/z/[root@localhost z]#
로그인 후 복사

-v: 자세한 프로세스 표시, verbose

[root@localhost z]# mkdir -pv /tmp/a/b/cmkdir: created directory ‘/tmp/a’mkdir: created directory ‘/tmp/a/b’mkdir: created directory ‘/tmp/a/b/c’
로그인 후 복사
-m MODE: 직접 권한 부여

참고: 경로 기본 이름은 다음과 같습니다. 명령 작업 개체, 기본 이름 이전의 경로가 존재해야 합니다

rmdir

remove 빈 디렉터리

빈 디렉터리 제거공통 옵션:

-p: 디렉터리를 삭제한 후, 상위 디렉토리가 비어 있으면 함께 삭제

-v: 프로세스 표시

[root@localhost b]# rmdir -pv /tmp/a/b/c/rmdir: removing directory, ‘/tmp/a/b/c/’rmdir: removing directory, ‘/tmp/a/b’rmdir: removing directory, ‘/tmp/a’rmdir: removing directory, ‘/tmp’rmdir: failed to remove directory ‘/tmp’: Device or resource busy
로그인 후 복사

명령줄 확장

{}: 쉼표로 구분된 경로를 전달하고 여러 경로로 확장 가능

예를 들어 : /tmp/{a,b}는 /tmp/a /tmp/b

예:

/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/ 생성 방법 a, /tmp/x/y1/b?

[root@localhost tmp]# mkdir -p /tmp/x/{y1/{a,b},y2}
로그인 후 복사

a_c, a_d, b_c, b_d를 만드는 방법은 무엇인가요?

[root@localhost tmp]# mkdir -p /tmp/{a,b}_{c,d}
로그인 후 복사

다음 디렉터리 구조를 만드는 방법:

            /tmp/mysysroot/
                |-- bin|-- etc|   `-- sysconfig|       `-- network-scripts|-- sbin|-- usr|   |-- bin|   |-- lib|   |-- lib64|   |-- local|   |   |-- bin|   |   |-- etc|   |   |-- lib|   |   `-- sbin|   `-- sbin
                `-- var|-- cache|-- log
                    `-- run
로그인 후 복사

mkdir -p /tmp/mysysroot/{bin,etc/sysconfig/networkscripts,sbin,usr/{bin,lib,lib64,local/{bin,etc,lib,sbin},sbin},var/{cache,log,run}}
로그인 후 복사

tree
tree를 사용하여 디렉터리의 계층 구조를 볼 수 있습니다

-L # , 지정하다 표시할 내용 레벨

명령

bash의 실행 상태 결과는 상태 반환 값을 통해 이 결과를 출력합니다.

Success: 0

Failure: 1-255

After the command 실행이 완료된 후 , 상태 반환 값은 bash에 저장됩니다. 특수 변수 $?,

[root@localhost tmp]# ls /tmp/x/y1  y2
[root@localhost tmp]# echo $?0[root@localhost tmp]# ls /tmp/yls: cannot access /tmp/y: No such file or directory
[root@localhost tmp]# echo $?2
로그인 후 복사

quote

명령의 실행 결과를 인용하세요:

$(COMMAND)

또는

`COMMAND`

강한 따옴표, 작은 따옴표 :

[root@localhost ~]# echo '$PATH'$PATH
로그인 후 복사

약한 참조, 큰 따옴표:

[root@localhost ~]# echo "$PATH"/usr/local/sbin:/usr/loca
로그인 후 복사

 

快捷键

ctrl+a:跳转至命令行行首

ctrl+e:跳转至命令行行尾

ctrl+u:删除行首至光标所在处之间的所有字符

ctrl+k:删除光标所在处至行尾的所有字符

ctrl+l:清屏,相当于clear

 

文件查看类命令

 cat

cat [OPTION]... [FILE]...

查看文件内容,直接显示到文件底部

常用选项:

-n:可以显示行数

[root@localhost tmp]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
......
gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
로그인 후 복사

 

tac

tac [OPTION]... [FILE]...

反向查看文件内容

[root@localhost tmp]# tac /etc/passwdtcpdump:x:72:72::/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
......
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
로그인 후 복사

 

more

 分屏查看文件内容

 

head

head  [OPTION]... [FILE]...

查看文件的前n行,默认为前10行

[root@localhost tmp]# head /etc/passwdroot:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
로그인 후 복사
常用选项:
head -n  #:显示前#行或者是head -#

 

tail

查看文件的后n行

tail  [OPTION]... [FILE]...

[root@localhost tmp]# tail /etc/passwdcolord:x:992:987:User for colord:/var/lib/colord:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
setroubleshoot:x:991:986::/var/lib/setroubleshoot:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
sssd:x:990:985:User for sssd:/:/sbin/nologin
gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
로그인 후 복사

常用选项:

tail -n #:显示最后#行或者是tail -#

-f:查看文件尾部内容,结束后不退出,跟随显示新增的行

 

stat

display file or file system status

文件:两类数据

元数据:metadata,文件的状态,创建时间,修改时间,大小,权限等

数据:文件里面的内容

[root@localhost tmp]# stat /etc/passwd
  File: ‘/etc/passwd’
  Size: 2235          Blocks: 8          IO Block: 4096   regular fileDevice: fd00h/64768d    Inode: 19840519    Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2017-07-06 09:25:43.555083116 -0400Modify: 2017-07-01 08:00:52.140151303 -0400Change: 2017-07-01 08:00:52.141154779 -0400
 Birth: -
로그인 후 복사

stat显示的就是文件的元数据,包含文件路径,大小,blocks数目,IO block,文件类型,inode号,权限,uid,gid和三个时间戳等

三个时间戳:

access:最近一次访问的时间

modify:最近一次修改文件的时间

change:文件最近一次改变的时间,即改变元数据的时间

 

touch

change file timestamps  修改时间戳

touch [OPTION]... FILE...

文件不存在则创建文件,当直接使用命令去touch一个文件的时候,修改的是所有的时间戳

常用选项:

-c:指定的文件路径不存在时不予以创建

-a:仅修改access time

-m:仅修改modify time

-t   STAMP

       [[CC]YY]MMDDhhmm[.ss]

(不能修改change time,只当元数据发生变化时,才会改变)

[root@localhost tmp]# touch -t 201212121200.30  test.txt -m
[root@localhost tmp]# stat test.txt 
  File: ‘test.txt’
  Size: 0             Blocks: 0          IO Block: 4096   regular empty fileDevice: fd00h/64768d    Inode: 17251556    Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2017-07-07 03:17:12.640883844 -0400Modify: 2012-12-12 12:00:30.000000000 -0500Change: 2017-07-07 03:19:17.667997201 -0400
 Birth: -[root@localhost tmp]#
로그인 후 복사

 

文件管理工具

cp

复制文件或者目录

单源复制:

cp [OPTION]... [-T] SOURCE DEST

如果DEST不存在,则先创建此文件,并复制源文件的数据流至DEST文件中

如果DEST存在:

    如果DEST是非目录文件,则覆盖DEST文件

    如果DEST是目录文件,则在DEST目录下创建一个与源文件同名的文件,并复制其数据

多源复制:

cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...

如果DIRECTORY不存在,则报错

如果DIRECTORY存在:

     如果DIRECTORY是非目录文件,则报错

     如果DIRECTORY是目录文件,分别复制每个文件至目标目录中,并保持原名

常用选项:

-i:交互式复制

-f:强制覆盖目标文件

-r,-R:递归复制目录

-d:复制符号链接文件本身,而非指向的源文件

-a:-dR --preserve=all, archive,用于实现归档;

--preserv=

       mode:权限

        ownership:属主和属组

        timestamps: 时间戳

        context:安全标签

        xattr:扩展属性

        links:符号链接

        all:上述所有属性

 

mv

move

移动文件,可用来重命名文件

SYNOPSIS
       mv [OPTION]... [-T] SOURCE DEST
       mv [OPTION]... SOURCE... DIRECTORY
       mv [OPTION]... -t DIRECTORY SOURCE...

常用选项:
-i:交互式

-f:强制覆盖文件

 

rm

remove

移除文件

rm [OPTION]... FILE...

常用选项:

-i:交互式移除文件

-f:强制删除文件

-r:递归删除

注意:所有不用的文件建议不要直接删除,可以移动至某个专用的目录(用来做回收站的目录)

 

Globbing

文件名通配:是对整体文件名匹配,不是部分匹配

匹配字符:

*:匹配任意长度的任意字符

?:匹配任意单个字符

[ ]:匹配指定范围内的任意单个字符‘

      [a-z],[A-Z],[0-9],[a-z0-9]   不区分大小写

      特殊格式:

     [[:upper:]]:所有大写字母

     [[:lower:]]:所有小写字母

     [[:alpha:]]:所有字母

     [[:digit:]]:所有数字

     [[:alnum:]]:所有的字母和数字

     [[:space:]]:所有空白字符

     [[:punct:]]:所有标点符号

[^]:中括号加托字符,匹配指定范围外的任意单个字符

     [^0-9]:匹配数字之外的任意单个字符  

     [^[:upper:]]:匹配大写字母以外的任意单个字符

练习:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录;

ls -d /var/l?[[:lower:]]
로그인 후 복사

 练习:复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下;

cp -r /etc/[mnrp]*.conf /tmp/conf.d/
로그인 후 복사

 

IO重定向及管道

IO即输入和输出设备,可用于输入的设备一般有键盘、文件系统上的常规文件、网卡等,可用于输出的设备有显示器、文件系统上的常规文件、网卡等;

程序的三种数据流:

输入的数据流:标准输入(stdin),键盘;

输出的数据流:标准输出(stdout),显示器;

错误的输出流:错误输出(stderr),显示器;

文件描述符:fd,file descriptor

标准输入:0

标准输出:1

错误输出:2

 

 IO重定向

输出重定向:

>    覆盖输出

>>    追加输出

小特性:

set -C:禁止覆盖输出重定向至已存在的文件

set +C:开启覆盖输出重定向至已存在的文件(默认)

错误输出重定向:

2>    覆盖输出

2>>    追加输出

合并正常输出流和错误输出流

1.

&>    覆盖输出

&>>    追加输出

2.

COMMADN > /PATH/TO/somefile  2>&1 :如果命令执行成功则覆盖输出至somefile,执行不成功也覆盖输出至somefile

COMMAND >> /PATH/TO/somefile 2>&1:如果命令执行成功则追加覆盖至somefile,执行不成功也追加输出至somefile

注意:特殊设备:/dev/null  当不需要命令的执行结果,只需要知道命令的执行状态,则可以重定向至/dev/null,/dev/null相当于一个垃圾桶。

输入重定向:<

Here Document:<<,可以作为指定文件的结束符,常用于shell编程

[root@localhost tmp]# cat <<EOF> how are you> my name is Frank> EOF
how are you
my name is Frank</p>
<p> </p>
<p><span style="color: #ff0000"> tr</span></p>
<p>tr [OPTION]... SET1 [SET2]</p>
<p>把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符,不修改原文件</p>
<p>用法1: tr SET SET2 < /PATH/FROM/SOMEFILE  </p>
<p> <img src="https://img.php.cn/upload/article/000/000/001/481c5a3f155df91e35d62ca3dc88307c-3.png" alt=""    style="max-width:90%"  style="max-width:90%"></p>
<p>用法2:tr -d SET1  <  /PATH/FROM/SOMEFILE     删除SET1中的字符,区分大小写</p>
<p> <img src="https://img.php.cn/upload/article/000/000/001/481c5a3f155df91e35d62ca3dc88307c-4.png" alt=""    style="max-width:90%"  style="max-width:90%"></p>
<p><span style="color: #ff0000">管道</span></p>
<p>连接程序,实现将前面一个命令的输出直接定向后一个程序当做输出数据流</p>
<p>COMMAND1 | COMMAND2 | COMMAND3 ...</p>
<div class="cnblogs_code"><pre class="brush:php;toolbar:false">[root@localhost tmp]# echo 'abcd' | tr 'a-z' 'A-Z' | tr -d 'AD' BC
로그인 후 복사
tee

 显示程序的输出并将其复制到一个或多个文件中

[root@localhost tmp]# echo 'abcd' | tee /etc/fstab | tr 'ab' 'AB' ABcd
[root@localhost tmp]# cat /etc/fstab 
abcd
로그인 후 복사

위의 예시와 같이 tee 명령을 사용하여 /etc/fstab으로 출력하고, 후속 tr의 입력으로 표준 입력을 사용합니다.

위 내용은 기본 bash 기능 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿