Linux部分主要命令精讲

Linux部分命令精讲

Linux命令之stat命令

stat命令简介

stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。stat命令可以查看的信息包括:

  • File:显示文件名
  • Size:显示文件大小
  • Blocks:文件使用的数据块总数
  • IO Block:IO块大小
  • regular file:文件类型(常规文件)
  • Device:设备编号
  • Inode:Inode号
  • Links:链接数
  • Access:文件的权限
  • Gid、Uid:文件所有权的Gid和Uid
  • access time:表示我们最后一次访问(仅仅是访问,没有改动)文件的时间
  • modify time:表示我们最后一次修改文件的时间
  • change time:表示我们最后一次对文件属性改变的时间,包括权限,大小,属性等等
  • Birth time : 文件创建时间,crtime,不过据查此属性linux已废弃,目前状态显示结果均为-

使用示例

1、获取命令帮助

stat --help

2、查看文件状态信息
[root@xcz7 ~]# stat hello.c
  文件:"hello.c"
  大小:0               块:0          IO 块:4096   普通空文件
设备:fd00h/64768d      Inode:67170999    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2024-03-06 16:54:15.538414822 +0800
最近更改:2024-03-06 16:54:15.538414822 +0800
最近改动:2024-03-06 16:54:15.538414822 +0800
创建时间:-
  • -f查看文件所在文件系统状态信息

  • -t以简洁形式输出文件信息

  • -L显示软连接原始文件状态信息

  • -c按照指定格式输出;

功能代码
获取文件inodestat -c %i test.sh
获取文件所属用户stat -c %U test.sh
获取文件所属用户IDstat -c %u test.sh
获取文件所属用户组stat -c %G test.sh
获取文件用户组IDstat -c %g test.sh
获取文件磁盘挂载点stat -c %m xxx
获取文件访问时间stat -c %x xxx
获取文件修改时间stat -c %y xxx
获取文件更改时间stat -c %z xxx
获取文件权限stat -c %A xxx or stat -c %a xxx

Linux命令之cat命令

cat (全称 concatenate) 命令是 Linux/类 Unix 操作系统中最常用的命令之一。cat 命令允许我们创建单个或多个文件、查看文件内容、连接文件和重定向终端或文件中的输出。

​ 1.显示文件内容

cat /etc/passwd

​ 2.终端查看多个文件的内容

cat rumenz rumenz1

​ 3.用cat命令创建文件

cat > rumenz2

​ 4.在文件中显示行号

​ 随着 -n 选项你可以看到一个文件的行号 song.txt 在输出端。

更多选项:

-n 或 --number:由 1 开始对所有输出的行数编号。

-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。

-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。

-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。

-E 或 --show-ends : 在每行结束处显示 $。

-T 或 --show-tabs: 将 TAB 字符显示为 ^I。

-e : 等价于 -vE。

-A, --show-all:等价于 -vET。

-t:等价于"-vT"选项;

whereis 命令

​ whereis 命令主要用于定位可执行文件、源代码文件、帮助文件在文件系统中的位置。whereis 命令还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。

​ whereis 命令查找速度非常快,这是因为它根本不是在磁盘中漫无目的乱找,而是在一个数据库中(/var/lib/mlocate/)查询。这个数据库是 Linux 系统自动创建的,包含有本地所有文件的信息,并且每天通过自动执行 updatedb 命令更新一次。也正是因为这个数据库要每天才更新一次,就会使得 whereis 命令的搜索结果有时候会不准确,比如刚添加的文件可能搜不到。

(1)命令格式

​ whereis [选项] 文件

(2)常用参数

参数描述
-b定位可执行文件
-m定位帮助文件
-s定位源代码文件
-u搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件
-B指定搜索可执行文件的路径
-M指定搜索帮助文件的路径
-S指定搜索源代码文件的路径

which命令

which 命令用于查找并显示给定命令的绝对路径,环境变量 PATH 中保存了查找命令时需要遍历的目录。

which 指令会在环境变量 $PATH 设置的目录里查找符合条件的文件。也就是说,使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

显示命令的别名

如果变量有别名,会直接显示变量的别名

which rm
alias rm='rm -i'
	/usr/bin/rm

rm的别名是rm -i

find命令详解

1. find命令作用

find命令用来在指定目录下查找文件。

2. find命令选项基本格式

find 目录 -选项 动作[-print -exec -ok …]

3. 常用选项:

-a:and 必须满足两个条件才显示
-o:or 只要满足一个条件就显示
-name:按照文件名查找文件
-iname:按照文件名查找文件(忽略大小写)
-type:根据文件类型进行搜索
-perm:按照文件权限来查找文件
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-fprint 文件名:将匹配的文件输出到文件。
-newer file1 ! newer file2 查找更改时间比文件file1新但比文件file2旧的文件

