linux之shell常用命令介绍
一、cd 切换目录
cd /etc 切换到/etc目录下 cd ~ 切换到主目录下
cd .. 返回上级目录 cd ../.. 返回上两级目录
cd - 返回进入此目录之前所在的目录
二、echo 输出
echo "this is a test!" 显示普通字符串:
echo -e "\n" 输出一行空行,-e 开启转义
echo `date` 显示命令执行结果
三、chmod 授予使用权限
chmod abc file 基本格式
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限,权限可分为:r=4 表示可读取,w=2 表示可写入,x=1 表示可执行。
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r--属性则为4。
四、cat 查看文件
1)打印文件内容:
cat cat1.txt 打印单个文件内容
cat cat1.txt cat2.txt 打印多个文件内容,将文件内容拼接在一起
echo "Test" | cat - cat1.txt 将标准输入和文件内容拼接在一起
在上面的代码中 - 被作为stdin文本的文件名
2)打印文件内容时常用参数:
cat -n cat3.txt 打印文件内容及行号,会为空白行加上行号
cat -b cat3.txt 打印文件内容及行号,跳过空白行
cat -s cat3.txt 压缩相邻的空白行
3)从键盘创建一个文件:
cat > cat4.txt 只能创建新文件,不能编辑已有文件
4)将几个文件合并为一个文件:
cat cat1.txt cat2.txt cat3.txt > cat5.txt
五、sed 文本编辑文本
1)局部替换:
sed 's/world/sed/' sed1.txt
仅替换每行的第一个匹配者,不会修改源文件
sed 's/world/sed/2' sed1.txt
替换每行的第2个匹配者
2)全局替换:
sed 's/world/sed/g' sed1.txt
替换文件中的所有匹配者
3)替换的字符串使用正则表达式:
sed 's/^hello.*/sed/g' sed1.txt
4)分界符/可以替换成# ; *等字符
sed 's*world*sed*g' sed1.txt
5)删除字符:
sed '/^$/d' sed1.txt 删除sed1.txt中的空行
6)如果操作的字符串中包含变量,要将变量再次用单引号引起来:
b="sed"
sed 's/world/'$b'' sed1.txt
否则变量名直接当做字符串处理
7)直接操作源文件:
sed -i 's/world/sed/' sed1.txt
8)一次性替换多个:
sed -e 's/hello/this is/g' -e 's/sed/the sed/g' sed1.txt
9)替换动作包含在文件中:
vim ./test.sed
s/hello/this is/g
s/sed/the sed/g
sed -f test.sed sed1.txt > sed2.txt --保存在新的文件中
sed -i -f test.sed sed1.txt --直接作用在源文件中
六、read 接受键盘数据和读取文件
1)read接受从键盘的输入:
read -p "Enter your name: " name
echo "Hello $name"
如果不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中:
read -p "How old are you? "
echo "I'm $REPLY"
2)接受多个数据:
read -p "Enter your name and age: " name age
echo "My name is $name, and I'm $age."
3)计时输入:
read -t 3 -p "Enter your name: " name
4)默读:
read -s -p "Enter your password: " password
echo "Your password is $ password "
输入的密码不会显示在屏幕上。
5)读文件:
vim ./test.txt
first
second
third
vim ./read4.sh
cat -n test.txt | while read line
do
echo $line
done
七、awk 高级文本处理
1)基本结构介绍:
awk 'BEGIN{ commands } { commands } END{commands }' file
awk命令也可以从stdin中读取:
echo | awk 'BEGIN{ commands } { commands } END{ commands }'
awk脚本通常由3部分组成:BEGIN,语句块,EDN,3部分都是可选项,在脚本中可省略任意部分。
其中BEGIN和END关键字必须大写,awk的脚本内容要包含在单引号或者双引号内,awk脚本使用print输出。
所有的commands之间用分号隔开。
2)awk工作原理:
(1)执行BEGIN{ commands }语句
(2)从文件或者stdin中读取一行,然后执行{ commands },重复这个过程,直到文件全部读取完毕
(3)当读至输入流末尾时,执行END{ commands }中的语句
3)从文件中读取行:
awk 'BEGIN{ print "start" } { print } END{ print "end" }' awk1.txt
语句块中使用不带参数的print时,它会打印从stdin或者文件中读取到的当前行。
4)从标准输入中读取行:
echo -e "line1\nline2" | awk 'BEGIN{ print "start" } { print } END{ print "end" }'
5)省略BEGIN:
awk '{ print } END{ print "end" }' awk1.txt
6)再省略END:
awk '{ print }' awk1.txt
7)省略语句块:
awk 'BEGIN{ print "start" } END{ print "end" }' awk1.txt
8)语句块工作原理:
从文件或者标准输入读入有'\n'换行符分割的一条记录,然后将该条记录 按指定的分隔符划分字段,$0则表示该条记录所有字段,$1表示该条记录第一个字段,$n表示该条记录第n个字段。默认分隔符是"空白键" 或 "[tab]键"。
9)其它一些特殊变量:
NR:表示记录数量,在执行过程中对应于当前行号。
NF:表示字段数量,在执行过程中对应于当前的字段数。
举例:
awk '{ print $0 }' awk2.txt --打印全部的文本内容
awk '{ print NR,NF,$3 }' awk2.txt --打印每行第3列的文本内容
awk 'END{ print NR }' awk2.txt --统计文件中的行数
awk 'END{ print NF }' awk2.txt --统计文件中的列数
awk -F ';' '{ print $2 }' awk3.txt --输出第二个字段
八、ssh linux之间远程登录
ssh remote_username@remote_ip 终端远程登录到目标机器
ssh remote_username@remote_ip "command; command;…"
远程登录目标机器执行各种shell命令,命令之间用分号隔开
九、scp Linux之间复制文件和目录
1、从本地复制到远程
scp -r local_folder remote_username@remote_ip:remote_folder
scp -r local_folder remote_ip:remote_folder
2、从远程复制到本地
scp -r remote_username@remote_ip:remote_folder local_folder
十、重定向
command > filename ">" 表示标准输出到filename中,如果文件不存在,则创建文件,已存在,则覆盖文件中原有的内容
command >> filename ">>" 表示标准输出到filename中,如果文件不存在,则创建文件,已存在,追加到原有文件的后面
command >> filename 2>&1 “2>&1”是将错误输出重定向到标准输出,这里的标准输出已经重定向到了filename ,即将错误输出也重定向到filename文件中
十一、rm 删除文件和目录
1)删除文件:
rm rm1.txt 删除rm1.txt
rm rm2.txt rm3.txt 依次删除指定的两个文件
2)删除目录:
rm -r dir1 通过-r参数删除目录
注意:上面方法删除文件或目录都会询问用户是否删除,如果想直接删除,通过指定参数-f
rm -f rm4.txt 直接删除文件rm4.txt
rm -rf dir2 直接删除目录dir2
3)显示执行过程信息:
rm -vf rm5.txt 直接删除文件rm5.txt ,并显示执行过程信息
rm -vrf dir3 直接删除dir3目录,并显示执行过程信息
4)使用正则表达式:
rm -vf *.log 删除当前目录下的所有.log文件
rm -vrf *rm* 删除所有名字中包含rm字符的文件和目录
十二、cp 复制文件和目录
1)复制文件:
cp cp1.txt cp2.txt 当前目录下复制文件
\cp cp1.txt cp2.txt 当目标文件已存在,通过\cp强制复制
cp cp1.txt /root/cp2.txt 跨目录复制文件
2)复制文件、目录到新的目录(新的目录必须已经存在):
cp cp1.txt dir1 复制一个文件到目录dir1中
cp cp1.log cp2.txt dir1 复制多个文件到目录dir1下
cp -r dir2 dir1 复制目录dir2到目录dir1中
3)使用正则表达式
cp *.log dir3 把当前目录下所有的.log文件复制到dir3目录下
cp -r dir1/ * dir3 复制dir1下的所有文件以及目录到dir3中
4)常用参数:
cp -v cp1.txt cp3.txt 显示执行过程信息
cp -i cp1.txt cp3.txt 如果目标文件已存在,复制前先询问用户
十三、free 检查内存的使用情况:
-b 、 -k 、 -m 以Byte、 KB、 MB为单位显示内存使用情况
-s<间隔秒数> 持续观察内存使用状况
十四、mkdir 创建目录
mkdir dir 仅可创建普通的不含有子目录的目录
mkdir -p dir /dir1 可创建含有子目录的目录
注意:指定的目录名不能是当前目录中已有的目录
十五、let 对变量进行数值计算
a=1 let "a+1" echo &a 输出结果为2
十六、ls 列出目标目录中所有的子目录和文件
ls /root 列出/root目录下的内容
也可以先cd命令进入到/root目录下,然后执行ls:
cd /root
ls -lh #列出文件详细信息,文件大小以KB为单位,每行只列出一个文件信息
十七、df 检查文件系统的磁盘空间占用情况
df -h 根据目前磁盘空间的使用情况 以更易读的方式显示
十八、mv 文件和目录重命名、移动
1)文件、目录重命名:
mv mv.txt new_mv.txt 文件重命名
mv dir new_dir 目录重命名
2)移动文件到目录中(目标目录必须已经存在):
mv new_mv.txt mv.log dir1 移动当前目录下多个文件到dir1中
mv dir1/new_mv.txt dir2 移动dir1目录下的new_mv.txt到dir2中
3)移动目录到新的目录中(新目录必须已存在):
mv dir1 dir2 将dir1移动到dir2中
4)使用正则表达式
mv dir2/*.txt dir3 把dir1里的所有.txt文件移动到dir3
5)常用参数 :
mv -f dir3/new_mv.txt dir 当dir下已存在该文件时,直接强制覆盖
mv log1.txt -b log2.txt 先对log2.txt备份(名字为log2.txt~)再覆盖
mv -t dir2 log1.txt log2.txt 移动多个文件到dir2中,目标目录在前
十九、tr 字符操作(替换、删除、压缩等)
1)字符转换(替换):
echo "TEST" | tr 'A-Z' 'a-z'
echo "abc adf" | tr 'abc' 'xyz'
这里是将"a"替换成"x","b"替换成"y","c"替换成"z",而不是将整个字符串"abc"替换成"xyz"
2)删除字符:
cat cat_tr.txt | tr -d '0-9'
3)压缩字符
echo "tesssssssst" | tr -s 's'
4)摒除多余的空行:
cat cat_tr.txt | tr -s '\n'
tr将多余的"\n"字符合并为单一的"\n"
二十、find 查找文件
1)基本格式:
find path -option [-print] [-exec -ok command] {} \;
-print 将查找到的文件输出到标准输出
-exec command {} \; 对查到的文件执行command操作
-ok 和-exec相同,只不过在操作前要询用户
2)常用的命令选项:
-name 按照文件名查找文件
-perm 按照文件权限来查找文件
-user 按照文件所属用户来查找文件
-group 按照文件所属的组来查找文件
-size 按照文件大小来查找文件
-type 查找某一类型的文件,诸如:b 块设备文件;d 目录;
c 字符设备文件;p 管道文件;l 符号链接文件;f 普通文件
-empty 查找空白文件、没有子目录的文件夹
3)举例:
find /root/linux-shell/find -name '*.txt' --指定查找路径
find ./ -name '*dir1' --查找当前目录下名字为dir1的文件或者目录
find ./ -name '*dir1' -type d --查找名字为dir1的目录
find ./ -name '*dir1' -type f --查找名字为dir1的普通文件
find ./ -perm 777 --按照文件权限查找文件或者目录
find . -user oscar --查找所属用户为oscar的文件或者目录
find . -group oscar --查找所属组为oscar的文件或者目录
find . -size +50k --查找大于50k的文件
find . -size +50k -size -100k --查找大于50k小于100k的文件
find . -empty --查找空白文件或者空文件夹
find . -name '*.log' -exec cat {} \; --查找文件并查看文件内容
find . -name '*.log' -exec cp {} new_find.log \; --查找文件并复制
二十一、sar 系统性能分析工具之一
sar是一个Linux系统性能分析工具之一,基本格式:
sar [options] [t] [n]
t为采样间隔,n为采样次数,默认值是1
常用options:
-u:输出CPU使用情况的统计信息
-r:输出内存和交换空间的统计信息
-b:输出I/O和传输速率的统计信息
-d:输出每一个块设备的活动信息
-x:进程ID
sar -u 2 3 每2秒采样一次,连续采样3次,监控CPU 的使用情况
sar -r 2 3 每2秒采样一次,连续采样3次,监控内存和交换空间使用情况
sar -b 2 3 每2秒采样一次,连续采样3次,监控缓冲区的使用情况
sar -d 2 3 每2秒采样一次,连续采样3次,监控设备使用情况
sar -u 2 3 -x pid 每2秒采样一次,连续采样3次,监控pid的CPU 的使用情况
二十二、ps静态的结果输出某个时间点的程序运作情况
ps aux
ps -ef
两个命令均能查看目前所有正在内存当中的程序,不同点,第一个还包含程序的cpu、内存使用率。
ps -ef | grep oscar 查看含有oscar字符串的进程的使用情况
二十三、top动态输出程序的变化
1)top命令举例:
top -b -n 2 > /tmp/top.txt
top 批次的方式更新2次,并将结果信息存到 /tmp/top.txt文件中
top -d 3 -n 3 -p pid
每间隔三秒监控一次进程号为pid的进程使用情况,共更新3次
2)在 top 执行过程当中常用的按键指令:
P :以 CPU 的使用资源排序显示
M:以 Memory 的使用资源排序显示
N :以 PID 来排序