第三周作业
alias:定义命令别名
alias [-p] [name[=value] ... ]
e.g.
- 定义一个对所有用户都生效的命令别名,例如lftps=‘lftp 172.16.0.1/pub’
[root@node1 ~]# alias lftps='lftp 172.16.0.1/pub'
- 查看系统默认定义的命令别名
[root@node1 ~]# 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@node1 ~]#
unalias:取消命令别名
unalias name
e.g.
[root@node1 ~]# unalias lftps
grep:print lines matching a pattern
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
options
- -E, --extended-regexp:支持扩展正则表达式
- -e PATTERN, --regexp=PATTERN:支持多个PATTERN
- -i, --ignore-case:忽略字符大小写
- -v, --invert-match:匹配不符合条件的行
- -o, --only-matching:仅显示匹配到的字符
- -q, --quiet, --silent:静默模式
e.g.
- 显示/etc/passwd文件中不以/bin/bash结尾的行
[root@node1 ~]# grep -v '/bin/bash$' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tom:x:5001:5001::/tmp/tom:/bin/zsh
- 找出/etc/passwd文件中,包含二位数字或者三位数的行
[root@node1 ~]# grep '\b[0-9]\{2,3\}\b' /etc/passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@node1 ~]#
- 显示/proc/meminfo文件中以大写或小写S开头的行,用三种方式实现
[root@node1 ~]# grep -i '^s' /proc/meminfo
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 8656 kB
Slab: 47736 kB
SReclaimable: 21740 kB
SUnreclaim: 25996 kB
[root@node1 ~]#
[root@node1 ~]# grep '^[sS]' /proc/meminfo
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 8656 kB
Slab: 47736 kB
SReclaimable: 21740 kB
SUnreclaim: 25996 kB
[root@node1 ~]#
[root@node1 ~]# egrep '^(s|S)' /proc/meminfo
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 8656 kB
Slab: 51028 kB
SReclaimable: 24420 kB
SUnreclaim: 26608 kB
[root@node1 ~]#
- 使用echo输出一个绝对路径,使用egrep取出路径名,类似执行dirname /etc/passwd的结果
[root@node1 ~]# echo /etc/sysconfig/network-scripts | grep -o '^/.*[^/]' | grep -o -e '^/.*/'
/etc/sysconfig/
[root@node1 ~]# echo /etc/sysconfig/network-scripts/ | grep -o '^/.*[^/]' | grep -o -e '^/.*/'
/etc/sysconfig/
[root@node1 ~]#
- 找出ifconfig中的ip地址。要求结果只显示IP地址
[root@node1 ~]# ip add | egrep -o '(\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b.){3}.\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b'
192.168.122.6
[root@node1 ~]#
vim:Vi IMproved, a programmers text editor
set tabstop=4 设置tab键的空格数
e.g.
- vim定制自动缩进四个字符
在家目录下创建.vimrc的文本文件,添加如下内容
set tabstop=4
[root@node1 ~]# cat .vimrc
set tabstop=4
[root@node1 ~]#
bash脚本编程
编写脚本,实现自动添加三个用户,并计算这三个用户的UID之和
#!/bin/bash
declare -i idsum=0
read -p "please input username: " -a userName
userAdd() {
if grep "^$1\>" /etc/passwd &> /dev/null; then
echo "user $1 exist";
else
useradd $1;
echo "create user $1";
fi
}
uidSum() {
let idsum+=$1
}
for i in $(seq 0 $[${#userName[*]}-1]); do
userAdd ${userName[$i]}
uidSum $(id -u ${userName[$i]})
done
echo "uidsum=$idsum"
[root@node1 ~]# bash createuser.sh
please input username: test01 test02 test03
create user test01
create user test02
create user test03
uidsum=15012
[root@node1 ~]#
find:search for files in a directory hierarchy
find [查找起始路径] [查找条件] [处理动作]
- 查找起始路径:查找起始路径;默认为当前目录;
- 查找条件:查找条件有文件名、大小、类型、从属关系、权限等;默认为找出指定路径下的所有文件;
- 处理动作:对符合查找条件的文件做出的操作,例如删除等操作;默认为输出至标准输出;
查找条件
根据文件名查找
- -name “pattern”:查找指定pattern的文件,区分大小写
- -iname “pattern”:查找指定pattern的文件,不区分大小写
- 支持glob风格的通配符;
e.g.
- 查找/etc目录下passwd的文件
[root@node1 ~]# find /etc -name passwd /etc/passwd /etc/pam.d/passwd [root@node1 ~]#
- 查找/etc/目录下以p或P开头,以d结尾的的所有文件
[root@node1 ~]# find /etc -iname p*d /etc/yum/pluginconf.d /etc/yum/protected.d /etc/passwd /etc/profile.d /etc/pm/power.d /etc/prelink.conf.d /etc/NetworkManager/dispatcher.d/pre-down.d /etc/NetworkManager/dispatcher.d/pre-up.d /etc/popt.d /etc/audisp/plugins.d /etc/selinux/targeted/active/modules/100/pcscd /etc/selinux/targeted/active/modules/100/pingd /etc/selinux/targeted/active/modules/100/plymouthd /etc/selinux/targeted/active/modules/100/psad /etc/selinux/targeted/active/policy.linked /etc/pam.d /etc/pam.d/passwd /etc/openldap/certs/password /etc/kernel/postinst.d [root@node1 ~]#
根据文件从属关系查找:
- -user USERNAME:查找属主指定用户的所有文件;
-
-group GRPNAME:查找属组指定组的所有文件;
- -uid UID:查找属主指定的UID的所有文件;
-
-gid GID:查找属组指定的GID的所有文件;
- -nouser:查找没有属主的文件;
- -nogroup:查找没有属组的文件;
e.g.
- 查找/目录下没有属主也没有属组的文件
[root@node1 ~]# find / -nouser -nogroup find: ‘/proc/18624/task/18624/fd/6’: No such file or directory find: ‘/proc/18624/task/18624/fdinfo/6’: No such file or directory find: ‘/proc/18624/fd/6’: No such file or directory find: ‘/proc/18624/fdinfo/6’: No such file or directory /home/test /home/test/.bash_logout /home/test/.bash_profile /home/test/.bashrc [root@node1 ~]#
根据文件的类型查找:
- -type TYPE:
f: 普通文件
d: 目录文件
l:符号链接文件
b:块设备文件
c:字符设备文件
p:管道文件
s:套接字文件
e.g.
- 查找/etc/目录为符号链接文件的文件
[root@node1 ~]# find /etc -type l
/etc/mtab
/etc/pki/tls/certs/ca-bundle.crt
/etc/pki/tls/certs/ca-bundle.trust.crt
/etc/pki/tls/cert.pem
/etc/pki/ca-trust/source/ca-bundle.legacy.crt
/etc/pki/java/cacerts
/etc/redhat-release
/etc/system-release
/etc/grub2.cfg
...
根据文件的大小查找:
- -size [+|-]#UNIT
常用单位:k, M, G
#UNIT:(#-1, #]
-#UNIT:[0,#-1]
+#UNIT:(#, oo)
e.g.
- 查找/etc目录下大小为4M的文件
[root@node1 ~]# find /etc/ -size 4M -exec ls -lh {} \;
-rw-r--r--. 1 root root 3.7M Apr 5 12:39 /etc/selinux/targeted/policy/policy.31
-rw-------. 1 root root 3.7M Apr 5 12:39 /etc/selinux/targeted/active/policy.kern
-rw-------. 1 root root 3.7M Apr 5 12:39 /etc/selinux/targeted/active/policy.linked
[root@node1 ~]#
- 查找/etc目录下大小大于4M的文件
[root@node1 ~]# find /etc/ -size +4M -exec ls -lh {} \;
-r--r--r--. 1 root root 6.7M Apr 5 12:39 /etc/udev/hwdb.bin
[root@node1 ~]#
根据时间戳查找:
以“天”为单位:
- -atime [+|-]#
#:[#, #+1)
-#:(#+1, 0]
+#:(oo, #+1] - -mtime
- -ctime
以“分钟”为单位:
- -amin
- -mmin
- -cmin
e.g.
- 查找/root目录下4天内访问过的文件
[root@node1 ~]# date
Mon Apr 8 00:46:38 CST 2019
[root@node1 ~]# find /root/ -atime 4 -exec ls -lh {} \;
-rw-------. 1 root root 942 Apr 4 00:20 /root/anaconda-ks.cfg
[root@node1 ~]#
根据权限查找:
- -perm [/|-]mode
mode:精确权限匹配;
/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;9位权限之间存在“或”关系;
-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;9位权限之间存在“与”关系;
e.g.
- 查找/root目录下权限为644的文件
[root@node1 ~]# find /root -perm 644 -exec ls -l {} \;
-rw-r--r--. 1 root root 18 Dec 29 2013 /root/.bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 /root/.cshrc
-rw-r--r--. 1 root root 129 Dec 29 2013 /root/.tcshrc
-rw-r--r--. 1 root root 404 Mar 19 13:51 /root/.ssh/id_rsa.pub
-rw-r--r--. 1 root root 891 Mar 26 22:22 /root/.ssh/known_hosts
-rw-r--r--. 1 root root 774 Mar 25 16:49 /root/ana.zip
-rw-r--r--. 1 root root 774 Mar 31 22:36 /root/te.zip
-rw-r--r--. 1 root root 0 Mar 31 23:39 /root/tfile-2019-03-31-23-39-37
-rw-r--r--. 1 root root 14 Apr 7 23:01 /root/.vimrc
-rw-r--r--. 1 root root 33 Apr 7 23:14 /root/test.sh
[root@node1 ~]#
- 查找/root目录有写权限的文件
[root@node1 ~]# find /root -maxdepth 1 -perm /222 -exec ls -l {} \;
-rw-r--r--. 1 root root 18 Dec 29 2013 /root/.bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 /root/.cshrc
-rw-r--r--. 1 root root 129 Dec 29 2013 /root/.tcshrc
total 16
-rw-------. 1 root root 801 Mar 19 14:12 authorized_keys
-rw-------. 1 root root 1679 Mar 19 13:51 id_rsa
-rw-r--r--. 1 root root 404 Mar 19 13:51 id_rsa.pub
-rw-r--r--. 1 root root 891 Mar 26 22:22 known_hosts
-rw-------. 1 root root 2128 Apr 7 00:56 /root/.bash_history
total 0
drwx------. 3 root root 59 Mar 19 14:14 tmp
-rw-------. 1 root root 85 Apr 8 02:19 /root/.lesshst
-rw-r--r--. 1 root root 774 Mar 25 16:49 /root/ana.zip
-rw-------. 1 root root 942 Apr 4 00:20 /root/anaconda-ks.cfg
total 0
-rw-r--r--. 1 root root 774 Mar 31 22:36 /root/te.zip
-rw-r--r--. 1 root root 0 Mar 31 23:39 /root/tfile-2019-03-31-23-39-37
-rw-------. 1 root root 1024 Apr 6 20:40 /root/.rnd
-rw-r--r--. 1 root root 14 Apr 7 23:01 /root/.vimrc
-rw-r--r--. 1 root root 33 Apr 7 23:14 /root/test.sh
-rwxr-xr-x. 1 root root 340 Apr 7 23:55 /root/useradd.sh
-rw-------. 1 root root 5532 Apr 7 23:55 /root/.viminfo
[root@node1 ~]#
- 查找/root目录下都有执行权限的文件
[root@node1 ~]# find /root -perm -111 -exec ls -l {} \;
total 0
-rwxr-xr-x. 1 root root 340 Apr 7 23:55 /root/useradd.sh
[root@node1 ~]#
组合测试:
- 与:-a, 默认组合逻辑;
- 或:-o
- 非:-not, !
e.g.
- 查找/etc目录以p开头的文件或者是符号链接文件的文件
[root@node1 ~]# find / -name p* -o -type l
/boot/grub2/i386-pc/part_acorn.mod
/boot/grub2/i386-pc/part_amiga.mod
/boot/grub2/i386-pc/part_apple.mod
/boot/grub2/i386-pc/part_bsd.mod
...
处理动作:
-
-print:输出至标准输出;默认的动作;
-
-ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
-
-delete:删除查找到的文件;
-
-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
-
-ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
-
-exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;
-
==注意==:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令;但是有些命令不能接受过长的参数,此时命令执行会失败;另一种方式可规避此问题:find | xargs COMMAND
e.g.
- 查找系统上没有属主和属组的文件,并通过exec使用ls -lh命令查看其ID值;
[root@node1 ~]# find / -nouser -nogroup -exec ls -lh {} \;
find: ‘/proc/29830/task/29830/fd/6’: No such file or directory
find: ‘/proc/29830/task/29830/fdinfo/6’: No such file or directory
find: ‘/proc/29830/fd/6’: No such file or directory
find: ‘/proc/29830/fdinfo/6’: No such file or directory
total 0
-rw-r--r--. 1 5008 5008 18 Nov 20 2015 /home/test/.bash_logout
-rw-r--r--. 1 5008 5008 193 Nov 20 2015 /home/test/.bash_profile
-rw-r--r--. 1 5008 5008 231 Nov 20 2015 /home/test/.bashrc
[root@node1 ~]#
转载于:https://blog.51cto.com/zengshao/2375080