Linux常见操作命令【二】
一、Vi 编辑器
Vi 编辑器存在三者模式:命令、末行、编辑
1.1 命令模式
输入 vi 默认进入命令模式
输入n或者nG:定位到某一行行首
输入G:跳到文件最后一行行首
输入hjkl:表示左下上右移动光标(方向键也可以)
H:当前屏幕第一行行首
M:屏幕中间行行首
L:屏幕最后一行行首
w:一个单词一个单词移动光标
yy 复制光标所在行
nyy 复制光标所在行及以下共n行
p 粘贴
dd 删除光标所在行
ndd 删除n行
p 粘贴(删除再粘贴相当于剪切)
x 删除单个字符
u 撤销之前操作
ctrl+r 重做(针对误撤销操作,撤销之前的撤销操作)
/ 查找目标字符串 (从上向下) 输入n同向查找下个字符,N反向查找下一个
?查找目标字符串 (从下向上) 输入n同向查找下个字符,N反向查找下一个
用/查找/,要加转义字符“\”----/\/
用?查?,要加转义字符“\”----?\?
1.2 末行模式
命令模式下输入 : 进入末行模式
按2次esc回到命令模式
:set number 显示行号(:set nu也行)
:q 退出
:q! 强制退出
:w 保存
:wq 保存退出
:wq!强制保存退出
:%s/abc/def/g-- 替换,把全文abc替换成def
% 表示替换的范围,整个文件;s表示替换;/是分隔符;g,每行替换所有,如果没有g,每行只替换一次
:%s#abc#def#g 替换 , 也可以用#分隔
:1,5s/abc/def/g-- 替换第1行到第5行
1.3 编辑模式
命令模式下输入 a\i\o 进入编辑模式
a\i\o 光标位置不一样
esc 回到命令模式,再保存退出
编辑模式与末行模式不能直接切换,需先到命令模式
二、用户管理
2.1 cat 获取信息
cat /etc/passwd 账号信息存储位置
cat /etc/shadow 存放用户密码、加密、安全保护
cat /etc/group 存储用户组信息
2.2 su(switch user)切换用户
su 切换root(需要密码)
su root 切换root
su - 切换root
su - root 切换root
su user1 切换user1
su - user 切换user
exit 退回到上一个用户/上一个进程(如果用su,又开启一个新进程,history会不一样)
2.3 用户操作
useradd 添加用户
useradd user1 添加用户user1
useradd -g grop1 user2 在指定的group1组添加用户user2
passwd 给用户指定或修改密码
passwd 修改自己密码
passwd user1 修改user1的密码(root登录)
useramod 修改用户
usermod -l user user1 修改user1为user
usermod -g grop1 user2(-g修改组名group1为user2 )
userdel 删除用户
userdel user1 只删除user1的信息,根目录还在
userdel -rf user1 -r删除user1信息同时删除根目录,f强制删除
2.4 组的操作
groupadd 新增组
groupadd group1 新增group1组
groupmod 修改组
groupmod -n group2 group1 修改组group1为group2
groupdel 删除组
groupdel group2 删除group2
三、权限管理(chmod)
背景知识
- 文件
d 文件夹
l 软链接
b 块设备(内存、硬盘)
c 字符设备(鼠标、键盘)
rwxrwxrwx 权限
第一组rwx:u(user)文件所有者
第二组rwx:g(group)文件所有者所在组
第三组rwx:o(other)本组以外其他用户
a(all):表示这三组皆是,相当于ugo
rwxrw-r–
r:read 可读权限
w:write 可写权限
x:execute可执行权限,可执行文件才有用(shell脚本或命令)
权限的符号形式
+:为指定用户类型增加权限
-:取消指定用户类型的权限
=:表示唯一设定权限
权限的数字形式
二进制表示r:4 w:2 x:1
rwxrwxrwx——777 三组用户拥有全部权限
421421421——777
---------——000 三组用户无任何权限
000000000——000
rw-rw-r--——664 user和group有可读可写权限,other只有可读权限
420420400——664
chmod(change mode)修改权限
chmod u-x test.txt 取消文件test.txt所有者的可执行权限
取消文件test.txt的所有用户的可执行权限
chmod u-x,g-x,o-x test.txt == chmod ugo-x test.txt == chmod a-x test.txt(a=ugo)
chmod a+rwx test.txt 赋予文件test.txt所有用户的可读、可写、可执行权限
chmod 000 test.txt 所有用户无任何权限
chomd 644 test.txt user和group有可读可写权限,other只有可读权限
chomd 777 test.txt 所有用户拥有全部权限
chmod -R 755 test 用于文件夹,子目录和文件都赋同样权限
chown(change owner修改所有者和组)— 需要root权限
chown root 1.txt 修改1.txt所有者为root
chown :root 1.txt 修改1.txt的组为root
chown root:root 1.txt 修改1.txt所有者和组为root
chown -R root:root 1.txt 修改目录及里面的子目录和文件的所有者和组为root
chgrp(修改文件的组)— 需要root权限
chgrp root 1.txt 修改文件1.txt的组
chgrp -R hll /home/user1 修改目录及里面的子目录和文件的组
四、文件统计
4.1 wc(word count)
wc test.sh 统计文件里行数、单词数、字节数(英文字符占一个字节,汉字占两个字节)
wc -l test.sh 统计文件有多少行数
wc -w test.sh 统计文件单词数(以空格分隔)
wc -c test.sh 统计文件字节数(统计英文)
wc -m test.sh 统计文件字数(一般用来统计汉字数)
wc *.txt 统计多个文件
4.2 sort 排序
sort 1.txt 2.txt 把此两个文件内容拼在一起,然后对内容进行排序(第一列排,先数字,然后字母,最后汉字)
sort -r 1.txt 2.txt 将这两个文件内容拼在一起,对内容进行倒序排列
sort -u 1.txt 对文件进行排序并去除重复的行
sort -k 5 1.txt 2.txt 指定从第5列首字符排(默认按第一列排,以空格或制表符(\t)分隔)
sort -n -k 5 1.txt(-nk 5同理)-n(number)按照数字大小排序(否则默认当字符串)
4.3 diff(different)
diff 1.txt 2.txt 按行比较2个文件不同地方,显示出来;没有不同不显示
diff -c 1.txt 2.txt 显示全部内容,并标出不同之处
diff -u 1.txt 2.txt 以合并的方式显示文件内容的不同
4.4 ln(link)
ln -s src lnfile 创建软链接---相当于快捷方式
ln -s 1.txt ln1====cp -s 1.txt ln1
ln src lnfile 创建硬链接(复制文件本身,任意修改源文件src或硬链接lnfile其中一个,2个同步变化)
如果删除src,硬链接无变化,软链接变红
4.5 find 查找文件
find -name d 查找当前目录及子目录下所有d文件或文件夹
find -name ‘*d*' 模糊查找带d的文件或文件夹(*通配符,代表0-N个字符,必须用单引号或双引号)
find -user hll 按属主查找 --不支持模糊匹配
find -group root 按组查找 --不支持模糊匹配
find /hoem/hll -name 1.txt 按文件名查找
find /etc -perm 777 按权限查找(permission)
find -type f 按文件类型查找(f是文件,跟ll那里不一样)
find -size 3M 按大小查找,区间2-3M之间的文件(k\M\G)
find -size 3k 查找区间在2-3k之间的文件
find -size +3k 查找大于3k的文件
find -size -3k 查找小于3k的文件
不能写小数,1.8k应该写2k
find -atime 上次访问时间acess
find -mtime 上次的修改时间modify,ll看到的是修改时间
find -ctime 上次修改的文件权限、属主信息的更新时间,control
find -mtime 5 前第5天,指5-6这段时间----0-1是第0天
find -mtime +5 (6天以上的)
find -mtime -5 5天以内的)
表示0-24小时 mtime 0 或者mtime -1
一周以上(7x24h) mtime +6
4.6 多条件组合
-a:and 两个条件同时满足(可省略)
-o:or 满足一个条件即可
-not:非,查找不符合条件的
find -name "*txt" -not -user hll 查找
find -not type f 查找类型不是文件的
4.7 exec查找并执行命令
find -name 1.txt -exec rm-rf {} \; {}表示查找的结果。注意{}后面有空格,\;固定格式
find -name '*.txt' -exec ls -l {} \; 注意:exec后面命令不能用别名,比如ll。(还有shell脚本里别名也不认识)
find -name 1.txt -exec rm-rf {} \;
find -name 1.txt -delete
find -name 'l*txt’ | xargs rm -rf
xargs 是给命令传递参数的一个过滤器,可以将管道或标准输入的数据转换成参数
4.8 grep 快速定位要找的字符串
grep wc * 查找所有文件(*)中的wc字符串
grep -c wc * 统计每个文件中wc字符串的个数
-c(count)以文件为单位,统计目标字符串出现的次数
grep -r hello ll * 查找当前和子目录下的所有目标字符串
grep -i Hello * 不区分大小写
grep -n 增加显示目标字符串所在行号
grep -s 不显示错误信息
find 查找的是文件或目录;grep查找的是字符、文件内容
4.9 快捷命令
which 显示命令全路径(从path中查找可执行文件所在路径)
有的命令既是内部命令又是外部命令,如cd
whereis 除了查找可执行程序位置,还查找帮助手册、库文件等
locate 从数据库查找文件,速度比find快(从硬盘一个个查找),但是只能按文件名查找,且已更新
locate hll.txt
whoami 显示当前登录账号
w 显示本机所有登录信息
五、打包压缩
5.1 tar 打包(参数前的-可省略)
参数解释
-c 打包
-x 解包
-v 显示打包的过程
-f 文件
-z 压缩
tar -cvf test.tar *.txt 把当前目录下所有txt打包成tar包
tar cvf aa.tar ./aa 可用打包目录
tar -xvf test.tar 解包
tar -czvf test.tar.gz *.txt 打包并压缩
把当前目录下所有txt打包成tar包,并且压缩成gz包(相当于先tar打包再gzip压缩两步)
tar -xzvf test.tar.gz 解包并解压
tar -xzvf test.tar.gz -C /home/hll -C指定解压目录
5.2 gzip 压缩(压缩之后会删除源文件)
gizp 1.txt 压缩后变成1.txt.gz
gzip 1.txt 2.txt 3.txt 压缩几个文件,生成几个文件
5.3 gunzip 解压(解压之后会删除源文件)
gunizp 1.txt .gz
当进行压缩操作时,指的是普通文件(不能是目录);当进行解压缩操作时,指的是压缩文件
5.4 zip&unzip 压缩
zip 压缩(压完源文件仍在,而且要加压缩后的文件名)
zip ll.zip ll.txt 将ll.txt压缩为ll.zip
unzip ll.zip 解压缩ll.zip