专栏首页python3linux命令基础(3)

linux命令基础(3)

  • find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。 find的使用格式如下: find <指定目录> <指定条件> <指定动作> - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。 - <指定条件>: 所要搜索的文件的特征。 - <指定动作>: 对搜索结果进行特定的处理。 [root@localhost /]# find . -name 'bin*'  查找当前目录下以bin开头的所有文件 ./etc/binfmt.d ./etc/selinux/targeted/modules/active/modules/bind.pp [root@localhost /]# find . -name 'bin*' -ls  查找当前目录下以bin开头的所有文件,并列出文件信息 您还可以在搜索字符串中指定多个起始目录。如果以具有相应权限的用户身份运行,以下命令将下到 /usr、/home /tmp 目录查找所有 jar 文件: find /usr /home  /tmp -name "*.jar" [root@localhost /]# find . -type d    -type制定要搜索文件的类型 其他 find 可以找到的文件类型包括: b — 块(缓存)特殊 c — 字符(未缓存)特殊 p — 命名管道 (FIFO) s — 套接字 查找时间 find 命令有几个用于根据您系统的时间戳搜索文件的选项。这些时间戳包括 mtime — 文件内容上次修改时间 atime — 文件被读取或访问的时间 ctime — 文件状态变化时间 mtime 和 atime 的含义都是很容易理解的,而 ctime 则需要更多的解释。由于 inode 维护着每个文件上的元数据,因此,如果与文件有关的元数据发生变化,则 inode 数据也将变化。这可能是由一系列操作引起的,包括创建到文件的符号链接、更改文件权限或移动了文件等。由于在这些情况下,文件内容不会被读取或修改,因此 mtime 和 atime 不会改变,但ctime 将发生变化。 这些时间选项都需要与一个值 n 结合使用,指定为 -n、n 或 +n。 -n 返回项小于 n +n 返回项大于 n n 返回项正好与 n 相等 [root@localhost /]# find /etc  -mtime -1  //查看一个小时内/etc目录下被修改的文件 /etc /etc/resolv.conf /etc/tuned/active_profile /etc/sysconfig /etc/sysconfig/network-scripts 按大小查找文件 -size 选项查找满足指定的大小条件的文件。 [root@localhost /]# find /etc  -size  -1k  //查看/etc目录下大小小于1k的文件 /etc/crypttab /etc/motd /etc/cron.deny /etc/.pwd.lock /etc/environment /etc/sysconfig/run-parts /etc/selinux/targeted/modules/semanage.read.LOCK /etc/selinux/targeted/modules/active/netfilter_contexts /etc/selinux/targeted/modules/semanage.trans.LOCK /etc/selinux/targeted/contexts/files/file_contexts.local /etc/selinux/targeted/contexts/files/file_contexts.subs /etc/security/opasswd /etc/exports [root@localhost /]# find /etc  -empty  //-empty  空文件 /etc/terminfo /etc/systemd/user /etc/gnupg /etc/crypttab /etc/opt /etc/motd /etc/gcrypt /etc/ppp/peers /etc/chkconfig.d /etc/rwtab.d /etc/groff/site-font /etc/firewalld/services /etc/firewalld/icmptypes 按权限和所有者查找 find . -type f  -perm a=rwx -exec ls -l {} \; [root@localhost /]# find /etc    -perm 777 -exec ls -l {} \;  //-perm 按权限查看 lrwxrwxrwx. 1 root root 38 Aug 31 03:07 /etc/systemd/system/getty.target.wants/getty@tty1.service -> /usr/lib/systemd/system/getty@.service lrwxrwxrwx. 1 root root 41 Aug 31 03:08 /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service -> /usr/lib/systemd/system/firewalld.service lrwxrwxrwx. 1 root root 46 Aug 31 03:08 /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service [root@localhost /]# find  /etc/ -perm u=rwx -exec ls -l {} \; //根据属主的权限来查看文件 -rwx------. 1 root root 180 Jul 31  2013 /etc/cron.daily/logrotate total 0 total 0 total 68 -rwxr-xr-x. 1 root root  8702 Mar 26 16:27 00_header -rwxr-xr-x. 1 root root   992 Oct 17  2014 00_tuned -rwxr-xr-x. 1 root root 10114 Mar 26 16:27 10_linux -rwxr-xr-x. 1 root root 10275 Mar 26 16:27 20_linux_xen -rwxr-xr-x. 1 root root  2559 Mar 26 16:27 20_ppc_terminfo -rwxr-xr-x. 1 root root 11169 Mar 26 16:27 30_os-prober -rwxr-xr-x. 1 root root   214 Mar 26 16:27 40_custom -rwxr-xr-x. 1 root root   216 Mar 26 16:27 41_custom -rw-r--r--. 1 root root   483 Mar 26 16:27 README [root@localhost /]# find  /etc/ -perm u=rwx -exec ls -l {} \; 2>/dev/null //添加错误重定向 控制 find 与 Linux 中的许多命令不同,find 不需要 -r 或 -R 选项即可下到子目录中。它默认情况下就这样操作。但是,有时您可能希望限制这一行为。因此,选项 -depth、-maxdepth 和 -mindepth 以及操作 -prune 就派上用场了. -maxdepth 和 -mindepth 选项允许您指定您希望 find 搜索深入到目录树的哪一级别.通过运行以下命令在目录树的前三个级别中查找日志文件,您可以看到 -maxdepth 的效果。使用该选项较之不使用该选项所生成的输出要少得多。 [root@localhost /]# find / -maxdepth 3  -name '*.log' /tmp/yum.log /var/log/boot.log /var/log/yum.log
  • vim -->vi improved vim [options] [file]... 模式切换 默认为编辑模式 编辑模式-->输入模式 i:当前光标所在处 I:在当前光标所在行行首 a: 光标所在字符后方 A:在当前光标所在行的行尾 o:在当前所在行的下方新建 O:在当前所在行的上方新建 末行模式: :q!  强制退出 :wq  保存退出 :x  保存退出 :wq! 强制保存退出 :ZZ  保存退出 编辑模式: cc  删除光标所在行,并进入插入模式                  C   删除光标后面的字符 可视化模式 v:选择光标所在行的左侧的内容 V:光标所在行整行都会选定 编辑模式的翻屏命令 Ctrl+f:向文件尾部翻一屏 Ctrl+b:向文件首部翻一屏 文本查找 /word ?word 地址定界  startline ,endline   #:第n行  .:当前行  $:最后一行 %:全文 相对定界: +#:从指定位置向下n行 -#:从指定位置向上n行 文本替换操作 s/要查找内容/要替换的内容/修饰符 /:分隔符  如#,@ g:全局替换 i:不区分大小写 要查找的内容:可以使用正则表达式 要替换的内容:不可以使用正则表达式 界面显示特性     语法高亮开启和关闭:     :syntax on/off     搜索高亮的开启和关闭:     :set hlsearch     : set nohlsearch     自动缩进     :set autoindent     : set noautoindent vim 全局配置文件 /etc/vimrc
  • bash环境配置: 配置文件,生效范围划分,存在两类: 全局配置: /etc/profile, /etc/profile.d/*.sh /etc/bashrc 个人配置: ~/.bash_profile ~/.bashrc
  • 按功能划分,存在两类: profile类:为交互式登录的shell提供配置 /etc/profile, /etc/profile.d/*.sh ~/.bash_profile
  •    功用:     (1) 定义环境变量,例如PATH、PS1     (2) 运行命令或脚本
  •   bashrc类:为非交互式登录shell提供配置    /etc/bashrc    ~/.bashrc
  •    功用:     (1) 定义命令别名;     (2) 定义本地变量;
  •  变量:内存空间,变量名   类型:    环境变量:作用范围当前shell进程及其子进程    本地变量:作用范围当前shell进程    局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)
  •    位置变量:$1, $2    特殊变量:$?
  •   变量定义方式:    bash内置变量:可直接调用,内置了许多环境变量,例如PATH等    自定义变量:     变量赋值:变量名=值
  •   bash弱类型:    变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;
  •     120:24bits     120: 8bits
  •  定义本地变量:   name=value
  •   查看:set
  •  定义环境变量:   export name=value   declare -x name=value
  •   查看:env, printenv, export
  •  撤消变量:   unset name
  •  引用变量:   ${name}, $name
  •  bash中的引用符号:   '': 强引用,变量替换不会发生   "":弱引用   ``: 命令引用
  •  shell登录类型:   交互式登录:    直接通过终端进行的登录;    通过su -l Username命令实现的用户切换;
  •   非交互式登录:    图形界面下打开的命令行窗口;    执行脚本;    su Username;
  •  配置文件作用次序:   交互式登录:    /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
  •   非交互式登录:    ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
  •  编辑配置文件定义的新配置如何生效?   (1) 重新登录;   (2) 让当前shell进程去重新读取指定的配置文件;    source /PATH/TO/SOMEFILE    . /PATH/TO/SOMEFILE
  • Linux文件系统上的特殊权限  权限模型:   u, g, o    r, w, x
  •  进程的安全上下文:   前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组;   (1) 用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限;   (2) 程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组;   (3) 进程拥的访问权限,取决其属主的访问权限:    (a) 进程的属主,同文件属主,则应用文件属主权限;    (b) 进程的属主,属于文件的属组,则应用文件属组权限;    (c) 则应用其它权限;
  •  SUID:   (1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否有执行权限;   (2) 启动为进程之后,其属主不是发起者,而程序文件自己的属主;这种机制即为SUID;
  •   权限设定:    chmod u+s FILE...    chmod u-s FILE...
  •   注意:    s: 属主原本拥有x权限;    S: 属主原本无x权限;
  •  SGID:   默认情况下,用户创建文件时,其属级为此用户所属的基本组;   一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组为目录的属组,而非用户的基本组;
  •   权限设定:    chmod g+s FILE...    chmod g-s FILE...
  •  Sticky:   对于一个多人可写的目录,此权限用于限制每个仅能删除自己的文件;
  •   权限设定    chmod o+t FILE...    chmod o-t FILE...
  •  SUID, SGID, STICKY   000   001   010   011   100   101   110   111
  • Linux磁盘管理  硬盘:   机械式硬盘   SSD
  •  机械式:   track   sector: 512bytes   cylinder: 分区的基本单位;
  •   MBR:Master Boot Record    512bytes     446: bootloader     64: filesystem allocation table      16: 标识一个分区     2:55AA
  •  磁盘接口类型:   IDE (ATA):133MB/s,/dev/hd   SCSI: 640MB/s   SATA:6Gbps   SAS:6Gbps   USB:480MB/s
  •   识别硬盘设备:/dev/sd    标记不同的硬盘设备:/dev/sd[a-z]    标记同一设备上的不同分区:/dev/sd[a-z][1-]     1-4: 主或扩展分区标识     5+:逻辑分区标识
  •   设备文件:特殊文件    设备号:     major, minor      major: 设备类型      minor: 同一类型下的不同设备
  •    “块”:block,随机设备    “字符”:character,线性设备
  •    GPT
  •  分区:分隔存储空间为多个小的空间,每个空间可独立使用文件系统;
  •  分区工具:   fdisk, parted, sfdisk
  •  fdisk工具的使用:   最多支持在一块硬盘上的15个分区;
  •   分区管理子命令:    p: 显示    n: 创建    d: 删除    t: 修改分区ID    l: 列出所有支持ID类型    w: 保存退出    q: 放弃修改并退出    m: 获取帮助
  •   创建完成之后,查看内核是否已经识别新的分区:    # cat /proc/partitions
  •    有三个命令可以让内核重读磁盘分区表:     CentOS 5: partprobe [DEVICE]     CentOS 6,7:      partx      kpartx
  •     partx命令:      partx DEVICE      partx -a DEVICE      partx -a -n M:N DEVICE       M       M:       :N
  •     kpartx命令:      kpartx -af DEVICE
  • Linux文件系统管理
  •  文件系统:   VFS:Virtual File System
  •   Linux:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap   光盘:iso9660   Windows: fat32(vfat), ntfs   Unix: ffs, ufs, jfs, jfs2   网络文件系统:nfs, cifs   集群文件系统:ocfs2, gfs2   分布式文件系统:ceph,    moosefs, mogilefs, hdfs, gfs, glusterfs
  •   (1) 日志型文件系统    非日志型文件系统:ext2    日志型文件系统:ext3
  •   (2) swap:交换分区
  •  创建文件系统:   在分区上执行格式化(高级格式化)    要使用某种文件系统,满足两个条件:     内核中:支持此种文件系统     用户空间:有文件系统管理工具
  •   创建工具:mkfs (make filesystem)    mkfs -t type DEVICE
  •     mkfs.type DEVICE
  •    ext系列文件系统的专用管理工具:     mke2fs -t {ext2|ext3|ext4} DEVICE      -b BLOCK: 1024, 2048, 4096      -L 'LABEL': 设定卷标
  •    blkid命令:     blkid DEVICE      LABEL, UUID, TYPE

6、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符; :%s/^[[:space:]]//g

7、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留; :%s/^[[:space:]]/#/g

8、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log; :%s#/etc/sysconfig/init#/var/log#g 9、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#; %s/^#[[:space:]]\{1,\}//g 10、查找/var目录属主为root,且属组为mail的所有文件; find /var -type f -user root -group mail -ls 11、查找/usr目录下不属于root、bin或hadoop的所有文件; find /usr ! (-user root -a -user bin -a -user hadoop) -ls 12、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件; find /etc/  ! (-user root -a -user hadoop)  -mtime -7  -ls 13、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件; find / -nouser -o -nogroup -atime -7  -ls 14、查找/etc目录下大于20k且类型为普通文件的所有文件; find /etc -type f -size +20k -ls 15、查找/etc目录下所有用户都没有写权限的文件; find /etc/ !  -perm /222   -ls 16、查找/etc目录下至少有一类用户没有执行权限的文件; find /etc/ !  -perm -111   -ls 17、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件; find /etc/init.d/ -perm -u+x,-o+w  -ls 18、让普通用户能使用/tmp/cat去查看/etc/shadow文件; chmod u+s /tmp/cat ls -lh /tmp/cat 19、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件; chmod g=xs,o=t /test/data

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 非算法工程师面试必问的算法面试理论 顶

    数据结构是算法的基础。大家需要对数据结构有个清晰的概念,因为大部分的算法题均需要带入数据结构的概念来处理。科班出身的程序员或多或少学习过数据结构。我们推荐大家可...

    个推君
  • Why JavaScript is Must for Web Development?

    JavaScript is the most popular and most widely developed programming language ev...

    用户4822892
  • RS Meet DL(74)-[天猫]MIND:多兴趣向量召回

    本文介绍的论文是:《Multi-Interest Network with Dynamic Routing for Recommendation at Tmal...

    石晓文
  • Java工程师学习指南第6部分:深入理解JVM虚拟机

    本文整理了微信公众号【Java技术江湖】发表和转载过的JVM虚拟机相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧吧。

    Java技术江湖
  • 爬虫 (十) 学习 python 基础知识点的正确姿势 (三)

    我会以比较学习的方式,主要拿Python和我之前学习的javascript进行比较,拿学习javascript的学习经历来迁移到学习Python,如果你在此之前...

    公众号---志学Python
  • Java工程师学习指南第8部分:分布式系统理论与实践

    本文整理了微信公众号【Java技术江湖】发表和转载过的分布式相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧。

    Java技术江湖
  • Java工程师学习指南第7部分:重新学习MySQL与Redis

    本文整理了微信公众号【Java技术江湖】发表和转载过的Mysql和Redis相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧吧。

    Java技术江湖
  • 彻底理解JavaScript作用域

      几乎所有编程语言就是在变量中存储值,并且能读取和修改此值。事实上,在变量中存储值和取出值的能力,给程序赋予了状态。 如果没有这样的概念,一个程序虽然可以执行...

    小周sri的码农
  • 爬虫 (八) 学习 python 基础知识点的正确姿势 (一)

    我会以比较学习的方式,主要拿Python和我之前学习的javascript进行比较,拿学习javascript的学习经历来迁移到学习Python,如果你在此之前...

    公众号---志学Python
  • 用正确方法对度量学习算法进行基准测试

    典型的度量学习论文会提出一个新的损失函数或训练过程,然后在一些数据集上显示结果,如 CUB200、Stanford Cars 和 Stanford Online...

    AI研习社

扫码关注云+社区

领取腾讯云代金券