以下内容全部采用Centos 7.X
🤮 下载centos
🤮 用户的类别
[root@localhost ~]# "#"表示管理员
[centos@localhost ~]$ "$"表示普通用户
注: root和centos表示用户名,localhost表示计算机主机名,~表示当前位置为用户的家目录
🤮 ssh连接(待续......)
这里的ssh可不是【Struts+Spring+Hibernate】,指的是Secure Shell
1、首先检查是否开启22号端口
[root@localhost ~]# ss -tnl
......(省略部分)
LISTEN 0 128 *:22 *:*
......(省略部分)
2、
🤮 echo 命令
-n: 不进行换行
-e: 让转义符生效
\n: 换行符
\t: 制表符
STRING可以使用引号,单引号和双引号均可用
双引号: 弱引用,变量引用会被替换
单引号: 强引用,变量引用不执行替换
举例:
[root@fjh ~]# echo $SHELL
/bin/bash
[root@fjh ~]# echo "$SHELL"
/bin/bash
[root@fjh ~]# echo '$SHELL'
$SHELL
: 变量引用的正规符号 ${name}
🤮 目录管理 命令
mkdir,rmdir
mkdir
-p: 自动按需创建父目录
-v: verbose,显示创建目录的步骤
-m MODE: 直接给定权限
注意: 路径基名为命令的作用对象,基名之前的路径表现得存在
rmdir
-p: 删除某目录后,如果其父目录为空,则一并删除
-v: 显示过程
🤮 命令行展开
~: 自动展开为用户的家目录,或指定的用户的家目录
{}: 可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径
例如: /tmp/{a,b} 相当于 /tmp/a /tmp/b
思考???
问题1: 如何创建/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b ?
问题2: 如何创建a_c,a_d,b_c,b_d ?
🤮 tree命令
-L :指定要显示的层级
[root@localhost ~]# tree -L 1 /etc
🤮 命令的执行状态结果
命令执行完,状态结果保存在特殊变量$?中
[root@localhost ~]# echo $?
0
🤮文件查看类命令
cat、tac、head、tail、more、less
cat
-n: 显示文本行编号
-E: 显示行结束符$
tac
与cat显示内容上下颠倒
head
显示文件的前n行
tail
显示文件的后n行
-f: 查看文件尾部内容结束后不退出,跟随显示新增的行
🤮文件管理类命令
cp、mv、rm
cp
单源复制
非目录:提示是否覆盖
目录:创建同名的文件,并复制其内容
多源复制
非目录:错误
目录:分别复制每个文件至指定的目录
-i: 交互式复制,即覆盖之前提醒用户确认
-f: 强制覆盖目标文件
-r: 递归复制目录
-d: 复制符号链接文件本身,而非其指向的源文件
mv
-i: 交互式
-f: force
rm
-i: interactive
-f: force
-r: recursive
删除目录: rm -rf /PATH/TO/DIR
💀危险操作💀: rm -rf /*
注意: 所有不用的文件建议不要直接删除,而是移动至某个专用目录(模拟回收站)
🤮文件名通配
*: 匹配任意长度的任意字符
?: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
有几种特殊格式:
[a-z],[A-Z],[0-9],[a-z0-9]
[[:upper:]] 所有大写字母
[[:lower:]] 所有小写字母
[[:alpha:]] 所有字母
[[:digit:]] 所有数字
[[:alnum:]] 所有的字母和数字
[[:space:]] 所有的空白字符
[[:punct:]] 所有标点符号
[^]: 匹配指定范围外的任意单个字符
举例:
[^[:upper:]] 除大写字母以外的所有字符
[^0-9] 除0-9之外的所有字符
[^[:alnum:]] 除字母和数字之外的所有字符
----------------------------------------------练习-----------------------------------------------------
练习1: 显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录
~]# ls -d /var/l?[[:lower:]]
练习2: 显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录
~]# ls -d /etc/[0-9]*[^0-9]
练习3: 显示/etc目录下,以非字母开头,后面跟一个字母及其他任意长度任意字符的文件或目录
~]# ls -d /etc/[^a-z][a-z]*
练习4: 复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至dhh目录
~]# cp -r /etc/m*[^0-9] dhh
练习5: 复制/usr/share/man 目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/man目录下
~]# cp -rv /usr/share/man/man[0-9] /tmp/man
练习6: 复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d目录下
~]# cp -rv /etc/{m,n,r,p}*.conf /tmp/conf.d
或
~]# cp -rv /etc/[mnrp]*.conf /tmp/conf.d
🤮IO重定向及管道
IO重定向
输出重定向: >
特性: 覆盖输出
举例: ~]# cat /var/log/yum.log > test/file.txt
输出重定向: >>
特性: 追加输出
举例: ~]# cat /etc/issue >> test/file.txt
set -C:
禁止覆盖输出重定向至已存在的文件
此时可使用强制覆盖输出: >|
举例:
~]# set -C
~]# cat /var/log/yum.log > test/file.txt
-bash: test/file.txt: 无法覆盖已存在的文件
set +C
关闭上述特性
错误输出流重定向: 2>,2>>
合并(正常+错误)输出流:
(1) &>,&>>
(2) COMMAND > /path/tosomefile 2>&1
COMMAND >> /path/tosomefile 2>&1
特殊设备: /dev/null
输入重定向:<
举例:
[root@localhost ~]# wc -l < test/test01/centos7/fstab
说明: 将需要统计的文本,重定向到指定文件
Here Document:<<
[root@localhost ~]# wc -l << EOF
> 你还好吗?
> 我,最近过的不太好
> 压力挺大的
> EOF
3
说明: EOF(名称随便写)表示结束符,在文本出现即退出编辑。
管道: 将前一个命令的输出,当作下一个命令的输入流
练习1: 把/etc/passwd文件的前6行的信息转换为大写字符后输出
~]# head -6 /etc/passwd | tr 'a-z' 'A-Z'
🤮用户和组
groupadd: 添加组
-g GID: 指定GID: 默认时上一个组的GID+1
-r: 创建系统组
groupmod: 修改组属性
-g GID: 修改GID
-n new_name: 修改组名
groupdel: 删除组
useradd: 创建用户
-u, --uid UID: 指定UID
-g, --gid GROUP: 只当基本组ID,此组事先存在
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]: 指明附加组,多个组之间用逗号分隔
-s, --shell SHELL: 指定用户的默认shell,可用的所有shell列表为/etc/shells文件
-r, --system: 创建系统用户
usermod: 修改用户属性
-u: 修改用户的ID为此处指定的新UID
-g: 修改用户所属的基本组
-G GROUP1[,GROUP2,...[,GROUPN]]]: 修改附加组,覆盖原来的附加组
-l: 修改用户名
-s: 修改用户的默认shell
-L, --lock: 锁定用户密码
-U,--unlock: 解锁用户的密码
userdel: 删除用户
-r: 删除用户时一并删除其家目录
passwd:
(1) passwd: 修改用户自己的密码
(2) passwd USERNAEM: 修改指定用户的密码,但仅root有此权限
-l, -u: 锁定和解锁用户
-d: 清除用户密码串
-e DATE: 过期期限,日期
-i DAYS: 非活动期限
-n DAYS: 密码的最短使用期限
-x DAYS: 密码的最长使用期限
-w DAYs: 警告期限
--stdin: #标准输入流
[root@localhost ~]# echo "fjh" | passwd --stdin fjh
gpasswd:
-a USERNAME: 向组中添加用户
-d USERNAME: 从组中移除用户
🤮权限管理
权限:
r: readable,读
w: writeable,写
x: executable,执行
文件:
r: 可获取文件的数据
w: 可修改文件的数据
x: 可将此文件运行为进程
目录:
r: 可使用ls命令获取其下的所有文件列表
w: 可修改此目录下的文件列表,即创建或删除文件
x: 可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息
🤮grep 命令
grep: 基本正则表达式
-i: ignore,忽略字符的大小写
-o: 仅显示匹配到的字符串本身
-v: 显示不能被模式匹配到的行
-E: 支持使用扩展的正则表达式元字符
-q: 静默模式,即不输出任何信息
-A #: after,后#行
-B #: before,前#行
-C #: context,前后#行
-----------------------------------------正则表达式---------------------------------------
字符匹配:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[^]: 匹配指定范围外的任意单个字符
匹配次数: 用在要指定其出现的而次数的字符的后面,用于限制其前面字符出现的次数,默认工作与贪婪模式
*: 匹配前面任意次,0、1、多次
.*: 匹配任意长度的任意字符
\?: 其前面的字符0次或1次,即其前面的字符是可有可无的
\+: 匹配其前面的字符1次或多次,即其前面的字符要出现至少一次
\{m\}: 匹配其前面的字符m次
\{m,n\}: 匹配其前面的字符至少m次,至多n次
\{0,n\}:至多n次
\{m,\}: 至少m次
位置锚定
^: 行首锚定,用于模式的最左侧
$: 行尾锚定,用于模式的最右侧
^$: 空白行
^[[:space:]]*$: 空行或包含空白字符的行
\< 或 \b: 词首锚定,用于单词模式的左侧
\> 或 \b: 词尾锚定,用于单词模式的右侧
\<PATTERN\>: 匹配完整单词
分组及引用
\(\): 将一个或多个字符捆绑在一起,当作一个整体进行处理
\(xy\)*ab
后向引用: 引用前面的分组括号中的模式所匹配到的字符
~]# grep "\(l..e\).*\1" lovers.txt ( \1:表示第一个括号中匹配到的字符,以此类推)
🤮egrep 命令
egrep: 扩展正则表达式
-----------------------------------------正则表达式---------------------------------------
字符匹配:
.: 任意单个字符
[]: 匹配指定范围内的任意单个字符
[^]: 匹配指定范围外的任意单个字符
次数匹配:
*: 任意次,0,1或多次
?: 0次或1次,其前面的在字符是可有可无的
+: 其前字符至少1次
{m}: 其前的字符m次
{m,n}: 至少m次,至多n次
{0,n}:0至n
{m,0}:
位置锚定
^: 行首锚定
$: 行尾锚定
\<,\b: 词首锚定
\>,\b: 词尾锚定
分组及引用
(): 分组,括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中
后向引用: \1,\2,……
或:
a|b: a或者b
(c|C)at: cat或Cat
-----------------------------------end-----------------------------------------
练习:
1、找出/proc/meminfo文件中,所有以大写或小写s开头的行,至少有三种实现方式
~]# grep -i "^s" /proc/meminfo
~]# grep "^[Ss]" /proc/meminfo
~]# egrep "^(S|s)" /proc/meminfo
2、显示当前系统上root、fjh或dhh用户的相关信息
# 锚定行首,锚定词尾
~]# grep -E "^(root|fjh|dhh)\>" /etc/passwd
3、找出/etc/rc.d/init.d/functions文件中某单词后跟一个小括号的行
~]# grep -E "[_[:alnum:]]+\(\)" /etc/rc.d/init.d/functions
4、使用echo命令输出绝对路径,使用egrep取出基名
~]# echo "/etc/lsm/lsmd.conf/" | egrep -o "[^/]+/?$"
进一步: 取出其路径名,类似于对其执行dirnam命令的结果
5、找出ifconfig命令结果中的1-255之间的数值
~]# ifconfig | grep -E -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
6、找出ifconfig命令结果中的ip地址
7、添加用户bash,testbash,basher以及nologin(其shell为/sbin/nologin),
而后找出/etc/passwd文件中用户名同shell名的行
~]# grep -E "^([^:]+\>).*\1$" /etc/passwd
🤮fgrep 命令
不支持正则表达式元字符
当无需用到元字符编写模式时,使用fgrep必能更好
🤮文本查看及处理工具
wc:
word count 输出文件中的行数、单词数、字节数
cut:
在文件的每一行中提取片断
-d CHAR: 以指定的字符为分隔符
-f FIELDS: 挑选出的字段
#: 指定的单个字符
#-#: 连续的多个字段
#,#: 离散的多个字段
sort:
sort [OPTION]... [FILE]...
-n: 基于数值大小而非字符进行排序
-t CHAR: 指定分隔符
-k #: 用于排序比较的字段
-r: 颠倒顺序
-f: 忽略字符大小写
-u: 重复的行只保留一份
重复行: 连续且相同
uniq:
删除排序文件中的重复行
uniq [OPTION]... [INPUT [OUTPUT]]
-c: 显示每行重复的次数
-u: 仅显示未曾重复的行
-d: 仅显示重复过的行
diff: 找出两个文件的不同点
patch:
打补丁
#生成补丁文件
[root@localhost ~]# diff fstab fstab.new > fstab.patch
#向fstab中打补丁
[root@localhost ~]# patch -i fstab.patch fstab
撤销补丁
[root@localhost ~]# patch -R -i fstab.patch fstab