0、Linux目录所放的文件解释
1)/etc/default/useradd 添加用户的配置文件
2)/etc/passwd 用户属性,所有的用户信息
3)/etc/shadow 用户的密码文件,安全用户账户信息
4)/etc/shells 指定了当前环境可以用的安全的环境变量
5)/etc/login.defs 存储添加用户的一些默认值,安全密码套件
6)/etc/group 组账户信息
7)/etc/gshadow 安全组账户信息
8)/dev/null 黑洞文件 #id user1 &> /dev/null //执行结果不需要
9)~/.bash_history 存放history命令
10)/var/log/wtmp 存放用户登录历史及重启历史
11)cat /proc/partitions 存放文件分区的信息
当修改完分区之后,这个文件可能不会立即更新,执行#partprobe 命令,重读分区内容,写入到这文件
之中
12)/etc/fstab 包含了你的电脑上的存储设备及其文件系统的信息
os在初始化的时候,会自动挂载此文件中定义的每一个文件系统
挂载设备的时候,也可以把所要挂载的文件系统,写入到这个文件中去,再执行#mount -a 就ok了
13)/etc/sysconfig/network-scripts/ifcfg-ens33 网络的配置文件
14)/proc 文件夹里面的以数字命名的文件夹对应的是每一个进程
15)/var/log/messages 系统标准错误日志信息:非内核产生引导信息,各子系统产生的信息
16)/etc/logrotate.conf 存放管理日志信息的文件
17)/etc/log/maillog 邮件系统产生的日志信息
18)/var/log/secure 用户登录产生的日志信息
19)/etc/redhat-release 存放centos版本信息
1、用户管理
1)添加用户
首先获得管理员权限
#su
然后添加用户,设置密码
# useradd nii
# passwd nii
2)用户管理命令:
useradd : 添加用户
-c : 添加注释
-d : 设置家目录
-s : 指定shell的路径(shell必须合法)
-g : 基本组
-G : 附加组
-M : 不为用户创建家目录
userdel : 删除用户,默认不删除家目录
-r : 删除家目录
passwd :给用户设置密码
-d 删除使用者的密码, 只有具备超级用户权限的使用者方可使用
-n 修改密码的最小天数,也就是mindays内不能再次修改密码
-x 修改密码的最大天数,也就是maxdays天之后必须修改密码
–stdin 从标准输入中读入新密码(此时可以看见设置的密码)
usermod : 修改使用者账号
id : 显示指定用户或当前用户(当未指定用户时)的用户与组信息
chsh : 更改用户的shell
-s : 指定用户登录的shell #chsh -s /bin/csh
-l : 显示/etc/shells中的shell列表 #chsh -l
chage : 密码失效是通过此命令来管理的
-m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M 密码保持有效的最大天数。
-W 用户密码到期前,提前收到警告信息的天数。
-E 帐号到期的日期。过了这天,此帐号将不可用。
-d 上一次更改的日期
-I 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期
3)组管理命令:
groupadd : 创建组
-g : 设置组 ID 值
groupdel,groupmod
gpasswd : 组管理命令
用法:gpasswd[-a user][-d user][-A user,...][-M user,...][-r][-R]groupname
-a:添加用户到组
-d:从组删除用户
-A:指定管理员
-M:指定组成员和-A的用途差不多
-r:删除密码
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组
4)权限管理:ls -l 可以查看文件的权限
chown : 只有管理员可以使用 (#chown file own)
-R : 修改文件本身以及内部文件的属性
--reference=file1 file2 把file2的权限改为和file1的权限一样
#chown -R admin.root /home/openstack/(改变一个文件的属主.属组)
chmod(改变权限)
chmod mode file/directory
-R 修改文件本身以及内部文件的属性
--reference=file1 file2 把file2的权限改为和file1的权限一样
grammar:
chown root /u 将 /u 的属主更改为"root"。
chown root:staff /u 和上面类似,但同时也将其属组更改为"staff"。
chown -hR root /u 将 /u 及其子目录下所有文件的属主更改为"root"。
mask(遮罩码)
文件的权限:666-umask
目录的权限:777-umask
文件默认没有执行权限。
chgrp:改变文件的组所有权
example:
2、ls的用法
ls 直接显示文件
-l: 长格式显示
-h: 做单位转换
-a: 显示以.开头的隐藏文件
-d: 显示目录自身属性
-r: 逆序显示
-i: 正序显示,前面可以显示inode号
-R: 递归显示(recursive)
drwx------. 2 admin admin 23 6月 13 19:55 ssh-j777abtloqB1
(drwx------)-- >文件权限,9位,每三位一组:rwx(可读、写、执行) rw-(可读、可写、不可执行)
(2)--> 是文件硬链接的次数
(admin)-->文件的属主(owner)
(admin)-->文件的属组(group)
(23)-->文件的大小(size),单位是字节
(6月 13 19:55)-->时间戳,显示最近一次修改的时间
3、type:显示指定属于哪种类型(内部、外部)
内部
外部
4、hash 缓存
知道系统从启动到现在一些指令所代表的路径所用的次数
5、touch、stat命令和
最常用用法:touch fileA
如果fileA存在,使用touch指令可更改这个文件或目录的日期时间,包括存取时间和更改时间;
如果fileA不存在,touch指令会在当前目录下新建一个空白文件fileA。
如果fileA存在,使用touch指令可更改这个文件或目录的日期时间,包括存取时间和更改时间;
如果fileA不存在,touch指令会在当前目录下新建一个空白文件fileA。
stat 会获得文件的详细信息
6、cp与scp
1)scp复制文件
scp local_file remote_username@remote_ip:remote_folder
scp -r local_folder remote_username@remote_ip:remote_folder
3)scp从远程服务器复制到本地服务器:
从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
4)scp复制文件或目录改名字
5)cp与scp一样
scp local_file remote_username@remote_ip:remote_folder/new_name
7、install命令
-d :创建目录
和cp差不多的功能(man install)来查看
8、获得Linux当前最新的内核版本号和版本
内核:
uname -a
cat /proc/version
uname -r
版本: cat /etc/redhat-release
8、查看文件的前几行或者后几行
head -n 5 file 查看文件的前5行,如果没有(-n 5),则默认显示前10行
tail -n 5 file查看文件的后5行,如果没有(-n 5),则默认显示前10行
tail -f :查看文件尾部,不退出,等待显示后续追加至此文件的新内容
-d : 制定字段分隔符,默认是空格
-f :制定要显示的字段
-f1第一个字段
-f 1,3 显示第一个和第三个
-f 1-3 显示第一个到第三个
-b : 显示字节数
-c : 显示字符
example:
cut -d : -f1 /etc/passwd
10、sort用法(文本显示排序)
sort file
-n : 数值排序
-r : 逆序排序
-t : 字段分隔符 sort -t : -k3 /etc/passwd
-k : 以哪个字段为准,来进行比较
-u : 重复的,只显示一次 sort -u a.c
-c, --count 在每行前加上表示相应行目出现次数的前缀编号
-d, --repeated 只输出重复的行
-D, --all-repeated[=delimit-method 显示所有重复的行
-f, --skip-fields=N 比较时跳过前N 列
-i, --ignore-case 在比较的时候不区分大小写
-s, --skip-chars=N 比较时跳过前N 个字符
-u, --unique 只显示唯一的行
-z, --zero-terminated 使用'\0'作为行结束符,而不是新换行
-w, --check-chars=N 对每行第N 个字符以后的内容不作对照
12、wc的用法(文本统计命令)
wc - print newline, word, and byte counts for each file
下面显示的是(行数、字符数、字节数),查看帮助可以只显示某一个数值
-c, --bytes打印字节数
-m, --chars 打印字符数
-l, --lines 打印行数
-L, --max-line-length 打印最长行的长度
-w, --words 打印单词数
13、tr的用法,实现字符转换(从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。)
tr ‘ab’ ‘AB’ file 将文件里面的小写a、b,换为A、B
网址更详细讲解:http://linux.51yip.com/search/tr
Ctrl+a : 跳到命令行首
Ctrl+e :跳到命令行尾
Ctrl+u :删除光标到命令行首的内容
Ctrl+k :删除光标到命令行尾的内容
-c 删除所有条目从而清空历史列表。
-d 偏移量 从指定位置删除历史列表。
-a 将当前绘画的历史行追加到历史文件中
-n 从历史文件中读取所有未被读取的行
-r 读取历史文件并将内容追加到历史列表中
-w 将当前历史写入到历史文件中 并追加到历史列表中
-p 对每一个 ARG 参数展开历史并显示结果 而不存储到历史列表中
-s 以单条记录追加 ARG 到历史列表中
echo $HISTSIZE 可以查看history默认保存的条数,默认为1000(环境变量)
!n : 执行命令历史中第n条的命令
!-n : 执行命令历史中倒数第n条命令
!! : 执行上一条命令
alias cls=clear
alias rm='rm -i'
取消别名:
ualias cls
环境变量存放在/etc/bashrc文件中(全局)
1)用vim /etc/bashrc打开bashrc文件
2)在最后一行添加alias cls=clear,保存退出
3)执行source ~/.bashrc命令,来生效,这样所有登陆的用户都可以使用cls这个命令了
环境变量存放在/etc/bashrc文件中(自己用户)
1)执行 #cd ~ 切换到自己用户的根目录下面 /home/user_directory
2)vim .bashrc 在后面一行加上cls=clear
3)保存退出就ok了,该用户就可以使用cls命令了
例如:echo "The directory is $(pwd)"
输出:The directory is /home/admin/test
例如(创建一个文件,文件名里面包含当前时间):touch file-$(date +%F-%H-%M-%S).c
产生一个文件: file-2015-06-15-14-51-03.c
16、通配符的使用(man 7 glob)可以查看帮助文档
* : 统配任意长度的任意字符
? : 任意匹配单个字符
[]: 匹配制定范围内的任意单个字符
[abc],[a-z],[0-9],[0-9a-zA-Z]
[:space:] 空白字符
[:punct:] 标点符号
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 大小写字母
[:digit:] 数字
[:alnum:] 数字和大写字母
[^]:匹配指定范围之外的任意单个字符
examle:
1)显示以a或m开头的文件 ls [am]*
2) 显示所有文件名包含数字的文件: ls *[0-9]*
3) 显示文件中包含非字母或数字的文件 ls *[^[:alnum:]]*
warning:
有时候通配符不能完全匹配到所需要的文件,就需要正则表达式来匹配
16、which、whereis、locate、find命令区别
1)which 查看可执行文件的位置
是通过PATH环境变量到该路径下查找可执行文件,所以基本的功能是寻找可执行文件
grammer: which passwd(which 可执行文件的名称)
2)whereis 查看文件的位置
grammer: whereis passwd (whereis 文件或目录名称)
-b : 只找二进制文件
-m: 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 没有说明文档的文件
-m: 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 没有说明文档的文件
3)locate 配合数据库查看文件的位置
4)find 从磁盘上查找
时间查找参数:
-atime n :将n*24小时内存取过的的文件列出来
-ctime n :将n*24小时内改变、新增的文件或者目录列出来
-mtime n :将n*24小时内修改过的文件或者目录列出来
-newer file :把比file还要新的文件列出来
名称查找参数:
-gid n :寻找群组ID为n的文件
-group name :寻找群组名称为name的文件
-uid n :寻找拥有者ID为n的文件
-user name :寻找用户者名称为name的文件
-name file :寻找文件名为file的文件(可以使用通配符)
-ctime n :将n*24小时内改变、新增的文件或者目录列出来
-mtime n :将n*24小时内修改过的文件或者目录列出来
-newer file :把比file还要新的文件列出来
名称查找参数:
-gid n :寻找群组ID为n的文件
-group name :寻找群组名称为name的文件
-uid n :寻找拥有者ID为n的文件
-user name :寻找用户者名称为name的文件
-name file :寻找文件名为file的文件(可以使用通配符)
17、frofile和bashrc介绍,及用户登录读取配置文件的顺序
profiles类文件功能:
设定环境变量
运行命令或脚本
bashrc类文件功能:
设定本地变量
定义命令别名
bashrc,profile配置文件所放位置:
全局配置
/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
个人配置:
~/.bash_profile, ~/.bashrc
登陆式shell:
正常通过某终端登录
su -USERNAME
非登陆式shell:
su USERNAME
自动执行的shell脚本
登陆式shell如何读取配置文件?
/etc/profile --> /etc/profile.d/*sh --> ~/.bash_profile -->~/.bashrc -->/etc/bashrc
非登录式shell如何读取配置文件?
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
example:在bash_profile最后添加 echo "Welcome to come admin ,date id $(date)",则在进入该用户的时候会提醒用户。
18、IO重定向和管道
> : 覆盖输出 #ls /etc > a.txt
>>: 追加输出 #ls /etc >> a.txt
2>:重定向错误输出
当使用#ls /etcc >> a.tx
#cat a.txt 则会报错
2>>:追加输出
&>:重定向向标准输出或错误输出至同一个文件
#set -C :禁止对以及存在的文件使用输出重定向
#ls /etc >| a.txt 强制覆盖输出
#set +C :关闭禁止覆盖功能
输入重定向:
< : 输入重定向符号
<<: 此处生成文档 #cat << EDN
管道:
| : 符号
19、tee(用来将标准输入的内容输出到标准输出并可以保存为文件)
-a 附加到文件
-i 无视中断
grammar: #tee file.c
基本正则表达式:
-i : 忽略大小写
--color :高亮显示
-v : 显示没有被匹配到的行
-o :只显示被匹配到的字符串
-w :强制匹配字符一样
-B, --before-context=NUM 打印以文本起始的NUM 上n行
-A, --after-context=NUM 打印以文本结尾的NUM 行 下n行
-C, --context=NUM 打印输出文本NUM 行,上下都n行
元字符:
.:匹配任意单个字符 #grep -i 'r.t' /etc/passwd
* : 匹配其前面的字符任意次 #grep a*b /etc/passwd 匹配前面a出现任意次,最后跟个b的字符
.*:代表任意长度的任意字符
\? : 匹配其前面的字符1次或者0次
\{m,n\} : 匹配前面的字符,至少m次,至多n次
[] : 匹配指定范围内的任意单个字符
[^]: 匹配指定字符外的任意单个字符
[:digit:]:数字
[:space:]:空白字符
位置锚定:
^ :锚定行首,此字符后面的任意的任意内容必须出现在行首 # grep '^r..t' /etc/passwd
$ : 锚定行尾,次字符前面的任意内容必须出现在行尾
^$:空白行
\< : 锚定词首,其后面的任意字符,必须作为单词的词首出现
\> : 锚定词尾,其前面的任意字符,必须作为单词的尾部出现
分组:
\(\) : \(ab\)*,ab在前面出现任意次
后向引用:
\1 : 引用前面出现的第1个括号内容 #grep '\(l..e).*\1' /etc/a.c
\2 : 引用前面出现的第2个括号内容
扩展正则表达式:
grep -E :使用扩展正则表达式
egrep:使用扩展正则表达式
字符匹配 :
. : 同上
[]: 同上
[^]: 同上
次数匹配:
* : 同上
? : 同上
+ : 匹配其前面的字符至少1次
(m,n):不需要再加 \
位置锚定:
^: 同上
$: 同上
\<: 同上
\>: 同上
分组:
\1: 同上
\2: 同上
或者:
| : 或者 # grep -E 'a|aab' a.c
grammar:找出ip地址
#ifconfig | egrep '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\>\.){3}(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\>)' (\.)指的就是一个 . {3}就是重复三次前面的括号
21、查看环境变量命令
env
export
printenv
warning:
1、脚本执行结束,变量会被撤销的。
2、只能包含数字、字母、下划线,并且不能以数字开头
3、最好做到见名知意
1)判断一条命令是否执行成功
$? : 上一个命令的执行状态返回值
程序执行:可能有两种不同的返回值
0 :正确执行
1-255:错误执行 1 2 127 系统预留
2)实现条件判断
1、条件测试表达式 [ expression ]
2、整数比较
-eq : 测试两个整数是否相等 相等0 不等 1 #[ $A -eq $B ]
-ne : 测试两个整数是否不等。相等 1,不等 0
-gt : 测试一个数是否大于梁歪一个数: 大于 0, 否侧 1
-lt :测试一个数是否小于另外一个数: 大于 1,否则 0
-ge :大于或等于
-le : 小于或等于
3、命令间的逻辑关系
逻辑与: &&
逻辑或: ||
4、if语句的用法(单分支) #man test 查看用法
if id user5 &> /dev/null ; then
echo "user is exist"
else
echo "user is not exist"
fi
5、if语句的用法(多分支)
if 判断条件 1 ; then
statement1
elif 判断条件 2 ; then
statement1
.....
else
statement n
fi
6、算数运算表达式
let 算数运算表达式:
#let C=$A+$B
+= :
/= :
%= :
$[算数运算表达式] :
C=$[$A+$B]
$((算数运算表达式)):
C=$(($A+$B))
7、退出脚本
exit num: 退出脚本 num 不能为0 ,
如果脚本没有明确定义退出状态码,最后执行一条命令的退出码即为脚本的退出码
8、文件测试
-e file : 测试文件是否存在 [ -e /etc/inittab ]
-f file : 测试文件是否为普通文件
-d file : 测试指定路径是否为目录
-r file : 测试文件对当前用户而言是否可读
-w file : 测试文件对当前用户而言是否可写
-x file : 测试文件对当前用户而言是否可执行 [ -x /etc/rc.d/sysinit ]
9、测试写的脚本是否有语法错误
bash -n file.sh : 没有错误不显示,有错误显示
bash -x file.sh : 单步执行脚本,比较常用
10、bash的变量类型 (脚本可以从终端读取参数)
位置变量:
$1 :
$2 :
shift n:可以一次踢出多个,默认踢出1个
特殊变量:
$? :
$# : 参数的个数
$* : 参数的列表
$@ : 参数的列表
grammar:(提示用户必须输入参数)(位置参数 $1,$2....)
if [ $# -lt 1 ] ; then
echo "You must input parameter"
exit1
fi
11、字符串比较
==/= : 测试是否相等 相等为真,不等为假
!= : 测试是否不等,不等为真,相等为假
> : 测试是否大于
< : 测试是否小雨
-n :测试指定字符串是否为空,空为真,不空为假
-s :测试字符串是否不空,不空为真,空为假
23、sed命令
参考资料:http://linux.51yip.com/search/sed
1)使用方法
sed [option] 'AddressCommand' file
2)StartLine,EndLine
'1,3' : 第1行到第三行
$ : 最后一行
3)模式匹配 /Exp/
/root/ : 匹配到root字符串
4)/pattern1/,/pattern2/
第一次被pattern1匹配到行开始,至第一次被pattern2匹配到的行结束,中间所有的行
5)LineNumber 指定的行
6)StartLine,+N
从startLine开始,向后的N行
option:
-n :静默模式,不显示模式空间中的内容
-i :直接修改原文件
-e :可以同时执行多个脚本
-f :把文件的脚本来处理文件
#sed -f /path/to/scripts file 把scripts文件里的脚本,一个一个作用在file文件上
command:
d : 删除符合条件的行
#sed '1,3d' /etc/inittab 删除第1到第3行
#sed '/bash/d' /etc/passwd 删除有bash字符串的行
#sed '/^$/d' stuSed.c 删除空白行
p : 显示符号条件的行
#sed '/bash$/p' /etc/passwd 以bash结尾的行,显示了两次
#sed -n '/bash$/p' /etc/passwd 以bash结尾的行,显示一次,不显示模式空间中的内容
a \string : 在符号条件处,新增一个strin的新行,\n可以换行
#sed '/target$/a\wangzhengjun' /etc/inittab
# sed '/target$/a\wangzhengjun\nis good student' /etc/inittab
i \string :在指定的行前面添加新行,内容为string
r file :将指定的文件内容添加至符合条件的行处
w file : 将指定范围内的内容,另存至指定的文件中去
#sed '1,3w /home/admin/a.txt' /etc/passwd
s/pattern/string/ : 查找每一行的pattern样式字符串替换成 string,默认只替换每一行中第一次被模式匹配到的字符串
# sed 's/bash/BASH/' /etc/passwd
g : 全局替换
i :忽略字符大小写
s///:s###,s@@@一样
必须是同时出现三个一样的时候才可以用#和@,否则只能用/
\(\) : 引用
\1,\2
前向匹配: #sed 's/l\(..e\)/L\1/g' a.txt 把l..e变为 L...e
后向匹配: # sed 's/\(l..\)e/\1E/g' a.txt
& : 引用模式,匹配整个字符串
#sed 's/l..e/&r/g' a.txt 把每一行的l..e,都变为l..er
24、bc命令(Linux简单的计算器,能进行进制转换与计算)
obase=2; :以二进制显示
sacle=2; :小数点后面两位
#echo "scale=2;34/5;" | bc
25、seq命令
seq [起始数] [步进长度] [结束长度]
#seq 1 100
26、for,while,sleep,continue,until循环,function函数
1)for
for index in {1..100} ; do
sum=$[$sum+$index]
done
2)while
死循环:
3)sleep 睡眠命令
sleep 5 睡眠5s钟
4)continue
退出本轮的循环,直接进入下一轮循环
5)break
退出循环,和用法C语言一样
6)until
7)function
1、定义函数
2、获取函数返回值
$?:函数执行的状态结果
3、自定义函数返回值
return # 函数直接返回
4、给函数传递参数
5、局部变量与全局变量
全局变量,在函数内部也可以使用的。
局部变量默认可以在函数体外使用,但是加上local就限定只能在函数体内使用
6、数组的使用
echo ${#arr[1]} 查看每一个的字符个数
echo ${#arr[*]} 数组中不为空的个数
echo ${arr[*]} 显示数组中的所有的元素
产生11个随机数,并找出最大的数:
产生SumNum个不相同的随机数:
27、vim编辑器的使用
1)在文件中跳转
vim + file : 直接跳到文件的最后一行
vim +/pattern : 定位到第一次被pattern匹配到的行
i : 在当前光标所在字符的前面,转为输入模式
o:在当前光标所在行的下方,新建一行,并转为输入模式
2)移动光标:exit
G:跳到行尾
gg:回到行首
3)复制命令:
yy:复制光标所在的行
yG:复制至档尾
p: 粘贴到光标后面
yy: 复制游标所在行整行。或大写一个Y。
2yy: 或y2y复制两行。 ㄟ ,请举一反三好不好! :-)
y^: 复制至行首,或y0。不含游标所在处字元。
y$: 复制至行尾。含游标所在处字元。
yw: 复制一个word。
y2w: 复制两个字(单词)。
yG: 复制至档尾。
y1G: 复制至档首。
x:删除光标处的字符
u:相当于Ctrl Z 撤销删
4)新增一个编辑窗口:
sp / Ctrl w s:水平拆分窗口
Ctrl w v :垂直拆分窗口
Ctrl w 箭头 : 上下左右切换窗口
Ctrl w q:退出当前的窗口
Ctrl w :窗口之间跳转
5)查找:
:/admin :查找admin
6)替换:
:.,$-1s/admin/ADMIN/g 从当前行,到倒数第一行把admin,替换成ADMIN,全局替换
7)分窗口显示多个文件
vim -o :水平分割显示
vim -O : 垂直分割显示
8)配置vim
set nu
set tabstop
syntax on 语法高亮
set ai #设置自动缩进 autoindent
set hlsearch 设置查找到的文本高亮显示或取消
28、locate,find文件查找
1)locate:
非实时,查找是根据全系统文件数据库进行,速度快
updatedb :手动生成数据库
2)find: find 查找路径 查找标准 查找到以后的处理运作
实时、精确、遍历指定目录中的所有文件完成查找、速度慢
查找路径:默认为当前的路径
查找标准:默认为指定路径下的所有文件
处理运作:默认为显示
3)find匹配标准
-name file: 对文件名做精确匹配
-iname file: 对文件名匹配的时候,不区分大小写
-regx PATTERN: 基于正则表达式查找
-user USERNAME : 根据属主查找
-group GROUPNAME :根据属组查找
-iud UID :根据UID查找
-gid GID :根据GID查找
-nouser :查找没有属主的文件
-nogroup:查找没有属组的文件
-size FILESIZE:查找文件大小
+10M :大于10M
-10M :小于10M
4)组合条件
-a :与
-o :或
-not :非
5)时间匹配 [+|-]
-mtime : 文件修改时间 (天)
-ctime :改变的文件
-atime : 访问时间
-mmin : 分钟
-cmin :
-amin :
grammar:
#find /etc/ -type d 查找是目录的
#find /etc/ -not type 不是目录的
#find -name a.txt -ls 找到文件之后并显示出来
6)-perm mode 权限匹配查找
# find ./ -perm 777 -ls 在当前的目录下权限为777的匹配出来
7)匹配到显示
-print :显示出来文件
-ls :显示文件的详细信息,和ls -l差不多
-ok COMMAND {} \ ; 每一个操作都需要用户确认
-exec COMMAND {} \ ;每一个操作不需要用户确认
8)xargs
find /etc/ -size +1M | xargs > /home/admin/a.txt
9)查找目录
# find / -name sqlite3 -type d
29、facl, setfacl 文件控制列表
1)getfacl 获取文件访问控制列表
2)setfacl 设置文件的访问控制列表
-m : 设定
u : UID:perm # setfacl -m u:nii:rw shadow
g : GID:perm
-x :取消
u : UID # setfacl -x u:admin shadow
g : GID
30、显示用户命令
1)w、who
查看现在都有哪些用户登录到了系统上
2)whoami
查看现在登录到系统的用户是谁。
3)last /var/log/wtmp
#last -n 3 显示最近3次登录历史
4)lastb /var/log/btmp
显示用户错误的登录次数
5)lastlog
显示每一个用户最近一次的成功登录信息
-u USERNAME : 显示特定的用户
6)bashname
$0 : 引用脚本的名称,执行脚本路径及名称
7)mail 发邮件
# man shadow | mail -s "how are you" admin (-s代表主题)
8)hostname 显示主机名
#hostname do 把主机名改为do
31、随机数生成器 :熵池
/dev/random
/dev/urandom
![]()
#$RANDOM
32、case语句
33、ln 在文件之间建立连接
-i : 符号链接
#ln -i myshell.sh /home/www 生成文件www和 myshell.sh的idnode不一样
#ln myshell.sh /home/www
-s:建立软链接
软链接的文件大小是指向原文件的路径
ln file.c file1.c :直接建立硬链接,两个文件的inode一样
34、du、df
du: 报告磁盘空间使用情况
-a :显示对所有文件的统计,而不只是包含子目录。
-b : 输出以字节为单位的大小,替代缺省时1024字节的计数单位。
-s : 显示一个目录的大小,不包含子目录
-h :显示以象用M表示二进制 的兆字节
df : 报告文件系统磁盘空间的使用情况
-h : 用常见的格式显示出大小(例如:1K 234M 2G)
-a : 列出包括BLOCK为0的文件系统
-l : 只显示本地文件系统使用状况
35、mknod 创建特殊文件 mknod [OPTION]... NAME TYPE [MAJOR MINOR]
b 创建(有缓冲的)区块特殊文件
c, u 创建(没有缓冲的)字符特殊文件,虚拟设备
p 创建先进先出(FIFO)特殊文件
-m :指定权限
#mknod -m 777 mydev c 22 44
36、fdisk 查看磁盘分区命令/
-v : 打印 fdisk 的版本信息并退出.
-l : 列出指定设备的分区表信息并退出。 .
-u : 以扇区数而不是以柱面数的形式显示分区表中各分区的信息
管理分区:fdisk /dev/sda
p : 显示当前的硬件分区,包括没有保存的改动
n :创建新分区
d : 删除一个分区
w :保存退出
q :不保存退出
t :修改分区类型
l :已知的分区类型列表
#mkfs -t ext3
1)找根,找根的 inode,找到根对应的磁盘块
2)在磁盘块上存放的有var文件的inode号
3)在目录表中找到var文件的磁盘块
.......
39、 mke2fs 建立Linux系统使用的ext2或ext3-j :创建ext3类型文件系统
-b :指定块的大小
-L : 指定分区卷标
-m # :指定预留给超级用户的块数百分比
# mke2fs -m 5 /dev/sda1
-i : 指定每个inode的字节数
42、 mount 挂载设备(umount 卸载设备)
-N :指定inode的个数
-F :强制创建文件系统
-E :用户指定额外文件系统属性
40、blkid,e2label,tune2fs,dumpe2fs,fsck,e2fsck,mkswap,swapon ,swapoff,dd文件系统的一些其他指令
blkid :查询或查看磁盘设备的相关属性
UUID
TYPE
LABEL
e2label : 用于查看或定义卷标
e2label:设备文件 卷标:设定卷标
tune2fs: 调整文件系统的相关属性
-j: 不损害原有数据,将ext2升级为ext3;
-L LABEL: 设定或修改卷标;
-m #: 调整预留百分比;
-r #: 指定预留块数;
-o: 设定默认挂载选项;
acl
-c #:指定挂载次数达到#次之后进行自检,0或-1表关闭此功能;
-i #: 每挂载使用多少天后进行自检;0或-1表示关闭此功能;
-l: 显示超级块中的信息;
dumpe2fs: 显示文件属性信息
-h: 只显示超级块中的信息
fsck: 检查并修复Linux文件系统
-t FSTYPE: 指定文件系统类型
-a: 自动修复
e2fsck: 专用于修复ext2/ext3文件系统
-f: 强制检查;
-p: 自动修复;
mkswap:创建交换分区
在创建交换分区前,要调整分区类型为82
#mkswap /dev/sda1
swapon /dev/sda8 挂载交换分区
-a:挂载所有的的交换分区 所有在/etc/fstab文件中
swapoff /dev/sda8卸载交换分区
dd:复制的数据流
if:数据来源
of:数据存储目标
bs:block size 复制文件的一部分
count:复制的单位 #dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1 备份MBR
seek=#:创建数据文件时,跳过的空间大小
# dd if=a.txt of=/home/a.txt
创建一个64M的交换分区:
# dd if=/dev/zero of=/var/swapfile bs=1M count=64
# mkswap /var/swapfile 创建交换分区
#swapon /var/swapfile 挂载交换分区
41、free,top 查看系统内存
1)free
-m:以M为单位显示
-h:以以可读形式显示容量
2)top 监控系统性能的
M:根据驻留内存大小进行排序
P:刚那句cpu的利用率进行排序
T:根据累计时间进行排序
l:是否显示平均负载和启动时间
t:是否显示进程和cpu状态相关信息
m:是否显示内存相关信息
c:是否显示完整的命令行信息
q:退出
k:终止某个进程
-d # :设置刷新时常,单位是秒
#top -d 1
-b:批模式
-n #:在批模式下,共显示多少批
1 line:当前时间 运行了56分钟 3个用户 平均负载 5分钟 10分钟 15分钟的平均负载
2 line:当前有219个任务 1个正在运行 218个休眠 0个停止 0个僵尸进程
3 line:us(user space)用户空间 sy(system space)内核空间 ni(nice)值 id空闲百分比 wa(wait)等待IO所占用的时间 hi(hard interrupt)硬件中断所占用时间 si(soft interrupt)软件中断所占用时间 st被偷走所占用三
进程号 用户 优先级 nice值 VIRT(virtual memory usage)虚拟内存集 RES(resident memory usage)常驻内存 SHR(share memory usage)共享的内存 TIME+运行的时间 COMMAND进程名
1)mount 设备 挂载点
设备
设备文件 :/dev/sda1
卷标 :LABEL=""
UUID: UUID=""
挂载点:目录
要求:
1、此目录没有被其他进程使用
2、目录得事先存在
3、目录中的原来的文件将会暂时隐藏
2)使用方法
-a:挂载/etc/fstab 文件中定义的所有的文件系统
-n:默认情况下,mount命令没挂载一个设备,都会把挂载的设备信息保存至/etc/mtab文件,使用-n选项意味着挂载设备时,不把信息写入该文件
-t FSTYPE:指定正在挂载设备上的文件系统的类型,不使用此选项时,mount会钓鱼blkid命令获取对应文件系统的类型
-r:制度挂载,挂载光盘时常用此选项
-w:读写挂载
-o:指定额外的挂载选项,也即指定文件系统启用的属性
remount:重新挂载当前文件系统
ro:挂载为只读
rw:读写挂载
3)umount卸载某文件系统
umount:设备
umount:挂载点
卸载注意事项
挂载的设备没有进程使用
43、ps、fuser、kill、killall,pstree,pgrep,pidof,bg,jobs,vmstat
1)fuser 验证进程正在使用的文件或套接字文件
-l 显示信号
-4 IPv4
-6 IPv6
-a 与程序相关的所有文件
-k 删除程序相关的所有文件
-I 互交模式
-s 不显示处理信息
-u PID显示用户名
-v 运行时,显示相信处理信息
- 清零
-m 挂载文件系统
-signal 发送信号
-n 指定关键字进行搜索,如 文件、UDP、TCP
-V 显示版本显示
#fuser -km /dev/sda1 杀死这个挂载的文件系统
2)ps process state 查看进程的信息
a: 显示所有与终端有关的进程
u:显示用户等详细的信息
x:显示所有与终端无关的进程
#ps ax 显示所有的包括与终端有关和无关
#ps aux | grep "bash"
-elF:也可以显示详细的进程信息,-e,-f都可以用
进程的分类
跟终端无关的进程
跟终端有关的进程
进程状态:
D:不可中断的进程
R:运行或就绪
S:可中断的进程
T:停止
Z:僵死进程
<:高优先级进程
N:低优先级进程
+:前台进程组中的进程
l:多线程进程
指定显示哪个字段:
-o:
#ps -axo pid,ni
3)pgrep pattern 查看有pattern的进程号
#pgrep bash
4)pidof pid_name 根据进程的名字来查看进程号
#pidof init
5)kill
-l:若不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
#kill 1908 杀死进程
#kill -9 1908 彻底杀死进程
6)killall 以名字方式来杀死进程
#killall -9 gdb
7)Ctrl Z 把一个命令从前台送到后台去
COMMAND &:让命令在后台运行
8)jobs 查看后台的所有作业
作业号:不同于进程号
9)bg让后台停止的作业继续运行
10)fg:将后台的作业调用回前台
11)vmstat报告虚拟内存的统计信息
#vmstat 2 每两秒显示一次
#vmstat 2 5 #每二秒显示一次系统内存的统计信息,总共5次
1)gzip:.gz
gzip file:压缩文件,不能是目录,压缩完成后默认删除原文件
-d:解压缩 # gzip -d file.txt.gz
-#:1-9指定压缩比,默认是6
gunzip file.gz:解压缩
zcat file.gz:在不解压缩的情况下,查看文件内容
2)bzip2: .bz2 比gzip有着更大压缩比的压缩工具,压缩文件,不能是目录,压缩完成后默认删除原文件
bzip2 file:压缩文件
-d:解压缩
-#:1-9压缩比,默认是6
-k:压缩式不删除原文件
bunzip2:解压缩
bz cat:可以直接查看
3)xz:.xz压缩比更大(主流)压缩文件,不能是目录,压缩完成后默认删除原文件
xz file: 压缩文件
-d:解压缩文件
-#:1-9 压缩比
-k:保存原文件
unxz file:解压缩
4)zip:.zip 可以压缩目录,既归档又压缩的工具
zip filename.zip file1 file2...:压缩后默认不删除原文件
zip filename.zip directory:压缩目录
5)tar:归档不压缩的工具,默认不删除原文件
-c:创建归档文件
-f filename.tar:操作归档文件
# tar bk.tar *
-x:还原归档
# tar -xf bk.tar
-t:不展开归档,查看tar文件里都有哪些文件
-zcf:归档,并调用gzip压缩
-zxf:调用gzip解压缩,并展开归档
-jtf:不解压缩,可以直接查看里面的文件
# tar -ztf all.tar.gz
-jcf: 归档,并调用bzip2压缩
-jxf: 调用bzip2解压缩,并展开归档
-Jcf:归档,并调用xz压缩
-Jxf:调用xz解压缩,并展开归档
6)cpio归档工具
45、read 从命令行界面读取数据
-p:可以输入提示信息
read -p "Please input two integers:" A B
-t #:可以设置超时时间
[-z $A ] 判断A是否为0
read -t 5 -p "Please input two integers:" A B 同时设置超时的时间为5s
46、echo控制输出
-n:不换行
-e:控制字体
# echo -e "\033[31mhello\033[0m,world" 控制颜色 3 代表前景色
# echo -e "\033[41mhello\033[0m,world" 控制颜色 4 代表背景色
# echo -e "\033[1mhello\033[0m,world" 字体加粗
# echo -e "\033[5;31mhello\033[0m,world" 字体闪烁
47、ifconfig,route 网络配置
1)ifconfig
-a:显示所有接口的配置住处
2)route 路由配置,windows添加路由
print: 显示电脑路由的配置信息
-p: 添加路由,永久有效
route -p add 192.168.0.0 mask 255.255.0.0 192.168.0.1
3)Linux的网络配置文件/etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=关联的设备名称,要与文件名的后半部“INTERFACE_NAME”保持一致
BOOTPROTO={static|none|dhcp|bootp}:引导协议:要使用静态地址,使用static或none:dhcp表示使用DHCP服务器获取地址
IPADDR=IP地址
NETMASK=子网掩码
GATEWAY=设定默认网关
ONBOOT=;开机时是否自动激活此网络接口
HWADDR=硬件地址,要与硬件地址保持一致,否则会出错
USERCTL={yes|no}:是否允许普通用户控制此接口
PEERDNS={yes|no}是否在BOOTPROTO为dhcp时接受由DHCP服务器指定的DSN地址
在添加完成后不会立即生效,但重启网络服务或主机都会生效
48、rpm包安装
1)安装过程
-h:显示进度
-v:显示详细过程
#rpm -ivh file.rpm
-vv:更详细的过程
--nodeps:忽略依赖关系
--force:强行安装,可以实现重装或降级
--replacepkgs:重新安装,替换原有的安装
2)查询
rpm -qa:查询已经安装的所有包
rpm -q rpm_name:根据名字查询安装包是否安装
rpm -qi rpm_name:查询某个安装包的详细信息
# rpm -qi libspectre
rpm -ql rpm_name:查询某个安装包安装之后的文件列表
rpm -qc rpm_name:查询指定安装包的配置文件
rpm -qd rpm_name:查询指定安装包的帮助文件
rpm -q --scripts rpm_name:安装和卸载都有哪些脚本
rpm -qf /path/to/somefile:查询某个文件是由那个rpm安装包安装之后生成的
3)升级
rpm -Uvh /PATH/TO/rpm_name:如果安装有老版本的,则升级,否则,安装
rpm -Fvh /PATH/TO/rpm_name:如果有老版本的则升级,否则,退出
--oldpackage:降级
4)卸载
rpm -e rpm_name:卸载安装包
--nodeps:忽略依赖关系
5)校验
rpm -V rpm_name
6)重建数据库
--rebuliddb 重建数据库,一定会重新建立
--initdb:初始化数据库,没有才建立,有就不建立
49、logrotate 日志滚动
/etc/logrotate.conf 配置文件
#systemctl status rsyslog.service 查看日志服务状态
如果想把A主机的日志记录在另外B上
1、B主机 vim /etc/sysconfig/rsyslog 把 SYSLOGD_OPTIONS=""改为SYSLOGD_OPTIONS="-r"
2、A主机
50、chkconfig检查,设置系统的各种服务
chkconfig --list #列出所有的系统服务
chkconfig --add httpd #增加httpd服务
chkconfig --del httpd #删除httpd服务
chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态
chkconfig --list #列出系统所有的服务启动情况
chkconfig --list mysqld #列出mysqld服务设置情况
chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭
chkconfig mysqld on #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级
51、netstat 显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组
netstat -tnl :显示Linux系统开放的端口
52、Linux故障排除
1)常见的系统故障排除
1、确定问题的故障特征
2、重现故障
3、使用工具收集进一步信息
4、排除不可能的原因
5、定位故障
从简单的问题入手
一次尝试一种方式(备份原文件,尽可能的借助于工具)
2)MBR损坏
1、借用别的主机修复
2、使用紧急救援模式
a、boot.iso
b、使用完整的系统安装光盘
boot:linux rescue
/mnt/sysimage
53、awk报告生成器
1)print item1,item2...
# awk '{print $1 ,$3}' aaa.c
2)分隔符
-F: 输入分隔符
# awk -F: '{print $1,$3}' /etc/passwd
OFS:输出分隔符
# awk '{OFS=":"}{print $1 ,$3}' aaa.c 使用分隔符:
# awk -F: '{OFS="---"}{print $1,$3}' /etc/passwd
54、Ubuntu下开通远程连接22端口
sudo apt-get install openssh-server openssh-client
#service ssh restart
55、gcc 编译
-l:后面跟要连接的库
#gcc connectSqlite3.c -o sqlite -lsqlite3
-L:参数跟着的是库文件所在的目录名
-L/usr/X11R6/lib
#gcc connectSqlite3.c sqlite3.c -o sqlite -ldl -lpthread 用源码进行编译
56、安装chrome
1)打开终端,进入要保存安装包的位置输入:
2)执行
#dpkg -i google-chrome-stable_current_i386.deb
57、size显示一个目标文件或链接库文件各段数据的大小
text:正文大小
data:静态变量,和已经初始化的全局变量的大小
bss:(block started by system)未初始化的全局变量的大小
数据段: 数据段(data segment )通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。
代码段: 代码段(code segment/text segment )通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
堆(heap ): 堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc 等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free 等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)
栈(stack) :栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{} ”中定义的变量(但不包括static 声明的变量,static 意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/ 恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。没有进行过初始化,用的时候,需要用户进行初始胡。
58、PATH的用法
简介:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
当输入指令的时候,会自动在PATH环境变量指定的目录下来来寻找这个可以执行文件。
例如输入ls 命令,会自动寻找到/bin/ls命令来进行执行。
添加一个目录到PATH中去:
1、在/etc/profile文件中添加一行PATH=$PATH:/etc/apache/bin
2、执行source profile(source /etc/profile)
59、od
用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。
- A 指定地址基数,包括:
d 十进制
o 八进制(系统默认值)
x 十六进制
n 不打印位移值
- t 指定数据的显示格式,主要的参数有:
c ASCII字符或反斜杠序列
d 有符号十进制数
f 浮点数
o 八进制(系统默认值为02)
u 无符号十进制数
x 十六进制数
60、ipcs
显示当前系统的 消息队列、共享内存、信号量、远程队列和本地标题的一些具体信息。
61、ulimit -c 1024
在程序异常终止的时候可以产生最大是1024k的core文件
在程序异常终止的时候可以产生最大是1024k的core文件