Linux常用命令及bash特性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux常用命令及bash特性相关的知识,希望对你有一定的参考价值。
Linux简单使用(1)
Linux常用命令介绍
linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心。
linux命令在系统中有两种类型:内置Shell命令和Linux命令。可以使用help、man和info命令获得帮助。
* help提供内部命令的帮助;man和info提供外部命令的帮助。
Linux常用命令
pwd命令:以绝对路径的方式显示当前的工作目录;
[[email protected] ~]# pwd /root
cd命令:用来切换工作目录至dirname,其中dirName表示法可为绝对路径或相对路径;
使用格式:cd [-L|[-P [-e]]] [dir]
选项:
-P :如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录;
-L :如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录;
– :当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录;
~]# cd 进入用户主目录; ~]# cd ~ 进入用户主目录; ~]# cd - 返回进入此目录前所在的目录; ~]# cd .. 返回上级目录; ~]# cd ../.. 返回上两级目录; ~]# cd !$ 把上个命令的参数作为cd的参数使用;
ls命令:list,用于显示目录列表;
使用格式:ls [OPTION]… [FILE]…
选项:
-a :显示所有文件,包括隐藏文件(.和..开头的文件和目录);
-A :显示除.和..开头以外的所有文件;
-l :长格式列表,显示文件的详细属性信息;
-h :文件大小单位转换;
-d :仅显示目录名,而不显示目录下的内容列表;
-r :以文件名反序排列并输出目录内容列表;
-R :递归处理,将指定目录下的所有文件及子目录一并处理;
[[email protected] ~]# ls anaconda-ks.cfg initial-setup-ks.cfg [[email protected] ~]# ls -l 总用量 8 -rw-------. 1 root root 1604 8月 27 14:16 anaconda-ks.cfg -rw-------. 1 root root 1652 8月 27 15:39 initial-setup-ks.cfg [[email protected] ~]# ls -l -h 总用量 8.0K -rw-------. 1 root root 1.6K 8月 27 14:16 anaconda-ks.cfg -rw-------. 1 root root 1.7K 8月 27 15:39 initial-setup-ks.cfg
cat命令:连接文件并打印到标准输出设备上,经常用来显示文件内容;
使用格式:cat [OPTION]… [FILE]…
选项:
-n :由1开始给所有输出的文本行编号;
-E :用$作为行结束符;
[[email protected] ~]# cat -n -E /etc/fstab 1 $ 2 #$ 3 # /etc/fstab$ 4 # Created by anaconda on Sat Aug 27 13:53:04 2016$ 5 #$ 6 # Accessible filesystems, by reference, are maintained under ‘/dev/disk‘$ 7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info$ 8 #$ 9 /dev/mapper/centos-root / xfs defaults 0 0$ 10 UUID=0532294a-f8c2-40a7-9d7b-5d84cc21cb92 /boot xfs defaults 0 0$ 11 /dev/mapper/centos-swap swap swap defaults 0 0$
tac命令:用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示;即显示方式与cat相反;
file命令:用来探测给定文件的类型;
[[email protected] ~]# file /tmp/fstab /tmp/fstab: ASCII text
which命令:查找并显示给定命令的绝对路径;
使用格式:which [options] [–] programname […]
选项:
–skip-alias :忽略指定命令的别名;
[[email protected] ~]# which pwd /usr/bin/pwd
whereis命令:用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径;
使用格式:whereis [options] [-BMS directory… -f] name…
选项:
-b :只查找二进制文件;
-m :只查找说明文件;
[[email protected] ~]# whereis svn svn: /usr/bin/svn /usr/share/man/man1/svn.1.gz [[email protected] ~]# whereis -b svn svn: /usr/bin/svn [[email protected] ~]# whereis -m svn svn: /usr/share/man/man1/svn.1.gz
who命令:显示目前登录系统的用户信息;
使用格式:who [OPTION]… [ FILE | ARG1 ARG2 ]
选项:
-b :显示系统此次的启动时间;
-u :显示用户登录详细信息;
-r :显示用户运行的级别;
* w命令同who命令,可显示用户正在执行的操作;
[[email protected] ~]# who -b 系统引导 2016-08-27 15:36 [[email protected] ~]# who -u centos :0 2016-08-27 15:40 ? 12176 (:0) root pts/0 2016-08-27 15:41 . 13263 (192.168.3.23) [[email protected] ~]# who -r 运行级别 5 2016-08-27 15:39 [[email protected] ~]# w 17:34:58 up 1:58, 2 users, load average: 0.00, 0.03, 0.05 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT centos :0 :0 15:40 ?xdm? 1:04 0.11s gdm-session-worker [pam/gdm-password] root pts/0 192.168.3.23 15:41 2.00s 0.14s 0.03s w
mkdir命令:用于创建目录;
使用格式:mkdir [OPTION]… DIRECTORY…
选项:
-p :若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
-v :显示创建目录的详细过程;
-m :建立目录的同时设置目录的权限;
示例:
[[email protected] ~]# mkdir -m 644 /tmp/text drw-r--r--. 2 root root 6 8月 27 19:49 text
rmdir命令:用于删除空目录;
使用格式:rmdir [OPTION]… DIRECTORY…
选项:
-p :删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
-v :显示命令的详细执行过程;
示例:
[[email protected] ~]# rmdir -pv /tmp/text/tset/log rmdir: 正在删除目录 "/tmp/text/tset/log" rmdir: 正在删除目录 "/tmp/text/tset" rmdir: 正在删除目录 "/tmp/text" rmdir: 正在删除目录 "/tmp" rmdir: 删除目录 "/tmp" 失败: 设备或资源忙
tree命令:以树状图列出目录的内容;
使用格式:tree [OPTIONS] [directory …]
选项:
-L # :显示#级目录和文件
示例:
[[email protected] ~]# tree /tmp/a_c /tmp/a_c └── text
bash基础特性介绍)(1)
命令的执行结果状态返回
Linux下一条命令或一个进程执行完成会返回一个一个状态码。
0 :表示成功执行
非0 :表示执行过程中出现异常或非正常退出
在Shell脚本中 最后执行的一条命令将决定整个shell脚本的状态. 此外 shell的内部命令exit也可以随时终止shell脚本的执行,返回Shell脚本的状态码;当shell脚本执行结束前的最后一个命令是不带参数的exit ,那么 shell脚本的最终返回值就是exit语句前一条语句的返回值,根据这个值可以判断脚本成功执行与否。
$? 可以查看最后一条命令的返回值,该变量可以在shell 脚本中的任何地方使用。
[[email protected] ~]# pwd /root [[email protected] ~]# echo $? 0 [[email protected] ~]# pwwwd bash: pwwwd: 未找到命令... [[email protected] ~]# echo $? 127
命令行展开
在非引号内的内容,如果用花括号包括,而且里面用逗号分隔(至少包含一个逗号,可以是空内容),这样花括号里的内容会被展开成用空格分开的一个列表,花括号前后可以紧随前缀和后缀(前后缀都是可选的);
示例1:在tmp目录下创建a_c、a_d、b_c、b_d四个目录;
[[email protected] ~]# mkdir -pv /tmp/{a,b}_{c,d} mkdir: 已创建目录 "/tmp/a_c" mkdir: 已创建目录 "/tmp/a_d" mkdir: 已创建目录 "/tmp/b_c" mkdir: 已创建目录 "/tmp/b_d"
示例2:在tmp目录下创建各种目录:
~]$ mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}} mkdir: 已创建目录 "/tmp/mylinux" mkdir: 已创建目录 "/tmp/mylinux/bin" mkdir: 已创建目录 "/tmp/mylinux/boot" mkdir: 已创建目录 "/tmp/mylinux/boot/grub" mkdir: 已创建目录 "/tmp/mylinux/dev" mkdir: 已创建目录 "/tmp/mylinux/etc" mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d" mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d/init.d" mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig" mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig/network-scripts" mkdir: 已创建目录 "/tmp/mylinux/lib" mkdir: 已创建目录 "/tmp/mylinux/lib/modules" mkdir: 已创建目录 "/tmp/mylinux/lib64" mkdir: 已创建目录 "/tmp/mylinux/proc" mkdir: 已创建目录 "/tmp/mylinux/sbin" mkdir: 已创建目录 "/tmp/mylinux/sys" mkdir: 已创建目录 "/tmp/mylinux/tmp" mkdir: 已创建目录 "/tmp/mylinux/usr" mkdir: 已创建目录 "/tmp/mylinux/usr/local" mkdir: 已创建目录 "/tmp/mylinux/usr/local/bin" mkdir: 已创建目录 "/tmp/mylinux/usr/local/sbin" mkdir: 已创建目录 "/tmp/mylinux/var" mkdir: 已创建目录 "/tmp/mylinux/var/lock" mkdir: 已创建目录 "/tmp/mylinux/var/log" mkdir: 已创建目录 "/tmp/mylinux/var/run" ~]# tree /tmp/mylinux /tmp/mylinux ├── bin ├── boot │ └── grub ├── dev ├── etc │ ├── rc.d │ │ └── init.d │ └── sysconfig │ └── network-scripts ├── lib │ └── modules ├── lib64 ├── proc ├── sbin ├── sys ├── tmp ├── usr │ └── local │ ├── bin │ └── sbin └── var ├── lock ├── log └── run 24 directories, 0 files
元数据及命令引用
元数据介绍
任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode)等。
在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。
元数据管理方式
元数据管理有两种方式:集中式管理和分布式管理。
集中式管理是指在系统中有一个节点专门司职元数据管理,所有元数据都存储在该节点的存储设备上。所有客户端对文件的请求前,都要先对该元数据管理器请求元数据。
分布式管理是指将元数据存放在系统的任意节点并且能动态的迁移。对元数据管理的职责也分布到各个不同的节点上。
元数据信息及查看方法
文件的元数据信息包括文件类型,权限,属主,属组,文件大小,时间戳。
文件类型:
普通文件(regular file):就是一般存取的文件,由ls -al显示出来的属性中,第一个属性为 [-],例如 [-rwxrwxrwx];
目录文件(directory):就是目录,第一个属性为 [d],例如 [drwxrwxrwx];
连接文件(link):类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx];
设备与设备文件(device):与系统外设及存储等相关的一些文件,通常都集中在 /dev目录;
套接字文件(sockets):这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型;
管道文件(FIFO,pipe):FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p];
权限:
读权限:[r]
写权限:[w]
执行权限:[x]
时间戳类型:通常是一个字符序列,唯一地标识某一刻的时间;
access time :最近访问的时间;
modife time :最近更改的时间;
change time :最近改动的时间;
查看文件元数据方法:
ls命令:
ls -l :以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
示例:
[[email protected] ~]# ls -l /tmp 总用量 156 drwxr-xr-x. 3 root root 17 8月 27 20:04 a_c drwxr-xr-x. 2 root root 6 8月 27 18:17 a_d -rw-r--r--. 1 root root 1723 8月 27 15:39 anaconda.log
stat命令:用于显示文件的状态信息;输出的信息比ls命令的输出信息要更详细。
使用格式:stat FILE…
示例:
[[email protected] a_c]# stat /tmp/a_c 文件:"/tmp/a_c" 大小:17 块:0 IO 块:4096 目录 设备:fd00h/64768d Inode:26679 硬链接:3 权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root) 环境:unconfined_u:object_r:user_tmp_t:s0 最近访问:2016-08-27 20:05:42.077946648 +0800 最近更改:2016-08-27 20:04:51.633918078 +0800 最近改动:2016-08-27 20:04:51.633918078 +0800 创建时间:-
touch命令:有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。
使用格式:touch [OPTION]… FILE…
选项:
-c :不建立任何文件;
-a :只更改存取时间;
-m :只更该变动时间;
-t :使用指定的日期时间,而非现在的时间;
示例:
[[email protected] a_c]# touch -t 201311231123.30 /tmp/a_c [[email protected] a_c]# stat /tmp/a_c 文件:"/tmp/a_c" 大小:17 块:0 IO 块:4096 目录 设备:fd00h/64768d Inode:26679 硬链接:3 权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root) 环境:unconfined_u:object_r:user_tmp_t:s0 最近访问:2013-11-23 11:23:30.000000000 +0800 最近更改:2013-11-23 11:23:30.000000000 +0800 最近改动:2016-08-27 20:36:25.210605071 +0800 创建时间:-
命令别名的定义及引用
在管理和维护Linux系统的过程中,将会使用到大量命令,有一些很长的命令或用法经常被用到,重复而频繁地输入某个很长命令或用法是不可取的。这时可以使用命令别名功能将这个过程简单化。
通常情况下,系统中已经定义了一些命令别名,要查看已经定义的命令别名,可以使用alias命令:
[[email protected] a_c]# alias alias cp=‘cp -i‘ alias egrep=‘egrep --color=auto‘ alias fgrep=‘fgrep --color=auto‘ alias grep=‘grep --color=auto‘ alias l.=‘ls -d .* --color=auto‘ alias ll=‘ls -l --color=auto‘ alias ls=‘ls --color=auto‘ alias mv=‘mv -i‘ alias rm=‘rm -i‘ alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
当我们使用命令cp(复制文件命令)时,系统会用cp -i代替命令中的cp。除此之外,还定义了ls命令及其使用的颜色、移动文件命令mv、删除命令rm等;
用于设置系统别名的相关文件保存在/etc/profile.d/目录中(系统别名目录);
许多时候管理员都会按自己的使用习惯定义命令别名:
[[email protected] a_c]# alias mk=‘mkdir‘ [[email protected] a_c]# alias alias cp=‘cp -i‘ alias egrep=‘egrep --color=auto‘ alias fgrep=‘fgrep --color=auto‘ alias grep=‘grep --color=auto‘ alias l.=‘ls -d .* --color=auto‘ alias ll=‘ls -l --color=auto‘ alias ls=‘ls --color=auto‘ alias mk=‘mkdir‘ alias mv=‘mv -i‘ alias rm=‘rm -i‘ alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
要取消已经定义好的命令别名,可以对别名使用unalias命令:
[[email protected] a_c]# unalias mk [[email protected] a_c]# alias alias cp=‘cp -i‘ alias egrep=‘egrep --color=auto‘ alias fgrep=‘fgrep --color=auto‘ alias grep=‘grep --color=auto‘ alias l.=‘ls -d .* --color=auto‘ alias ll=‘ls -l --color=auto‘ alias ls=‘ls --color=auto‘ alias mv=‘mv -i‘ alias rm=‘rm -i‘ alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
命令引用
引用就是指将字符串用引用符号括起来,以防止特殊字符被解释为其他意义。引用时屏蔽特殊字符的特殊意义,而将其解释为字面意义。
引用命令的执行结果可以使用两种方式:
$(COMMAND)或`COMMAND`
示例:
[[email protected] a_c]# echo $? `cp /etc/fstab /tmp/a_d` 0
bash基础特性介绍)(2)
文件名通配
当在使用命令行时,有很多时间都用来查找你所需要的文件,如ls、find等。 shell提供了一套完整的字符串模式匹配规则,或者称之为元字符,当shell遇到上述字符时,就会把它们当作特殊字符,而不是文件名中的普通字符,这样用户就可以用它们来匹配相应的文件名,这可以称为通配符。
通配符列表:
* :表示匹配任意长度的任意字符;
例:
[[email protected] ~]# ls in* initial-setup-ks.cfg
? :表示匹配任意单个字符;
例:
[[email protected] tmp]# ls -d a* ac a_c a_d anaconda.log [[email protected] tmp]# ls -d a? ac
[] :表示匹配指定范围内任意单个字符;常用的有[a-z],[0-9],[A-Z]
常用字符集合:均只匹配单个
[[:space:]] :所有空白字符 ;
[[:punct:]] :所有标点符号;
[[:lower:]] :所有小写字母;
[[:upper:]] :所以大写字母;
[[:digit:]] :所有数字集合;
[[:alnum:]] :所以字母和数字;
[[:alpha:]] :所以字母;
[^] :匹配指定范围外的任意字符;
示例1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
[[email protected] var]# ls 123edv _efn1234asdf l234d lib local lock log lsd2asd mail nis opt preserve run spool tmp yp [[email protected] var]# ls -d l*[0-9]*[[:lower:]] l234d lsd2asd
示例2:显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
[[email protected] etc]# ls [0-9]*[^0-9] 231nsdjk.dsf 324asd
示例3:显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
[[email protected] etc]# ls [^a-z][a-z]* 2djfio21 _bhds2147
date命令:可以用于创建以当前系统日期与时间为名的文件和目录;
使用方法:date [options][+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
示例:在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[[email protected] tmp]# touch "tfile-$(date +%Y-%m-%d-%H-%M-%S)" [[email protected] tmp]# ls ks-script-XyUjMw tfile-2016-08-27-22-44-42 yum.log
复制匹配到的文件到指定目录:
示例1:复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
[[email protected] etc]# ls -d p*[^0-9] pam.d passwd passwd- pki plymouth pm popt.d postfix ppp prelink.conf.d [[email protected] etc]# mkdir /tmp/mytest1 [[email protected] etc]# cp -r /etc/p*[^0-9] /tmp/mytest1 [[email protected] etc]# cd /tmp/mytest1 [[email protected] mytest1]# ls pam.d passwd passwd- pki plymouth pm popt.d postfix ppp prelink.conf.d
示例2:复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
[[email protected] ~]# ls -d /etc/*.d /etc/bash_completion.d /etc/depmod.d /etc/init.d /etc/modules-load.d /etc/prelink.conf.d /etc/binfmt.d /etc/dnsmasq.d /etc/ld.so.conf.d [[email protected] ~]# mkdir /tmp/mytest2 [[email protected] ~]# cp -r /etc/*.d /tmp/mytest2 [[email protected] ~]# ls /tmp/mytest2 bash_completion.d cron.d dracut.conf.d ld.so.conf.d modules-load.d
示例3:复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。
[[email protected] ~]# ls -d /etc/{l,m,n}*.conf /etc/ld.so.conf /etc/libaudit.conf /etc/libuser.conf [[email protected] ~]# mkdir /tmp/mytest3 [[email protected] ~]# cp -r /etc/{l,m,n}*.conf /tmp/mytest3 [[email protected] ~]# ls /tmp/mytest3 ld.so.conf libaudit.conf libuser.conf
本文出自 “飞翔ジ羽毛” 博客,请务必保留此出处http://feixiangyumao.blog.51cto.com/9913184/1851607
以上是关于Linux常用命令及bash特性的主要内容,如果未能解决你的问题,请参考以下文章