linux基础命令第二章-渐入佳境

linux的入门篇

一,bash字符串的处理

1.1,bash的字符处理-通配符

  • 1,tyy当前的位置,如果是图形化终端下显示/dev/pts/0,如果是黑窗口界面会显示/dev/tty1
  • 2,通配符,截取变量的字符串

FILE=/usr/local/src
echo ${file#*} 结果为 usr/local/src
echo ${ile##*/} 结果为 src
echo ${file%/*)结果为 /usr/local

  • 3,字符串切片:${var:offset:number}
  • 4,取字符串的最右侧几个字符(自右向左去) ${var: -lengh}

注:冒号后必须有一空白符

  • 5,查找替换
变量提取 描述
${var/pattern/stubst} 查找var所表示的字符串中,第一次被pattern所匹配到字符串
${var//patterb/substi} 查找var所表示的字符串,所有能被pattern所匹配到字符串
  • 6,查找并删除

${/var/pattern/} 查找var所表示的字符串中,第一次被pattern所匹配的字符串,删除之

  • 7,字符大小写转换

${var^^} 所有小写换成大写,
${var,} 所有大写换成小写
//注意:这里使用的是两个逗号”,,”


二,文件命名规则

1,长度不能超过256个字符

2,不能使用根符号“/”当文件名称

3,严格区分大小写。

4,可以包含大小写字母或数字,可以包含下划线但不应该以数字开头和其他字符。


三,linux 常用命令进阶-文件系统查找

  • 1,locate

:非实时,模糊匹配,查找是根据全系统文件数据库进行的,查找的速度快。
:依赖于事先构建的索引,索引的构建是在系统空闲时自动运行。

用法

选项 描述
-b ,–basename – 仅匹配路径名的基本名称
-c, --count – 只输出找到的数量
-d, --database DBPATH – 使用 DBPATH 指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
-e, --existing – 仅打印当前现有文件的条目
-1 - 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
-0, --null – 在输出上带有NUL的单独条目
-S, --statistics – 不搜索条目,打印有关每个数据库的统计信息
-q – 安静模式,不会显示任何错误讯息。
-P, --nofollow, -H – 检查文件存在时不要遵循尾随的符号链接
-l, --limit, -n LIMIT 将输出(或计数)限制为LIMIT个条目
-n – 至多显示 n个输出。
-m, --mmap – 被忽略,为了向后兼容
-r, --regexp REGEXP – 使用基本正则表达式
–regex – 使用扩展正则表达式
-q, --quiet – 安静模式,不会显示任何错误讯息
-s, --stdio – 被忽略,为了向后兼容
-o – 指定资料库存的名称。
-h, --help – 显示帮助
-i, --ignore-case – 忽略大小写
-V, --version – 显示版本信息

例如:在这里插入图片描述

  • 2,updatedb,手动生成文件数据库

:索引构建过程需要遍历整个根文件系统,极消耗资源
参数-o(目录):忽略默认的数据库文件,使用指定slocate数据库文件
-U目录:更新指定目录的slocate数据库
-v :显示执行的详细过程。
查找一个未知的文件,当创建后依然没有,则通过updatedb手动更新查找目录。
在这里插入图片描述

  • 3,find:实时查找,精确性强,遍历指定目录中所有文件完成查找。
  • 3.1,语法:find [opion] 查找路径,查找标准,查找到处理的动作
  • 命令使用实例:find / -name abc 查找从根下的相应文件 find / -type d -name passwd

    扫描二维码关注公众号,回复: 12021505 查看本文章

查找路径//默认当前目录,查找标准,//默认为指定路径下的所有文件。

参数 描述
-name ‘filename’ //对文件名作精确匹配.支持glob通配符机制
-iname ‘filename’ //文件名匹配时不区分大小写
-regex pattern //基于正则表达式进行文件名匹配.以pattern \ //匹配整个文件路径字符串,而不仅仅是文件名称
-user username //根本属主来查找
-group groupname //根据属组来查找
-uid / /根据UID进行查找,当用户被删除以后文件的属主会变为此用户的UID
-gid //根据GID进行查找,当用户被删除以后文件的属组会变为此用户的GID
-nouser //查找没有属主的文件.用户被删除的情况下产生的文件,只有uid没有属主
-nogroup //查找没有属组的文件.组被删除的情况下产生的文件,只有gid没有属组
-type //根据文件类型来查找(f,d,c,b,l,p,s)
type=f 文件
type=d 目录
type=c 字符
-size //根据文件大小进行查找。如1k、1M,+10k、+10M,-1k、-1M, \
/+表示大于,-表示小于 [+ -]
#K、#M、#G #Unit表示(从#-1到#之间的范围大小)-#Unit表示(从0到#-1的范围大小)+#Unit表示(大于#的所有)
-mtime //修改时间
ctime //改变时间
atime /访问时间 +5 //5天前-5 //5天以内
mmin /多少分钟修改过
cmin //多少分钟改变过
amin //多少分钟访过//+5分钟前-5 //5分钟以内
-perm mode //根据权限精确查找
-perm -mode //文件权限能完全包含此mode时才符合条件
-perm /mode //9位权限中有任何一位权限匹配都视为符合查找条件

示例:root@Eryuege ~]# find /root/ -mmin -1
/root/
/root/abc
/root/abc/w
/root/abc/w/c
/root/c
/root/c/abc
/root/c/abc/w
/root/c/abc/w/c

  • 3.2//组合条件:
    -a
    -o
    -not

    例:
    !A -a !B = !(A -o B)
    |A -o !B = !(A -a B)

  • 3.3//处理动作:默认为显示到屏幕上
    -print //显示
    -ls //类似ls -l的形式显示每一个文件的详细信息
    -delete //删除查找到的文件
    -fls /path/to/somefile //查找到的所有文件的长格式信息保存至指定文件中
    -ok COMMAND {} ; //对查找到的每个文件执行COMMAND,每次操作都需要用户确认
    -exec COMMAND {} ; //对查找到的每个文件执行COMMAND,操作不需要确认

//注意:find传递查找到的文件至后面指定的命令时,查找到所有
//符合条件的文件一次性传递给后面的命令,而有些命令不能接受过多参数,
//此时命令执行可能会失败。而xargs可规避此问题。
xargs //通过管道将查找到的内容给xargs处理,xargs后面直接跟命令即可
在这里插入图片描述


四,文件层级系统

4.1FHS

  • //文件层级系统 多数的linu版本采用这种文件组织形式,类似于Windows操作系统中C盘的文件目录。

文件系统

文件路径 文件描述
/ //可以单独分区,LVM分区
/boot //系统启动相关的文件,如内核(vmlinuz)、initrd(initramfs),//以及grub(bootloader)。建议单独分区,基本分区
/dev //设备文件。不能单独分区 -----设备文件 //关联至一个设备驱动程序,进而能够与之对应硬件设备进行通信---- -块设备 //随机访问,数据块(比如硬盘)-----字符设备 //也叫线性设备,线性访问,按字符为单位(比如鼠标、显示器)—设备号 //主设备号(major)和次设备号(minor)-----主设备号标识设备类型----次设备号标识同一类型下的不同设备-----设备文件只有元数据,没有数据
/etc //配置文件
/home //普通用户的家目录,每一个用户的家目录通常默认为/home/USERNAME。 \ //建议单独分区
/root //管理员的家目录。不该单独分区
/lib //库文件 静态库 //.a ;() 动态库 //.dll,.so(shared object)======= /lib/modules //内核模块文件
/media //挂载点目录,通常用来挂载移动设备
/mnt //挂载点目录,通常用来挂载额外的临时文件系统,比如另一块硬盘
/opt //可选目录,早期通常用来安装第三方程序
/proc //伪文件系统,内核映射文件(伪文件系统实际上里面是没有任何内容的, \ === //开机之后才映射上去的)。不能单独分区
/sys //伪文件系统,跟硬件设备相关的属性映射文件(伪文件系统实际上里面是没有 \ //任何内容的,开机之后才映射上去的)。不能单独分区
/tmp //临时文件,/var/tmp
/var //可变化的文件,比如log、cache。存放日志信息、pid文件、lock文件,\ //建议单独分区
/bin //可执行文件,用户命令
/sbin //管理命令
/usr //shared,read-only,全局共享只读文件。提供操作系统核心功能,可以单独分区----/usr/bin----- /usr/sbin ---- /usr/lib
/usr/local //第三方软件安装路径---- /usr/local/bin— /usr/local/sbin------- /usr/local/lib--------- /usr/local/etc-------- /usr/local/man

/etc,/bin,/sbin,/lib内是系统启动就需要用到的程序,这些目录不能挂载额外的分区,
必须在根文件系统的分区上
/usr/bin,/usr/sbin,/usr/lib提供操作系统核心功能,/usr可以单独分区
/usr/local/bin,/usr/local/sbin,/usr/local/lib,/usr/local/etc,
/usr/local/man等等在/usr/local目录下的内容都是第三方软件,建议单独分区

4.2重定向和管道

重定向

输出重定向 ls > haha 将ls的内容输出到haha
输入重定向ls >haha <xixi 将xixi的内容输入到哈哈。
双>>表示追加,单>表示覆盖 双<<表示当作匹 配的内容,表示开始和结束;
示例:
在这里插入图片描述

管道

  • 管道符 " | ":可以把一个命令的标准输出传送到另一个命令的标准输入中,连续的|意味着第一个命令的输出为第二个命令的输入,第二个命令的输入为第一个命令的输出,依次类推。

命令使用示例:
[root@Eryuege ~]# ls > hehe |cat hehe
2020-10-18
abc
ac
anaconda.log
b.tar.bz2
c
c.tar.zx
haha
hehe
initial-setup-ks.cfg
num.tar.gz
passwd
runoob.txt
test
wokr
work
xixi
[root@Eryuege ~]#
//系统设定:
默认输入设备 //标准输入,STDIN,0 (键盘)
默认输出设备 //标准输出,STDOUT,1 (显示器)
标准错误输出 //STDERR,2 (显示器)

//I/O重定向:
>:覆盖输出
>>:追加输出

2> //重定向错误输出
2>> //追加重定向错误输出
&> //覆盖重定向标准输出或错误输出至同一个文件
&>> //追加重定向标准输出或错误输出至同一个文件
< //输入重定向
<< //Here Document

管道 //前一个命令的输出,作为后一个命令的输入。最后一个命令会在当前shell进程
//的子shell进程中执行
命令1 | 命令2 | 命令3 | …

tee //从标准输入读取数据,输出一份到屏幕上,一份保存到文件

[root@localhost ~]# echo “hello world” | tee /tmp/hello.out
hello world
[root@localhost ~]# cat /tmp/hello.out
hello world

猜你喜欢

转载自blog.csdn.net/LBJ19224/article/details/109135103