零.今日课程内容目录
Linux文件属性
ls -lhi 每一列含义
文件类型
inode和block
软硬链接
用户
权限
文件属性相关命令
which find whereis tar date
特殊符号与正则表达式
特殊符号
单引号 双引号 不加引号区别
管道
正则
一. 文件属性简介
老男孩教育-Linux文件属性-ls -lhi-v2-2019年4月8日.jpg二.inode和block
1.含义
inode
inode index node 索引节点
inode号码相当于是我们每个人的身份证号码
inode空间存放文件的属性信息(权限 所有者 大小 修改时间 硬链接数 文件类型)
block的位置
没有存放文件名
block
block 数据块 存放数据(文件内容)
2.关系
老男孩教育-查看文件内容过程 cat oldboy.txt (inode和block).jpg查看一个文件oldboy.txt 背后与inode 和block 关系?
类型 | inode | block |
---|---|---|
文件 | 文件属性信息 | 文件内容 |
目录 | 目录属性信息 | 目录下面文件名字(文件名和inode对应关系) |
3.特点
inode
在同一个磁盘分区中是唯一的。
每创建一个非空的文件就要占用inode 和至少1个block
block
存放数据(文件内容)
block 4k(磁盘分区大于500MB)
创建大文件10G,占用多个block
创建小文件1k, 剩余的空间将无法给别人使用。
4.查看
inode 和block数量是在创建磁盘分区(格式化)
查看 block 查看磁盘空间一共有多少还剩多少
[root@oldboyedu60-lnb ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 99G 1.6G 98G 2% /
devtmpfs 981M 0 981M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.6M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 197M 102M 95M 52% /boot
tmpfs 199M 0 199M 0% /run/user/0
查看inode总数
df -i
软硬链接区别
- 如何创建:
a) 默认不带参数情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软链接。
- 含义:
a) 硬链接:在同一分区中inode节点号相同文件,
b) 软链接:相当于windows下面的快捷方式,存放源文件的位置(inode节点号与源文件不同)
- 特点:
a) 不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到
b) 软链接可以跨文件系统,硬链接不可以跨文件系统。
老男孩教育-软硬链接区别-v2019.jpg
- 怎么没的(源文件,软链接,硬链接与删除)
a) 删除软链接文件,对源文件及硬链接文件无任何影响;
b) 删除文件的硬链接文件,对源文件及软链接文件无任何影响;
c) 删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状);
d) 同时删除源文件及其硬链接文件,整个文件才会被"真正"的删除。
文件属性命令
which
find
[root@oldboyedu60-lnb oldboy]# find /oldboy/ -type f -name "oldboy.txt"
/oldboy/oldboy.txt
找出以.txt结尾的文件
find /oldboy/ -type f -name "*.txt"
-inum 和-samefile 了解即可
-inum找出与指定inode号码一样的文件
-samefile 找出与给定文件inode号码相同的文件
[root@oldboyedu60-lnb oldboy]# ll -i oldboy.txt
202049772 -rw-r--r--. 2 root root 136 Apr 13 11:43 oldboy.txt
[root@oldboyedu60-lnb oldboy]# find /oldboy/ -inum 202049772
/oldboy/oldboy.txt.hard
/oldboy/oldboy.txt
[root@oldboyedu60-lnb oldboy]# find /oldboy/ -samefile /oldboy/oldboy.txt
/oldboy/oldboy.txt.hard
/oldboy/oldboy.txt
tar
windows :winrar 压缩
Linux: tar 打包压缩
创建压缩包
tar zcf /tmp/etc.tar.gz /etc/
z 通过gzip软件进行压缩 .tar.gz tar打包 gzip 压缩
c create 创建包
v verbose 显示过程
f 指定压缩包
查看
t list 显示压缩包内容
tar tf /tmp/etc.tar.gz
解压
x extract 解压
tar xf /tmp/etc.tar.gz
解压到指定目录
tar xf /tmp/etc.tar.gz -C /opt
【巨坑】tar让你迷茫的提示: Removing leading `/' from member names
【巨坑】tar让你迷茫的提示: Removing leading `/' from member names
解压压缩包中指定的文件或目录
tar zcf /tmp/etc.tar.gz /etc
[root@oldboyedu60-lnb opt]# ll
total 0
[root@oldboyedu60-lnb opt]# pwd
/opt
[root@oldboyedu60-lnb opt]# tar xf /tmp/etc.tar.gz etc/hosts etc/fstab etc/sysconfig/
[root@oldboyedu60-lnb opt]# tree
.
└── etc
├── fstab
├── hosts
└── sysconfig
├── anaconda
├── authconfig
├── cbq
│ ├── avpkt
│ └── cbq-0000.example
├── console
├── cpupower
├── crond
├── ebtables-config
├── firewalld
├── grub -> /etc/default/grub
├── init
├── ip6tables-config
├── iptables-config
├── irqbalance
├── kdump
├── kernel
├── man-db
├── modules
├── netconsole
├── network
├── network-scripts
│ ├── ifcfg-eth0
│ ├── ifcfg-lo
│ ├── ifdown -> ../../../usr/sbin/ifdown
│ ├── ifdown-bnep
│ ├── ifdown-eth
│ ├── ifdown-ippp
│ ├── ifdown-ipv6
│ ├── ifdown-isdn -> ifdown-ippp
│ ├── ifdown-post
│ ├── ifdown-ppp
│ ├── ifdown-routes
│ ├── ifdown-sit
│ ├── ifdown-Team
│ ├── ifdown-TeamPort
│ ├── ifdown-tunnel
│ ├── ifup -> ../../../usr/sbin/ifup
│ ├── ifup-aliases
│ ├── ifup-bnep
│ ├── ifup-eth
│ ├── ifup-ippp
│ ├── ifup-ipv6
│ ├── ifup-isdn -> ifup-ippp
│ ├── ifup-plip
│ ├── ifup-plusb
│ ├── ifup-post
│ ├── ifup-ppp
│ ├── ifup-routes
│ ├── ifup-sit
│ ├── ifup-Team
│ ├── ifup-TeamPort
│ ├── ifup-tunnel
│ ├── ifup-wireless
│ ├── init.ipv6-global
│ ├── network-functions
│ └── network-functions-ipv6
├── rdisc
├── readonly-root
├── rsyncd
├── rsyslog
├── run-parts
├── selinux -> ../selinux/config
├── sshd
├── svnserve
├── trace-cmd.conf
└── wpa_supplicant
6 directories, 65 files
【必会】vim必知必会的快捷键
https://www.jianshu.com/p/41a44acafad0
date
[root@oldboyedu60-lnb opt]# date +%F
2019-04-13
[root@oldboyedu60-lnb opt]# date +%Y-%m-%d
2019-04-13
[root@oldboyedu60-lnb opt]# date +%T
12:42:11
[root@oldboyedu60-lnb opt]# date +%H:%M:%S
12:42:25
[root@oldboyedu60-lnb opt]# date +%w
6
[root@oldboyedu60-lnb opt]# #显示当前的时间按照 年-月-日_小时-周几
[root@oldboyedu60-lnb opt]# #2019-04-13_12-6
查找根下所有以.txt 结尾、最近一天修改过、大于 1M 的文件
find / -type f -name "*.txt" -mtime -1 -size +1M
[root@oldboyedu60-lnb opt]# date -s "20111111 11:11:11"
Fri Nov 11 11:11:11 CST 2011
[root@oldboyedu60-lnb opt]# ntpdate ntp1.aliyun.com
13 Apr 14:56:08 ntpdate[2993]: step time server 120.25.115.20 offset 234157412.981742 sec
[root@oldboyedu60-lnb opt]# date
Sat Apr 13 14:56:35 CST 2019
给rm命令加一个别名,让每次删除都强制提醒command not found,给出配置过程(要求配置后永久生效)
别名:
给命令起了1个昵称(小明)
作用:
1.防止执行危险命令
2.方便 省事
rm == rm -i
cp == cp -i
mv == mv -i
配置别名:
第1个里程碑-查看别名
[root@oldboyedu60-lnb opt]# 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'
[root@oldboyedu60-lnb opt]# alias mv
alias mv='mv -i'
第2个里程碑-配置别名 运行rm的时候屏幕显示command bny 临时
设置别名格式
alias mv='mv -i'
alias 昵称='命令'
[root@oldboyedu60-lnb opt]# alias rm='echo command bny'
[root@oldboyedu60-lnb opt]# rm /oldboy/oldboy.txt -fr
command bny /oldboy/oldboy.txt -fr
第3个里程碑-修改配置文件 /etc/profile 永久生效
[root@oldboyedu60-lnb ~]# tail -1 /etc/profile
alias rm='echo command bny'
[root@oldboyedu60-lnb ~]# source /etc/profile
第4个里程碑-排坑
cp mv rm
[root@oldboyedu60-lnb ~]# cat ~/.bashrc
# .bashrc
# User specific aliases and functions
#alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
小结
1.命令行进行配置 临时
alias rm='echo oldboyxxx '
2.修改配置文件 永久
3.检查 生效
4.临时取消别名 \rm 或 /bin/rm 使用绝对路径
用户
UID GID
用户分类
分类 | UID范围 | 说明 |
---|---|---|
root | 0 | 皇帝 |
虚拟用户/傀儡用户 | 1-999(C7) 1-499(C6) | 满足每个进程要有一个用户和用户组 无法登陆系统 |
普通用户 | 1000以上(C7) 500(C6) | 贫民 百姓 |
添加用户
[root@oldboyedu60-lnb ~]# useradd oldboy
查询用户信息
[root@oldboyedu60-lnb ~]# id oldboy
uid=1000(oldboy) gid=1000(oldboy) groups=1000(oldboy)
设置密码
[root@oldboyedu60-lnb ~]# passwd oldboy
Changing password for user oldboy.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
切换
[root@oldboyedu60-lnb ~]# su - oldboy
[oldboy@oldboyedu60-lnb ~]$ whoami
oldboy
[su]老男孩教育-用户切换命令图解.png
用户相关文件
- /etc/passwd 存放用户信息
- /etc/group 用户组信息
- /etc/shadow 密码信息
- /etc/gshadow 用户组密码
用户
UID GID
用户分类
用户相关文件
用户与某一个文件的关系
权限
rwx
r
read 是否可读
w
write 是否可写
x
execute 是否可以运行
执行
命令
脚本
计算
-rwxr-xr-x. 1 root root 117672 Apr 11 2018 /bin/ls
421401401
7 5 5
644 rw-r--r--
750 rwxr-x---
400 r--------
修改权限
chmod change mode 修改权限
方式1:数字
方式2:字母
用户与某一个文件的关系
oldboy.txt
主人 所有者 user u
家人 所属用户组 group g
陌生人 其他人 other o
[root@oldboyedu60-lnb oldboy]# chmod ugo+x oldboy.txt
[root@oldboyedu60-lnb oldboy]# ll oldboy.txt
-rwxr-xr-x. 2 root root 136 Apr 13 11:43 oldboy.txt
[root@oldboyedu60-lnb oldboy]# chmod a-x oldboy.txt
[root@oldboyedu60-lnb oldboy]# ll oldboy.txt
-rw-r--r--. 2 root root 136 Apr 13 11:43 oldboy.txt
[root@oldboyedu60-lnb oldboy]# chmod +x oldboy.txt
[root@oldboyedu60-lnb oldboy]# ll oldboy.txt
-rwxr-xr-x. 2 root root 136 Apr 13 11:43 oldboy.txt
[root@oldboyedu60-lnb oldboy]# chmod +x /etc/rc.d/rc.local
[root@oldboyedu60-lnb oldboy]# ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 473 Apr 11 2018 /etc/rc.d/rc.local
chmod -R 递归修改权限
特殊符号
单引号 双引号 不加引号区别 反引号
'' 单引号所见即所得
"" 双引号和单引号类似 里面的特殊符号会被解析(运行) $ ``
不加引号 和双引号类似,但是可以使用{}
[root@oldboyedu60-lnb oldboy]# echo '$UID $HOSTNAME {1..5}'
$UID $HOSTNAME {1..5}
[root@oldboyedu60-lnb oldboy]# echo "$UID $HOSTNAME {1..5}"
0 oldboyedu60-lnb {1..5}
[root@oldboyedu60-lnb oldboy]# echo $UID $HOSTNAME {1..5}
0 oldboyedu60-lnb 1 2 3 4 5
反引号 `` == $() 优先执行命令
[root@oldboyedu60-lnb oldboy]# which mkdir
/usr/bin/mkdir
[root@oldboyedu60-lnb oldboy]# ls -l /usr/bin/mkdir
-rwxr-xr-x. 1 root root 79760 Apr 11 2018 /usr/bin/mkdir
[root@oldboyedu60-lnb oldboy]# ls -l which mkdir
ls: cannot access which: No such file or directory
ls: cannot access mkdir: No such file or directory
[root@oldboyedu60-lnb oldboy]# ls -l $(which mkdir )
-rwxr-xr-x. 1 root root 79760 Apr 11 2018 /usr/bin/mkdir
[root@oldboyedu60-lnb oldboy]# ls -l $(which ls )
管道 |
命令1 | 命令2
把命令1结果 通过管道传递给 命令2使用
[root@oldboyedu60-lnb ~]# rpm -qa |grep tree
tree-1.6.0-10.el7.x86_64
[root@oldboyedu60-lnb ~]# rpm -qa |grep ssh
libssh2-1.4.3-10.el7_2.1.x86_64
openssh-clients-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
openssh-7.4p1-16.el7.x86_64
find 命令与管道配合
找出/oldboy下面以.txt结尾的文件 并删除(ls -l )
第1个里程碑-找出想要的文件
[root@oldboyedu60-lnb oldboy]# find /oldboy/ -type f -name "*.txt"
/oldboy/oldboy02.txt
/oldboy/oldboy03.txt
/oldboy/oldboy04.txt
/oldboy/oldboy05.txt
/oldboy/oldboy06.txt
/oldboy/oldboy07.txt
/oldboy/oldboy08.txt
/oldboy/oldboy09.txt
/oldboy/oldboy10.txt
第2个里程碑- xargs处理
[root@oldboyedu60-lnb ~]# find /oldboy/ -type f -name "*.txt"|ls -l
total 12
-rw-------. 1 root root 1503 Mar 23 14:58 anaconda-ks.cfg
-rw-r--r--. 1 root root 7 Apr 13 11:13 lidao.txt
-rw-r--r--. 1 root root 21 Mar 30 17:47 oldboy.txt
[root@oldboyedu60-lnb ~]# find /oldboy/ -type f -name "*.txt"|xargs ls -l
-rw-r--r--. 1 root root 0 Mar 30 10:04 /oldboy/oldboy02.txt
-rw-r--r--. 1 root root 0 Mar 30 10:04 /oldboy/oldboy03.txt
-rw-r--r--. 1 root root 0 Mar 30 10:04 /oldboy/oldboy04.txt
-rw-r--r--. 1 root root 0 Mar 30 10:04 /oldboy/oldboy05.txt
-rw-r--r--. 1 root root 0 Mar 30 10:04 /oldboy/oldboy06.txt
-rw-r--r--. 1 root root 0 Mar 30 10:04 /oldboy/oldboy07.txt
-rw-r--r--. 1 root root 0 Mar 30 10:04 /oldboy/oldboy08.txt
-rw-r--r--. 1 root root 0 Mar 30 10:04 /oldboy/oldboy09.txt
-rw-r--r--. 1 root root 0 Mar 30 10:04 /oldboy/oldboy10.txt
find +|xargs 管道前面的文字符号通过|xargs 处理变成参数(文件名)
find习题多方法
方法1
find /oldboy/ -type f -name "*.txt"|xargs ls -l
方法2
ls -l $(find /oldboy/ -type f -name "*.txt")
ls -l find /oldboy/ -type f -name "*.txt"
方法3 熟悉
find /oldboy/ -type f -name "*.txt" -exec ls -l {} ;
例题:找出/etc/下面以.conf结尾的文件打包备份到 /tmp下面 /tmp/conf.tar.gz
find /oldboy/ -type f -name “*.txt” |xargs ls -l
'' "" . ()
‘’ ”“ 。()
方法1:
[root@oldboyedu60-lnb ~]# find /etc/ -type f -name "*.conf" |xargs tar zcf /tmp/conf-xargs.tar.gz
tar: Removing leading `/' from member names
[root@oldboyedu60-lnb ~]# tar tf /tmp/conf-xargs.tar.gz
方法2
[root@oldboyedu60-lnb ~]# tar zcf /tmp/conf-dao.tar.gz $( find /etc/ -type f -name "*.conf")
tar: Removing leading `/' from member names
[root@oldboyedu60-lnb ~]# tar tf /tmp/conf-dao.tar.gz
方法3:
无法使用 压缩包会只保留最后一次的文件
find /etc/ -type f -name "*.conf" -exec tar zcf /tmp/conf-exec.tar.gz {} ;
find /etc/ -type f -name "*.conf" -exec tar zcf /tmp/conf-exec.tar.gz {} +
管道小结:
基础用法
把前一个命令结果传递后面的命令
rpm -qa |grep tree
其他用法
find与|xargs 管道前面的文字符号通过|xargs 处理变成参数(文件名)
找出所要的文件然后删除/显示详细信息/替换
找出所要的文件然后压缩
通配符:方便我们查找文件
*.txt 以.txt结尾的文件
- 所有
{} 生成序列
[root@oldboyedu60-lnb ~]# echo {a..z} {0..9}
a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9
[root@oldboyedu60-lnb ~]# echo oldboy{01..9}
oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06 oldboy07 oldboy08 oldboy09
[root@oldboyedu60-lnb ~]# touch oldboy.txt
[root@oldboyedu60-lnb ~]# cp oldboy.txt{,.bak}
[root@oldboyedu60-lnb ~]# echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak
[root@oldboyedu60-lnb ~]# echo A{,C}
A AC
[root@oldboyedu60-lnb ~]# echo A{B,C}
AB AC
()
[]
{}
? 任意1个字符
[]
[^]
通配符VS正则
名称 | 作用 | 支持的命令 |
---|---|---|
通配符 | 方便我们查找文件 | 大部分的命令都可以使用 |
正则 | 方便我们进行过滤 | 三剑客 Python Go |
cat oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
^
[root@oldboyedu60-lnb oldboy]# grep '^m' oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq is 49000448
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu60-lnb oldboy]# ls -l / |grep '^d'
drwxr-xr-x. 3 root root 37 Mar 23 17:07 alex
dr-xr-xr-x. 5 root root 4096 Mar 23 14:58 boot
drwxr-xr-x. 19 root root 3180 Mar 30 16:34 dev
drwxr-xr-x. 80 root root 8192 Apr 13 15:33 etc
drwxr-xr-x. 3 root root 20 Apr 13 15:32 home
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 250 Apr 13 17:58 oldboy
drwxr-xr-x. 3 root root 17 Apr 13 14:45 opt
dr-xr-xr-x. 128 root root 0 Mar 30 16:34 proc
dr-xr-x---. 2 root root 224 Apr 13 17:58 root
drwxr-xr-x. 23 root root 620 Apr 13 14:52 run
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
dr-xr-xr-x. 13 root root 0 Mar 30 16:34 sys
drwxrwxrwt. 8 root root 267 Apr 13 17:57 tmp
drwxr-xr-x. 13 root root 155 Mar 23 14:50 usr
drwxr-xr-x. 19 root root 267 Mar 23 15:08 var
[root@oldboyedu60-lnb oldboy]# grep -n '^$' oldboy.txt
3:
8:
[root@oldboyedu60-lnb oldboy]# grep -v '^$' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
下次:
正则
sed替换
awk取列
权限 13章
用户 14章
网友评论