4. 常用动作:

-print 默认动作,将匹配的文件输出到标准输出
-exec 对匹配的文件执行该参数所给出的命令。相应命令的形式为 'command' { } \;,注意{ }\;之间的空格。
-ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
-delete 将匹配到的文件删除
|xargs  将匹配到的文件删除   |xargs rm -rf 

5. 根据文件名进行匹配

5.1 列出当前目录及子目录下所有文件和文件夹

find .

5.2 在/home目录下查找以.txt结尾的文件名

 find /home/ -name "*.txt" 

5.3 在/home目录下查找以.txt结尾的文件名,但忽略大小写

find /home -iname "*.txt"

5.4 查找 /home/ 下所有以.txt或.pdf结尾的文件

find /home/ -name "*.txt" -o -name "*.pdf"

5.5 查找 /home/ 下所有以a开头和以.txt结尾的文件

find /home/ -name "*.txt" -a -name "a*"

5.6 搜索/home目录下txt结尾的文件,并将输出到指定文件中(re.txt)

 find /home/ -type f -name "*.txt" -fprint /tmp/re.txt 
 cat /tmp/re.txt
/home/a.txt
/home/b.txt

6. 根据文件类型进行搜索

-type 类型参数
类型参数列
f 普通文件
l 符号连接(软连接)
d 目录
b 块设备
s 套接字

6.1

  find /home/ -type f
/home/frank/.bash_logout
/home/frank/.bash_profile
/home/frank/.bashrc

6.2

  find /usr/bin/ -type l
/usr/bin/bashbug
/usr/bin/lastb
/usr/bin/sh
/usr/bin/geqn
/usr/bin/ex
/usr/bin/lz4cat
/usr/bin/gneqn
/usr/bin/gnroff

6.3

  find /usr/local/ -type d
/usr/local/
/usr/local/bin
/usr/local/etc
/usr/local/games
/usr/local/include
/usr/local/lib
/usr/local/lib64
/usr/local/libexec
/usr/local/sbin

6.4

find /dev/ -type b
/dev/dm-1
/dev/dm-0
/dev/sda2
/dev/sda1
/dev/sda
/dev/sr0

6.5

 find /var/lib/ -type s
/var/lib/mysql/mysql.sock

7. 基于目录深度搜索

7.1 向下最大深度限制为3

  find /usr/local/ -maxdepth 3 -type d
/usr/local/
/usr/local/bin
/usr/local/etc
/usr/local/games
/usr/local/include
/usr/local/lib
/usr/local/lib64
/usr/local/libexec
/usr/local/sbin
/usr/local/share
/usr/local/share/applications
/usr/local/share/info
/usr/local/share/man
/usr/local/share/man/man1
/usr/local/share/man/man1x

7.2 搜索出深度距离当前目录至少2个子目录的所有文件

  find /usr/local/ -mindepth 2 -type f
/usr/local/sbin/mail.py

8. 根据文件时间戳进行搜索

8.1 UNIX/Linux文件系统每个文件都有三种时间戳:

访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

8.2 stat 命令查看:

  stat /etc/passwd
File: ‘/etc/passwd’
Size: 950 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d    Inode: 33818061 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2021-01-06 09:17:36.122732027 +0800
Modify: 2021-01-06 09:17:36.114732083 +0800
Change: 2021-01-06 09:17:36.115732076 +0800
Birth: -

8.3 搜索最近七天内被访问过的所有文件

  find /etc/ -type f -atime -7
/etc/fstab
/etc/crypttab
/etc/resolv.conf
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
/etc/pki/ca-trust/ca-legacy.conf
/etc/pki/ca-trust/extracted/java/cacerts
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem

8.4 搜索超过七天内(7天外)被访问过的所有文件

  find /etc -type f -atime +7
/etc/sasl2/smtpd.conf
/etc/ethertypes
/etc/makedumpfile.conf.sample
/etc/postfix/access
/etc/postfix/canonical
/etc/postfix/generic
/etc/postfix/header_checks
/etc/postfix/relocated
/etc/postfix/transport
/etc/postfix/virtual

9. 根据文件大小进行匹配

用法

find . -type f -size 文件大小单元
文件大小单元:

b —— 块(512字节)
c —— 字节
w —— 字(2字节)
k —— 千字节
M —— 兆字节
G —— 吉字节

9.1 搜索大于10KB的文件

  find /etc/ -type f -size +10k
/etc/ssh/moduli
/etc/postfix/access
/etc/postfix/canonical
/etc/postfix/header_checks
/etc/postfix/main.cf
/etc/postfix/transport
/etc/postfix/virtual

9.2 搜索小于10KB的文件

  find /etc/ -type f -size -10k
  
