Linux使用技巧总结
太难了,离公司的销售经理和负责订单的同事坐的不远,每个人脾气都有点火爆啊,看他们沟通基本靠哄,推项目基本靠喊,我不知道会不会变成那样的人。记得一句话,你很难去改变一个成年人的想法,我之前觉得这句话不对,认为善于听取建议和自省是很普遍的事,现在沟通的多了和听闻的多了才发现,大部分人工作只是为了一口饭吃,并没有知道自己要干什么,做什么,所以对别人的期待就是一种奢望,提高自己才是关键。
扯远了,心情不好,写一下唠叨一下,下面记录一下不常用的linux知识点,免得以后再去寻找
目录
格式化磁盘
fdisk -l 或者 df -T 查看挂载情况
book@www.100ask.org:~/JINGSHI/other$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
udev devtmpfs 4041564 0 4041564 0% /dev
tmpfs tmpfs 814468 9496 804972 2% /run
/dev/sda1 ext4 102049120 28514556 68327732 30% /
tmpfs tmpfs 4072336 216 4072120 1% /dev/shm
tmpfs tmpfs 5120 4 5116 1% /run/lock
tmpfs tmpfs 4072336 0 4072336 0% /sys/fs/cgroup
/dev/sdb1 ext4 309505024 2804500 290955552 1% /work
tmpfs tmpfs 814468 64 814404 1% /run/user/1000
/dev/sdc2 vfat 7218044 1136 7216908 1% /media/book/nicetwo
/dev/sdc1 vfat 15251384 1152 15250232 1% /media/book/94E0-55FC
/dev/sdc3 ext4 7776928 18796 7340036 1% /media/book/cfc16e7c-a
如图所示我的就是 /dev/sdc1, /dev/sdc2, /dev/sdc3 这三个分区
先umount /dev/sdc1,2,3
然后 fdisk /dev/sdc
book@www.100ask.org:~/JINGSHI/other$ sudo fdisk /dev/sdc
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help):
d是删除 p是删除 n是新建 w是保存
sudo mkfs.vfat -F 32 /dev/xxx
sudo mkfs.ext4 /dev/xxx
uboot命令
print printenv 输出配置信息
setenv name vlaue 设置参数值
mm mw md 修改内存值(地址自动加一) 用指定的数据填充内存 显示内存值
压缩解压
zip 文件
zip -r xxxx.zip filename
unzip filename.zip
tar.gz 文件
tar -cf filename.tar.gz . 压缩
tar -xf filename.tar.gz 解压
bzip2 文件
tar -cjf filename.tar.bz2 .
tar -xjf filename.tar.bz2
rar 文件
rar a all *.jpg
unrar e all.rar
tar参数定义
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
文件属性
r:4
w:2
x:1
chmod 777 filename
file_type/owner/group/others
当为 d 则是目录
当为 - 则是文件;
若是 l 则表示为链接文档(link file);
若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
磁盘管理
df:列出文件系统的整体磁盘使用量
du:检查磁盘空间使用量
fdisk:用于磁盘分区
mkfs -t ext3 /dev/hdc6
mount src dst
umount dst
文件编辑小技巧
vim
查找 /word
替换 :n1,n2/word1/word2/g 从n1行到n2hang 开始,用word2替换word1
nx 10x 删除后面几个字符,X向前
命令 | 说明 |
---|---|
x, X | 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用) |
nx | n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。 |
dd | 删除游标所在的那一整行(常用) |
ndd | n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用) |
d1G | 删除光标所在到第一行的所有数据 |
dG | 删除光标所在到最后一行的所有数据 |
d$ | 删除游标所在处,到该行的最后一个字符 |
d0 | 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 |
yy | 复制游标所在的那一行(常用) |
nyy | n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用) |
y1G | 复制游标所在行到第一行的所有数据 |
yG | 复制游标所在行到最后一行的所有数据 |
y0 | 复制光标所在的那个字符到该行行首的所有数据 |
y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
p, P | p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用) |
J | 将光标所在行与下一行的数据结合成同一行 |
c | 重复删除多个数据,例如向下删除 10 行,[ 10cj ] |
u | 复原前一个动作。(常用) |
[Ctrl]+r | 重做上一个动作。(常用) |
set nu | 显示行号,设定之后,会在每一行的前缀显示该行的行号 |
:set nonu | 与 set nu 相反,为取消行号! |
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!
. 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)
批量注释。
使用下面命令在指定的行首添加注释。
使用名命令格式: :起始行号,结束行号s/^/注释符/g(注意冒号)
取消注释:
使用名命令格式: :起始行号,结束行号s/^注释符//g(注意冒号)
1、在 10 - 20 行添加 // 注释
:10,20s#^#//#g
2、在 10 - 20 行删除 // 注释
:10,20s#^//##g
3、在 10 - 20 行添加 # 注释
:10,20s/^/#/g
4、在 10 - 20 行删除 # 注释
:10,20s/#//g
shell script
变量
变量名和等号之间不能有空格,命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
使用时加美元符号,为养成好习惯,最好加上大括号,${},用来确定边界
只读变量 readonly variable_name
删除变量 unset variable_name
- 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
字符串
字符串可以用单引号,也可以用双引号,也可以不用引号
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !
数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小,0开始
赋值方式
array_name=(value0 value1 value2 value3)
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
读取值
${数组名[下标]}
使用 @ 符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}
长度
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
传递参数
$0 $1 $2 0是函数名本身,$1是第一个参数
参数 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与 ∗ 相 同 , 但 是 使 用 时 加 引 号 , 并 在 引 号 中 返 回 每 个 参 数 。 如 " *相同,但是使用时加引号,并在引号中返回每个参数。如" ∗相同,但是使用时加引号,并在引号中返回每个参数。如"@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
基本运算符
算数运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用
#!/bin/bash
#(注意使用的是反引号 ` 而不是单引号 ')
val=`expr 2 + 2`
echo "两数之和为 : $val"
表达式和运算符之间要有空格 , 只有* 需要加上 \ ,进行转义
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
符号 | 说明 |
---|---|
eq | 检测两个数是否相等,相等返回 true。 |
-ne | 检测两个数是否不相等,不相等返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 |
布尔运算符
符号 | 说明 |
---|---|
! | 非运算,表达式为 true 则返回 false,否则返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 |
逻辑运算符
符号 | 说明 |
---|---|
&& | 逻辑的 AND |
|| | 逻辑的 OR |
字符串运算符
符号 | 说明 |
---|---|
= | 检测两个字符串是否相等,相等返回 true。 |
!= | 检测两个字符串是否不相等,不相等返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 |
-n | 检测字符串长度是否不为 0,不为 0 返回 true。 |
$ | 检测字符串是否为空,不为空返回 true。 |
文件测试运算符
符号 | 说明 |
---|---|
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 |
-d file | 检测文件是否是目录,如果是,则返回 true。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 |
-p file | 检测文件是否是有名管道,如果是,则返回 true。 |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 |
-r file | 检测文件是否可读,如果是,则返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 |
-x file | 检测文件是否可执行,如果是,则返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 |
SUID 是 Set User ID, SGID 是 Set Group ID的意思。
echo printf
显示转义字符 显示变量 显示换行 显示结果定向至文件 显示命令执行结果
read name
echo "$name It is a test"
echo -e "OK! \n" # -e 开启转义
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test" > myfile
echo `date`
#这里使用的是反引号 `, 而不是单引号 '
printf "Hello, Shell\n"
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
流程控制
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
for((i=1;i<=5;i++));do
echo "这是第 $i 次调用";
done;
while condition
do
command
done
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
Shell 函数
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
Shell 输入/输出重定向
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写
$ command > file 2>&1
或者
$ command >> file 2>&1
文件包含
. filename # 注意点号(.)和文件名中间有一空格
或
source filename
不同括号的使用
单小括号 ()
命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格
双小括号 (( ))
整数扩展,表达式的结果为0,那么返回的退出状态码为1,非零值的表达式所返回的退出状态码将为0,逻辑判断,表达式exp为真则为1,假则为0
单中括号 []
Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式
双中括号[[ ]]
[[是 bash 程序语言的关键字,支持字符串的模式匹配,能够防止脚本中的许多逻辑错误
大括号、花括号 {}
大括号拓展
${var:-string},${var:+string},${var:=string},${var:?string}
① v a r : − s t r i n g 和 {var:-string}和 var:−string和{var:=string}:若变量var为空,则用在命令行中用string来替换 v a r : − s t r i n g , 否 则 变 量 v a r 不 为 空 时 , 则 用 变 量 v a r 的 值 来 替 换 {var:-string},否则变量var不为空时,则用变量var的值来替换 var:−string,否则变量var不为空时,则用变量var的值来替换{var:-string};对于 v a r : = s t r i n g 的 替 换 规 则 和 {var:=string}的替换规则和 var:=string的替换规则和{var:-string}是一样的,所不同之处是 v a r : = s t r i n g 若 v a r 为 空 时 , 用 s t r i n g 替 换 {var:=string}若var为空时,用string替换 var:=string若var为空时,用string替换{var:=string}的同时,把string赋给变量var: ${var:=string}很常用的一种用法是,判断某个变量是否赋值,没有的话则给它赋上一个默认值。
② ${var:+string}的替换规则和上面的相反,即只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量 var的值,即空值。(因为变量var此时为空,所以这两种说法是等价的)
③ v a r : ? s t r i n g 替 换 规 则 为 : 若 变 量 v a r 不 为 空 , 则 用 变 量 v a r 的 值 来 替 换 {var:?string}替换规则为:若变量var不为空,则用变量var的值来替换 var:?string替换规则为:若变量var不为空,则用变量var的值来替换{var:?string};若变量var为空,则把string输出到标准错误中,并从脚本中退出。我们可利用此特性来检查是否设置了变量的值。
其他
管道
有点难
不常用命令
chattr 改变文件属性
chattr +i /etc/resolv.conf 防止系统中某个关键文件被修改
chattr +a /var/log/messages 让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件
chgrp -v bin log2012.log 改变文件的群组属性
chown runoob:runoobgroup file1.txt 将文件file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup
cksum testfile1 检查文件的CRC是否正确
cmp prog.o.bak prog.o cmp命令用于比较两个文件是否有差异
diff log2014.log log2013.log -y -W 50 比较文件的差异
diff test1 test2 | diffstat 显示统计数字
gitview命令用于观看文件的内容,它会同时显示十六进制和ASCII格式的字码
cut命令用于显示每行从开头算起 num1 到 num2 的文字
paste 命令用于合并文件的列。
patch -p0 testfile1 testfile.patch 用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行 这也是Linux系统核心
split命令用于将一个文件分割成数个 split -6 README #将README文件每六行分割成一个文件
命令用于滤掉指定的行 colrm 4 6
comm 命令用于比较两个已排过序的文件
csplit命令用于分割文件 csplit testfile 2第 2 行为分界点切割成两份
fold命令用于限制文件列宽 fold -w 30 testfile
join命令用于将两个文件中,指定栏位内容相同的行连接起来,再输出到标准输出设备
look命令用于查询单词 look L testfile
ispell命令用于拼写检查程序 ispell testfile
sed 命令是利用脚本来处理文本文件 sed -i ‘s/.$/!/g’ regular_express.txt
expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串
uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用
wc命令用于计算字数。-c或–bytes或–chars 只显示Bytes数 -l或–lines 显示行数。-w或–words 只显示字数。
let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。
在ftp模式下,输入bye即可中断目前的连线作业,并结束ftp的执行
du (英文全拼:disk usage)命令用于显示目录或文件的大小。
stat 命令用于显示 inode 内容
inode包含很多的文件元信息,但不包含文件名,例如:字节数、属主UserID、属组GroupID、读写执行权限、时间戳等。
而文件名存放在目录当中,但Linux系统内部不使用文件名,而是使用inode号码识别文件。对于系统来说文件名只是inode号码便于识别的别称
表面上,用户通过文件名打开文件,实际上,系统内部将这个过程分为三步:
1.系统找到这个文件名对应的inode号码;
2.通过inode号码,获取inode信息;
3.根据inode信息,找到文件数据所在的block,并读出数据。
useradd 命令用于建立用户帐号
userdel命令用于删除用户帐号。
sermod命令用于修改用户帐号
date命令可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式
su swith user
alias命令用于设置指令的别名
dmesg命令用于显示开机信息。
若要执行的文件名称与shell内建指令相同,可用enable -n来关闭shell内建指令。若不加-n参数,enable可重新启动关闭的指令
ulimit为shell内建指令,可用来控制shell执行程序的资源
ar命令用于建立或修改备存文件