linux小知识点记录

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] 亦即是退格键) (常用)
nxn 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd删除游标所在的那一整行(常用)
nddn 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G删除光标所在到第一行的所有数据
dG删除光标所在到最后一行的所有数据
d$删除游标所在处,到该行的最后一个字符
d0那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy复制游标所在的那一行(常用)
nyyn 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G复制游标所在行到第一行的所有数据
yG复制游标所在行到最后一行的所有数据
y0复制光标所在的那个字符到该行行首的所有数据
y$复制光标所在的那个字符到该行行尾的所有数据
p, Pp 为将已复制的数据在光标下一行贴上,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

  1. 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  2. 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. 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:stringvarvar{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:=stringvarstring{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:?stringvarvar{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命令用于建立或修改备存文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值