1、定义一个对所有用户都生效的命令别名,例如:lftps='lftp 172.168.0.1/pub'
别名我们经常用到最简单的方法就是
alias: 用法:alias [-p] [名称[=值] ... ]
例如:alias du='du -sh'
但是这样有个缺点只有在当前shell下生效,我们可以将其写在profile文件中永久生效。
[root@node01 ~]# cd /etc/profile.d/
[root@node01 profile.d]# vim alias.sh
alias du='du -sh'
保存退出,
[root@node01 profile.d]# source /etc/profile
[root@node01 profile.d]# du /tmp
40M /tmp
[root@node01 profile.d]# alias
alias cp='cp -i'
alias du='du -sh'
2、显示/etc/passwd文件中不以/bin/bash结尾的行
解决思路:先找出以/bin/bash结尾的行。
[root@node01 profile.d]# grep "/bin/bash\>$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
gentoo:x:4001:4001::/data/gentoo:/bin/bash
user01:x:4004:4004::/usr/user01:/bin/bash
roobash:x:4005:4005::/home/roobash:/bin/bash
让后加-v 参数取反
[root@node01 profile.d]# 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
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
fedora:x:4002:4002:Fedora Core:/home/fedora:/bin/tcsh
mariadb:x:4003:4003::/home/mariadb:/sbin/nologin
[root@node01 profile.d]#
3、找出/etc/passwd文件中,包含二位数字或者三位数的行。
解决思路:[0-9]表示数字,{2,3}表示出现2-3次,\<,\>首尾锚定
[root@node01 profile.d]# egrep "\<[0-9]{2,3}\>" /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
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
或
[root@node01 profile.d]# grep "\<[0-9]\{2,3\}\>" /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
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
4、显示/proc/meminfo文件中以大写或小写S开头的行;用三种方式实现。
方法一:[Ss]
[root@node01 tmp]# grep "^[Ss]" /proc/meminfo
SwapCached: 0 kB
SwapTotal: 4063228 kB
SwapFree: 4063228 kB
Shmem: 8684 kB
Slab: 66736 kB
SReclaimable: 35124 kB
SUnreclaim: 31612 kB
方法二:-i 参数区分大小写
[root@node01 tmp]# grep -i "^s" /proc/meminfo
SwapCached: 0 kB
SwapTotal: 4063228 kB
SwapFree: 4063228 kB
Shmem: 8684 kB
Slab: 66736 kB
SReclaimable: 35124 kB
SUnreclaim: 31612 kB
方法三:扩展表达式(S|s)
[root@node01 tmp]# grep -E "^(S|s)" /proc/meminfo
SwapCached: 0 kB
SwapTotal: 4063228 kB
SwapFree: 4063228 kB
Shmem: 8684 kB
Slab: 66736 kB
SReclaimable: 35124 kB
SUnreclaim: 31612 kB
5、使用echo输出一个绝对路径,使用egrep取出路径名,类型执行dirname /etc/passwd 的结果。
解决思路:"/"后面一定要有字符。所以我们锚定字符末尾的"/",后面要跟一个或多个字符。
[root@node01 tmp]# echo "/etc/passwd/" | grep -o ".*\<"
/etc/
[root@node01 tmp]# echo "/etc/passwd" | grep -o ".*\<"
/etc/
[root@node01 tmp]# dirname /etc/passwd/
/etc
但是我们看到路径名末尾是没有"/"的,所以我们再过滤掉末尾的"/"。
[root@node01 tmp]# echo "/etc/passwd" | grep -o ".*\<" |grep -o ".*[^/]"
/etc
6、找出ifconfig中的ip地址。要求结果只显示IP地址。
解决思路:我们将IP地址分为4段,前三段都是数字和"."号,最后一段是数字
([0-9]|[1-9][0-9]|[1[0-9][0-9]|2[0-4][0-9]|25[0-5])表示0-255之间的数字
[root@node01 tmp]# ifconfig |egrep -o "\<(([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|25[0-5])\>"
10.192.2.222
255.255.255.0
10.192.2.255
127.0.0.1
255.0.0.0
7、vim定制自动缩进四个字符。
- 如果是对单个文本文件设置自动缩进四个字符,那么只需要在末行模式下设置
:set ai
:set shiftwidth=4
:set tabstop=4
:set softtabstop=4 - 如果是对全局设置,需要修改vim的配置文件,如下:
在修改配置文件之前我们先备份
[root@node01 etc]# cp /etc/vimrc /etc/vimrc.bak
编辑vimrc文件,在文件末尾添加
set ai
set shiftwidth=4
set tabstop=4
set softtabstop=4
8、编写脚本,实现自动添加三个用户,并计算这三个用户的uid之和。
解决思路:通过文件读取需要添加的用户名
#!/bin/bash
#自动添加用户
if [ $# -lt 1 ];then
echo "use like this: sh useradd.sh userfile"
exit 1
fi
declare suid=0
for i in `cat $1`;do
if grep "^$i\>" /etc/passwd &>/dev/null ;then
echo "user $i is exists"
else
useradd $i
echo $i |passwd --stdin $i &> /dev/null
echo "add user $i finished"
uid=$(id -u $i)
suid=$[$suid + $uid]
fi
done
echo "新增用户ID之和为:$suid"
[root@node01 ~]# vim name
zhangsan
lisi
wangwu
zhaoliu
[root@node01 ~]# sh useradd.sh name
add user zhangsan finished
add user lisi finished
add user wangwu finished
add user zhaoliu finished
新增用户ID之和为:16030
[root@node01 ~]# tail -4 /etc/passwd
zhangsan:x:4006:4006::/home/zhangsan:/bin/bash
lisi:x:4007:4007::/home/lisi:/bin/bash
wangwu:x:4008:4008::/home/wangwu:/bin/bash
zhaoliu:x:4009:4009::/home/zhaoliu:/bin/bash
9、find用法以及常用用法的实例演示。
find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
- 查找起始路径:指定具体搜索目标起始路径,默认为当前目录
- 查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等标准进行,默认为找出指定路径下的所有文件
根据文件的从属关系查找
-user USERNAME 找出属主指定用户的所有文件
-group RPUNAME 找出属组指定用户的所有文件
-uid UID 找出属主指定用户UID的所有文件
-gid GID 找出属组指定用户GID所有文件根据文件的类型查找
-type TYPE
f 普通文件
d 目录文件
l 符合链接文件
b 块设备文件
c 字符设备文件
p 管道文件
s 套接字文件根据文件大小查找
-size +。- unit
常用单位:k,M,G
根据时间戳查找
以“天”为单位
-atime 访问时间
-mtime 修改时间
-ctime 改变时间
以分钟为单位
-amin
-mmin
-cmin组合测试
与:-a,默认组合
或:-o
非:-not,!
支持glob风格的通配符 *,?,[],[^]
- 处理动作:对符合查找条件的文件做出的操作,例如删除等操作,默认为输出至标准输出
-print 输出至标准输出,默认动作
-ls 类似于对查找到的文件执行ls -l 命令,输出文件的详细信息
-delete 删除查找到的文件
-fls 把查找到的所有文件的长格式信息保存至指定的文件中
-ok command {} ; 对查找到的每个文件有command表示的命令,每次操作需要用户确认
-exec comomand {} ; 对查找到的每个文件有command表示的命令,不需要用户确认
注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令,但是有些命令不能接受过长的参数,为了解决这个问题。用如下命令
find | xargs command - 常用示例:
1、查找/var 目录下属主为root,且属组为mail的所有文件或目录
find /var -user root -a -group mail -ls
2、查找/usr目录下不属于root,bin或hadoop的所有文件或目录,用两种方法
find /usr ! \( -user root -o -user bin -o -user hadoop \) -ls
find /usr ! -user root -a -user bin -a -user hadoop -ls
3、查找/etc/目录下最近一周内其内容修改过的,且属主不是root用户也不是hadoop用户出的文件或目录
find /etc -mtime -7 -a ! -user root -a !-user hadoop -ls
4、查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
find / -nouser -a -nogroup -atime -7 -exec ls -l {} \;
5、查找/etc目录下大于1M且类型为普通文件的所有文件
find / -size +1M -type f -exec ls -l {} \;
6、查找/etc目录下所有用户都没有写权限的文件
find /etc ! -perm /222 -type f -exec ls -l {} \;
7、查找/etc目录至少有一类用户没有执行权限的文件
find /etc ! -perm -111 -type f -exec ls -l {} \;
8、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所有文件
find /etc -perm -113 -type f -exec ls -l {} \;