/etc/man_db.conf
/etc/sudo-ldap.conf
/etc/sudo.conf
/etc/sudoers
/etc/e2fsck.conf
/etc/mke2fs.conf
/etc/vconsole.conf
/etc/locale.conf

9.3 搜索等于10KB的文件

  find /etc/ -type f -size 10k
  
/etc/dbus-1/system.d/org.freedesktop.systemd1.conf
/etc/dbus-1/system.d/org.freedesktop.NetworkManager.conf
/etc/selinux/targeted/active/modules/100/accountsd/hll
/etc/selinux/targeted/active/modules/100/acct/hll
/etc/selinux/targeted/active/modules/100/aiccu/hll
/etc/selinux/targeted/active/modules/100/alsa/hll
/etc/selinux/targeted/active/modules/100/arpwatch/hll

9.4 搜索大于10G的日志文件,并删除

 find /var/log -type f -name "*.log" -size +10G -delete

10.根据文件权限/所有权进行匹配

10.1 按权限搜索

-perm 权限模式
查找文件权限等于"权限模式"的文件
-perm -权限模式
查找文件权限全部包含"权限模式"的文件
-perm /权限模式
查找文件权限包含"权限模式"的任意一个权限的文件

10.2 按所有者和所属组搜索

-uid 用户id
按用户ID查找所有者是指定ID的文件
-gid 组id
按用户组ID查找所属组是指定ID的文件
-user 用户名
按用户名查找所有者是指定用户的文件
-group 组名
按照组名查找所属组是指定用户组的文件

-nouser常用于查找

  1. 垃圾文件
  2. 由windows复制来的文件
  3. 手工源码包安装的文件,可能没有所有者

找出指定目录下权限不是644的txt文件

  find / -type f -name "*.txt" ! -perm 644
/usr/lib/firmware/ivtv-firmware-license-end-user.txt
/usr/lib/firmware/ivtv-firmware-license-oemihvisv.txt
/usr/share/licenses/shadow-utils-4.6/gpl-2.0.txt
/usr/share/licenses/shadow-utils-4.6/shadow-bsd.txt

找出/home目录用户frank拥有的所有文件

  find /home/ -type f -user frank
/home/frank/.bash_logout
/home/frank/.bash_profile
/home/frank/.bashrc

找出/home目录用户组frank拥有的所有文件

  find /home/ -type f -group frank
/home/frank/.bash_logout
/home/frank/.bash_profile
/home/frank/.bashrc

11. 借助-exec选项与其他命令结合使用

找出/tmp目录下所有root的文件,并把所有权更改为用户frank

find /tmp/ -type f -user root -exec chown frank {} \;
使用占位符{}来表示find到的文件名

找出家目录下所有的.sh文件并删除

[root@localhost home]# find $HOME -name "*.sh" -ok rm {} \;find #HOME -name "*.sh" -exec rm {} \;
< rm ... /root/install_lnmp.sh > ? y
-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。

查找/home目录下所有.txt文件并把他们拼接到all.txt文件中

find /home/ -type f -name "*.txt" -exec cat {} \;>all.txt

查找/home目录下所有.txt文件并把他们复制到/opt/backup文件中

find /home/ -type f -name "*.txt" -exec cp {} /opt/backup/ \;

在/var/log目录中查找更改时间在5日以前的文件并删除它们:

find /var/log -type f -mtime +5 -exec rm {} \;find /var/log -type f -mtime +5 |xargs rm -rf

Linux grep 命令

Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

语法

grep [options] pattern [files]grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

pattern - 表示要查找的字符串或正则表达式。
files - 表示要查找的文件名,可以同时查找多个文件,如果省略 files 参数,则默认从标准输入中读取数据。
常用选项::

-i:忽略大小写进行匹配。
-v:反向查找,只打印不匹配的行。
-n:显示匹配行的行号。
-r:递归查找子目录中的文件。
-l:只打印匹配的文件名。
-c:只打印匹配的行数。

实例

1、在文件 file.txt 中查找字符串 “hello”,并打印匹配的行:

grep hello file.txt

2、在文件夹 dir 中递归查找所有文件中匹配正则表达式 “pattern” 的行,并打印匹配行所在的文件名和行号:

grep -r -n pattern dir/

3、在标准输入中查找字符串 “world”,并只打印匹配的行数:

echo "hello world" | grep -c world

4、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:

grep test *file 

结果如下所示:

$ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件  
testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  
testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  
testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 

5、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:

grep -r update /etc/acpi 

输出结果如下:

$ grep -r update /etc/acpi #以递归的方式查找“etc/acpi”  
#下包含“update”的文件  
/etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.)  
Rather than  
/etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of  
IO.) Rather than  
/etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update 

6、反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。

查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:

grep -v test *test*
  • 42
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值