第二周 Linux基础命令入门(二)
摘要
1、描述Linux上的文件管理类命令并详解。
2、描述Bash的工作特性。
3、描述文件的元数据信息详解。
4、描述命令别名的使用。
5、详解文件通配符。
一、Linux上的文件管理类命令
[root@localhost etc]# ls -l
-rw-r--r--. 1 root root 0 10月 19 02:00 3axaxx
-rw-r--r--. 1 root root 0 10月 19 02:01 abcdefg
drwxr-xr-x. 3 root root 97 10月 15 17:51 abrt
lrwxrwxrwx. 1 root root 56 10月 15 17:51 favicon.png -> /usr/share/icons/hicolor
/16x16/apps/fedora-logo-icon.png
Linux系统上的文件类型:
- : 常规文件,即f
d :directory 即目录文件
b :block device 映射块设备文件 ,支持以"block"为单位,支持随机访问
c: character device 字符设备文件,支持以“character”为单位,支持线性访问(有次序得访问)
ls - l /dev crw-rw----. 1 root video 10, 175 11月 10 15:48 agpgart
major number 主设备号,用表示设备类型,进而确定要加载的驱动程序
minor number 次设备号,用于表示同一类型中的不同设备
二者用,来区分
l: symbolic link 符号链接文件(类似windows的快捷方式,指向另一文件的路径。或称为软连接文件)
p:pipe 命名管道
s:socket 套接字文件,实现多个进程之间进行通信,多用于提供服务
二、Bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容
Bash的工作特性之命令执行状态返回值:
命令的执行状态结果
1) bash通过状态返回值来输出此结果
成功:0 失败:1-255
命令执行完成之后,其状态返回值保存于bash特殊变量 $? 中 。$?只能获取当前命令的结果
[root@localhost etc]# echo $?
0
2)引用命令的执行结果:
$(COMMAND) 或者 `COMMAND`
[root@localhost etc]# mkdir $(date +%T)
[root@localhost etc]# ls
12:53:45 hosts.allow rc0.d
命令行展开所涉及的内容:
1)cp:copy 文件复制功能
源文件:目标文件
单源复制 cp [OPTION]... [-T] SOURCE DEST
如果dest路径不存在,则复制原内容,粘贴创建该目录dest内
如果dest存在,1)dest是非目录文件,则会复制目标文件 2)dest是目录文件,则先在dest目录下创建一个与源文件同名的文件,并复制过来
多源复制 cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
如果dest不存在,返回错误
如果dest存在,分别复制每个文件到目标目录中,并保持原名
常用选项:
-i 交互式复制 覆盖之前提醒客户确认
-f 强制性覆盖目标文件
-r 递归复制目录
-d 复制符号链接文件本身,而非其指向的源文件本身
--preserv=
mode 权限
ownership 属主和属组
timestamps 时间戳
context 安全标签
links 符号链接
xattr:扩展属性
all 上述所有属性
-a -dr --preserve=all archive 用于实现归档,备份使用
2)mv: move 移动
常用选项
-i 交互式
-f force
3)rm:remove 删除文件(建议move到一个单独的文件夹,作用类似回收站)
-i
-r 删除命令,每个文件都会确认一遍
-rf 强制删除
危险操作,勿操作!!! rm-rf /或者rm -rf /*
4)目录管理类的命令:
mkdir , rmdir
mkdir make DIRECTORY 创建目录
mkdir [OPTION]... DIRECTORY...
注意:路径基名方为命令的作用对象,基名之前的路径必须存在。
-p 自动按需创建父目录
-v verbose 显示详细过程
-m MODE 直接给定权限
rmdir rmdir [OPTION]... DIRECTORY...
删除文件下的空目录,如果删除为非空目录,则失败,需要先删除里面内容再删除外部
-p 删除某目录后,如果其父目录为空,则一并删除之
-v 显示过程
pwd:printing woking directory 显示工作目录
5)cd: change directory 切换目录
cd [/PATH/TO/SOMENDIR]
只输入 cd 切换回家目录
bash中,~也表示家目录
cd ~ 切换回自己的家目录
输入cd ~USERNAME ;切换至指定用户的家目录,只有管理员可以切换至其他用户家目录
cd - 在上一次所在目录与当前目录来回切换
$PWD:当前工作目录
$OLDPWD:上一次的工作目录
6)ls:list 列出指定目录下的内容
ls [OPTION]... [FILE]...
-a 显示所有文件,包括隐藏文件
-A:显示除了。和。。之外的所有文件,包括隐藏文件
ls -A /etc
-l --long 长格式列表,显示文件的详细属性信息:
/]# ls -l /etc
-rw-r--r--. 1 root root 16 10月 10 14:35 adjtime
-r :文件类型,- ,d,b,c,l,s,p
-rw-r--r--.
rw- 文件属主权限
r-- 文件属组权限
r-- 其他用户(非属主、属组)的权限
1:数字表示文件被硬链接的次数,
root 第一个root 文件的属主
root 第二个root 文件的属组
16: 数字表示文件大小,单位是字节
16 10月 10 14:35 文件最近一次修改时间
adjtime 文件名
-h 对文件大小单位换算,换算后的结果非精确值
-ld 查看文件本身的信息,而非其自身内部的文件内容
/]# ls -ld /etc
drwxr-xr-x. 74 root root 8192 10月 12 02:24 /etc
-r或者-lr 对文件排序呈降序排序
-R recursive 递归显示
7) cat: concatenate file 连接文件 文件正序显示
文本文件查看工具
cat /etc/fstab
cat后可以跟多个路径文件
-n :显示的文件内容进行统一编号
cat -n [COMMAND] [COMMAND]
-E:显示行结束符$
8) tac 文本 逆序显示
文本文件查看工具
tac /etc/fstab
tac后可以跟多个路径文件
-n :显示的文件内容进行统一编号
tac -n [COMMAND] [COMMAND]
-E:显示行结束符$
9)file:查看文件内容类型
file [FILE].................
10)echo :回显命令
echo [SHORT-OPTION]... [STRING]...
STRING 可以使用引号,单引号和双引号均可用
单引号:强引用,变量引用不执行替换
[root@localhost /]# echo '$SHELL'
$SHELL
双引号: 弱引用,变量引用会被替换
[root@localhost /]# echo "$SHELL"
/bin/bash
[root@localhost /]# echo "DAA"
DAA
-n 输出后不自动换行操作
[root@localhost /]# echo -n "DAA"
DAA[root@localhost /]#
-e 让转义符生效 \n显示换行 \t:制表符,类似增加新字段
[root@localhost /]# echo -e "D \nAA"
D
AA
三、完成以下练习(1)
命令行展开
~ :自动展开为用户的家目录,或指定的用户的家目录
{ }:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径
(1)创建/tmp目录下的:a_c, a_d, b_c, b_d
[root@localhost tmp]# mkdir -pv /tmp/{a,b}_{c,d}
mkdir: 已创建目录 "/tmp/a_c"
mkdir: 已创建目录 "/tmp/a_d"
mkdir: 已创建目录 "/tmp/b_c"
mkdir: 已创建目录 "/tmp/b_d"
[root@localhost tmp]# ls
a_c a_d b_c b_d
创建/tmp/mylinux目录下的 :
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
[root@localhost tmp]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,syscon
fig/{network-scripts}},lib/{modules},lib64,proc,sbin,sys,tmp,usr/{local/{bin,sbin}},var/{lo_{ck,g},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/lo_ck"
mkdir: 已创建目录 "/tmp/mylinux/var/lo_g"
mkdir: 已创建目录 "/tmp/mylinux/var/run"
[root@localhost tmp]# cd mylinux/
[root@localhost mylinux]# ls
bin boot dev etc lib lib64 proc sbin sys tmp usr var
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
四、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
1、文件的元数据
文件的元数据包括:名称,路径,大小,inode号,文件类型,硬链接数,权限,时间戳等
stat [option] file…
file 文件名称
size 文件大小 单位K
blocks 所占块的个数
IO blocks 单块的大小
device 设备标识
inode 节点id,文件的元数据保存在磁盘上的inode区域中,每一个文件都有一个对应的inode号码
links 硬链接数,一个文件的硬链接数为N,表示该文件在磁盘上有N个与其对应的inode号码相同的文件
access 权限,文件的权限包括r(读),w(写),x(执行),suid,sgid,sbit这几种权限,它们可以分别对应到文件的属主、属组和其他人上
uid 属主信息
gid 属组信息
access 最后一次访问时间,文件被访问,即文件在使用cat, more, less, head等命令查看,或者cp等命令将其作为源文件复制给其他路径下,或者使用grep命令进行匹配查找等操作时,atime都会改变
modify 最后一次修改时间,指文件内容被修改时,mtime会改变
change 最后一次更正时间,指文件的元数据被改变,例如chmod, chown, mv等命令改变了文件权限名称路径等信息,ln命令增加了文件的硬链接等操作都会改变ctime
[root@localhost mylinux]# stat -L /tmp/mylinux/
文件:"/tmp/mylinux/"
大小:4096 块:8 IO 块:4096 目录
设备:fd00h/64768d Inode:202724745 硬链接:14
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2017-11-29 14:28:11.973040042 +0800
最近更改:2017-11-29 14:28:02.480300238 +0800
最近改动:2017-11-29 14:28:02.480300238 +0800
创建时间:-
使用touch修改时间戳
用法:touch [选项]... 文件...
参数:
-a 只更改访问时间
-c, --no-create 不创建任何文件
-d, --date=字符串 使用指定字符串表示时间而非当前时间
-f (忽略)
-h, --no-dereference 会影响符号链接本身,而非符号链接所指示的目的地
(当系统支持更改符号链接的所有者时,此选项才有用)
-m 只更改修改时间
-r, --reference=FILE use this file's times instead of current time
-t STAMP use [[CC]YY]MMDDhhmm[.ss] instead of current time
--time=WORD change the specified time:
WORD is access, atime, or use: equivalent to -a
WORD is modify or mtime: equivalent to -m
--help 显示此帮助信息并退出
--version 显示版本信息并退出
请注意,-d 和-t 选项可接受不同的时间/日期格式。
[root@localhost mylinux]# touch -m -t 021211221133.00 /tmp/mylinux/
[root@localhost mylinux]# stat -L /tmp/mylinux/
文件:"/tmp/mylinux/"
大小:4096 块:8 IO 块:4096 目录
设备:fd00h/64768d Inode:202724745 硬链接:14
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2017-11-29 16:13:38.263642314 +0800
最近更改:0212-11-22 11:33:00.000000000 +0805
最近改动:2017-11-29 16:14:10.970745835 +0800
创建时间:-
五、命令的别名
命令别名:
获取所有可用别名的定义:
~]#alias
定义别名
~]#alias NAME=‘COMMAND’
注意:只对当前shell进程设置有效
/]# alias cls=clear
撤销别名
/]# cls
~]#unalias NAME
which
显示文件完成路径 which - shows the full path of (shell) commands.
which [options] [--] programname [...]
~]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
/usr/bin/alias
/usr/bin/which
--COMMAND-alias 忽略别名
whereis
显示文件的路径,手册页,
-b 只看二进制文件路径
-m 只看使用手册文件路径
who
查看登录当前用户的相关信息
-b 显示系统此次启动时间
-d 显示此次死亡进程
-l 显示登录进程
-u 比who多显示端口号
-r 运行级别
w
查看当前用户和其现阶段工作内容
六、详解文件通配符并完成以下练习
详解文件通配符
globbing :文件名通配
匹配模式:元字符
*:匹配任意长度的任意字符
? :匹配任意单个字符
pa? ??pa p?a p?a?
[ ]: 匹配指定范围内的任意单个字符
有几种特殊格式:
[a-z] [A-Z] [0-9] [a-z0-9] [abcxyz]
pa[0-9][a-z] pa2[0-9][0-9]
[[:upper:]] 只匹配大写字母
[[:lower:]] 只匹配小写字母
[[:alpha:]] 只匹配所有字母
[[:digit:]] 只匹配所有数字
[[:alnum:]] 只匹配所有字母和数字
[[:space:]] 所有空白字符 touch p \空格 a
[[:punct:]] 匹配所有符号
[^] :匹配指定范围外的单个字符(非!!)
[^[:upper:]]
[^0-9]
1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录
[root@localhost var]# ls -d l*[[:alnum:]]
lib local local01 local02 lock log
2、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
[root@localhost var]# ls -d [0-9]*[^0-9]
0_abcc 0_bafaf 2_abcc 2_bafaf
3、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
[root@localhost etc]# ls -d /etc/[^[:alpha:]][a-zA-Z]*
/etc/3axaxx /etc/,avc23
4、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@localhost etc]# touch /tmp/tfile-$(date +"%Y-%m-%d-%H-%M-%S")
[root@localhost etc]# ls /tmp
a_c a_d b_c b_d magedu1.com mylinux tfile-2017-11-29-18-08-27
5、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest2目录中。
[root@localhost mytest2]# cp -a /etc/p*[^[:digit:]] /tmp/mytest2/
[root@localhost mytest2]# ls
pam.d passwd- pki pm postfix prelink.conf.d profile protocols
passwd pinforc plymouth popt.d ppp printcap profile.d
6、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest1目录中。
[root@localhost mytest2]# mkdir -pv /tmp/mytest1
mkdir: 已创建目录 "/tmp/mytest1"
[root@localhost ~]# cp -a /etc/*.d /tmp/mytest1
[root@localhost ~]# ls /tmp/mytest1
bash_completion.d gdbinit.d modules-load.d rc1.d rsyslog.d usb_modeswitch.d
binfmt.d grub.d my.cnf.d rc2.d rwtab.d xinetd.d
7、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中
[root@localhost ~]# mkdir -pv /tmp/mytest3
mkdir: 已创建目录 "/tmp/mytest3"
[root@localhost ~]# cp /etc/[lmn]*.conf /tmp/mytest3
[root@localhost ~]# ls /tmp/mytest3
ld.so.conf libuser.conf logrotate.conf mke2fs.conf nsswitch.conf
libaudit.conf locale.conf man_db.conf named.conf
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90353