天天看点

Linux基本操作命令整理

1.tar命令

功能 描述
-A 将一个tar归档文件追加到另一个已有tar归档文件
-c 创建一个新的tar归档文件
-r 追加文件到已由tar归档文件的末尾
-t 列出已有tar归档文件的内容
-u 将比tar归档文件中已有的同名文件新的文件追加到该tar归档文件
-x 从已有tar归档文件中提取文件
选项 描述
-C dir 切换到指定目录
-f file 输出结果到文件或设备
-j 将输出重定向给bzip2命令来压缩内容
-p 保留所有文件权限
-v 在处理文件时显示文件
-z 将输出重定向给gzip命令来压缩内容

2.Linux目录

路径 描述
/ 虚拟目录根目录
/bin 二进制文件目录,存放用户级的GUN工具
/boot 启动目录,存放启动文件
/dev 设备目录,Linux在此创建设备节点
/etc 系统配置文件目录
/home 主目录,Linux在此创建用户目录
/lib 库目录,存放系统和应用程序的库文件
/media 媒体目录,可移动媒体设备的常用挂载点
/mnt 挂载目录,可移动设备的常用挂载点
/opt 可选目录,常用于存放第三方软件包和数据文件
/proc 进程目录,存放现有硬件及当前进程的信息
/root root用户的主目录
/sbin 系统二进制目录,存放GUN管理员级工具
/run 运行目录,存放系统运行时的运行时数据
/srv 服务目录,存放本地服务的相关文件
/sys 系统目录,存放系统硬件信息的相关文件
/tmp 临时目录,可以在该目录中创建和删除临时工作文件
/usr 用户二进制目录,存放用户级GUN工具和数据文件
/var 可变目录,用于存储经常变化的文件,如日志文件

3.vim编辑器操作

两种操作模式:普通模式 、插入模式(按   i  键进入)。按ESC键即可退出插入模式,回到普通模式
           

【普通模式】下,编辑数据命令:

命令 描述
x 删除当前光标所在位置的字符
dd 删除当前光标所在的行
dw 删除当前光标所在位置的单词
d$ 删除当前光标所在位置至行尾的内容
J 删除当前光标所在行行尾的换行符(拼接行)
u 撤销前一编辑命令
a 在当前光标后追加数据
A 在当前光标所在行行尾追击数据
r char 用char替换当前光标所在位置的当个字符
R char 用text覆盖当前光标所在位置的数据,直到按下ESC键

普通模式下,复制与粘贴操作:

命令 描述
p 将文本插入到光标所在行之后(粘贴)
yw 复制一个单词
y$ 复制到行尾
v 按下v键进入可视模式,移动光标时高亮显示文本
y 激活复制命令(复制)

【普通模式】下,按 冒号(:)键进入命令行模式,在该模式有一下命令,可以讲缓存区的数据保存到文件并退出vim:

命令 描述
q 如果未修改缓存区的数据,退出
q! 取消所有对缓存区数据的修改并退出
w filename 将缓存区数据保存到另一个文件
wq 将缓存区数据保存到文件并退出

在【命令行模式】下,查找与替换:

按下 / 键,输入要查找的内容;
继续查找同一内容,按下 / 键,然后按回车键,使用 n 键,表示下一个

替换命令格式:(编辑器会跳到old第一次出现的地方,用new来替换)
	:s/old/new/
           
举例 描述
: s/old/new/g 替换一行中所有的old
:n,ms/old/new/g 替换行号n和m之间的所有old
:%s/old/new/g 替换整个文件中所有的old
:%s/old/new/gc 替换整个文件中的所有old,但在每次出现时提示

4.搜索数据(grep)

命令行格式:grep [option] pattern [file]
           
选项 描述
-v 进行反向搜索(输出不匹配该模式的行)
-n 显示匹配模式的行所在的行号
-C 只需知道有多少行含有匹配模式
-e 如果要指定多个匹配模式,可用此选项来指定每一个模式
eg:$ grep -e t -e f file1      #输出含有字符t或f的所有行
	
	用正则表达式方式为:$ grep [tf] file1 #输出含有字符t或f的所有行

附加:
	ls -lR | grep '^-' | wc -l   # 文件夹套文件夹时,查找文件夹下文件个数
	ls -l | grep '^-' | wc -l    # 单个文件夹时,查找文件夹下文件个数
           

5.查看文件内容命令

5.1 查看文件类型命令
file命令可查看文件是什么类型
           
5.2 查看整个文件命令

1)cat 命令

选项 描述
-n 给所有的行加上行号
-b 只给有文本的行加上行号
-T 不显示制表符(用 ^I 字符替换制表符)

2)more 命令,显示每页数据之后停下,逐行浏览,按q 键退出。

从第 n 行开始显示,命令为:$ more +n /etc/local.log
           

3)less 命令,支持上下滚动查看内容

5.3 查看部分文件命令

1)tail 命令

显示文件最后几行的内容,默认情况下显示文件的末尾10行。
           
选项 描述
-n 修改所显示的行数。$ tail -n 2 file 显示file文件最后2行
-f 它允许在其他进程使用该文件时查看文件的内容,tail命令会保持活动状态并不断的显示添加到该文件的内容(可用于实时监控系统日志)。

2)head 命令

显示文件开头几行的内容,默认情况会显示文件前10行。
           
选项 描述
-n 修改所要显示的行数

6.文件权限

$ls -l
drwx------  4 soldier  staff   128  8 21 13:35 Desktop
           
  • 每一行都包含如下信息:文件类型、文件权限、文件硬链接总数、属主用户名、属组组名、文件大小、文件上次修改时间、文件名或目录名。

1)文件类型,主要常见的有以下几种:

_:文件 	 d:目录     l;链接         
           

2)文件权限,由三组字符编码组成,每一组定义了3种访问权限:

r  可读     w  可写     x  可执行
           

注:若没有某种权限,则在该权限位会出现单下划线(‘-’)代替,这三组权限分别对应对象的三个安全级别:对象的属主、对象的属组、其他用户。

7.改变文件权限(chmod)

chmod命令用来改变文件和目录的安全性设置,格式如下:

[ugoa...][+-=][rwxXstugo...]
           

1)第一组字符定义权限作用的对象:

u代表用户、g代表组、o代表其他用户、a代表上述所有
           

2)第二组:

+ 增加权限、- 移除权限、= 将权限设置成后面的值
           

3)第三组符号代表作用到设置上的权限:

权限 描述
r 可读
w 可写
x 可执行
X 如果对象是目录或它已有执行权限,赋予执行权限
s 运行时重新设置UID或GID
t 保留文件或目录
u 将权限设置为跟属主一样
g 将权限设置为跟属组一样
o 将权限设置为跟其他用户一样

8.默认文件权限

  • umask命令用来设置所创建文件和目录的默认权限,对文件全权限的值是666(rw_rw_rw_),对目录全权限的值是777(rwxrwxrwx).

Linux文件权限码

权限 二进制值 八进制值 描述
--- 000 没有任何权限
--x 001 1 只有执行权限
-w- 010 2 只有写入权限
-wx 011 3 有写入和执行权限
r-- 100 4 只有读取权限
r-x 101 5 有读取和执行权限
rw- 110 6 有读取和写入权限
rwx 111 7 有全部权限
$ umask
0022 		#默认的umask值为0022。对应八进制,文件权限为644,目录权限为755.
$
           
知道umask值,计算权限的方法为:文件目录的全权限值减去umask值
	对于文件:666-022=644 对应权限为:rw-r--r--
	对于目录:777-022=755 对应权限为:rwxr-xr-x
           

9.排序数据(sort命令)

选项 描述
-n 把数字识别成数值,而不是字符,按数值排序
-M 识别三字符的月份名,并相应地排序
-r 反序排序(升序变降序)
-o 将排序结果写出到指定文件中

注:默认情况下,sort命令会把数字识别成字符来执行标准的字符排序

$ sort -t ':' -k 3 -n /etc/passwd
           

命令意思为: 对密码文件/etc/passwd根据以冒号(:)为分隔符,指定用户ID为排序字段。

. -t选项:指定一个用来区分键位置的字符

. -k选项:--key=POS1[,POS2] 排序从POS1位置开始,如果指定了POS2的话,到POS2位置结束

. -n选项:按字符串数值来排序(并不转换为浮点数)

. -r选项:反序排序(升序变降序)
           

10.使用df命令

  • 查看所有已挂载磁盘的使用情况命令输出如下:
    • 设备的设备文件位置、能容纳多少个1024字节大小的块、已用了多少个1024字节大小的块、还有多少个1024字节的块可用、已用空间所占的比例、设备挂载到了哪个挂载点上
选项 描述
-h 格式输出大小,用M替代兆字节、用G代替吉字节
$ df -h 
Filesystem      Size   Used  Avail Capacity iused               ifree %iused  Mounted on
/dev/disk1s1   233Gi   59Gi  172Gi    26% 1023198 9223372036853752609    0%   /
devfs          186Ki  186Ki    0Bi   100%     646                   0  100%   /dev
/dev/disk1s4   233Gi  2.0Gi  172Gi     2%       2 9223372036854775805    0%   /private/var/vm
map -hosts       0Bi    0Bi    0Bi   100%       0                   0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%       0                   0  100%   /home
           

11.命令替换

  • 两种方式将命令输出赋给变量:
    • 反引号字符(` `)和 $( )格式
testing=`date`  
testing=$(date)
           

注:赋值等号和命令替换字符之间没有空格

12.Linux环境变量

  • 1)全局环境变量,可使用env或printenv命令查看全局变量(输出结果无序),使用printenv命令,查看个别环境变量的值,不用加$符号。
  • 2)局部环境变量,set命令会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量、用户定义变量(输出结果已排序)。
  • 3)删除环境变量,unset命令,可以删除已存在的环境变量,在引用变量时,不用加$符号。
  • 4)设置全局环境变量:
    • 先创建一个局部变量,然后通过 export命令,导出到全局变量。(注:修改子shell中的全局变量并不会影响到父shell中的该变量的值)。

13.处理用户输入

  • 1)读取参数,位置参数变量是标准的数字,$0是程序名,$1 是第一个参数,$2 是第二个参数,依此类推,直到第9个参数$9.(如果参数不止9个,则在第9个参数后,在变量数字周围加上花括号,如:${10},表示第10个参数)。
    • 如果要输入多个参数,则每个参数都要用空格分开;
    • 要在参数值中包含空格,必须使用引号(引号只表明数据的起止位置)。
  • 2)读取脚本名
    • 可用$0参数获取shell在命令行启动的脚本名。
    • basename $0命令会返回不含路径的脚本名,例:name=$(basename $0)
  • 3)参数数量统计
    • 特殊变量$# 含有脚本运行时携带的命令行参数的个数;
    • 获取命令行中最后一个参数,可以使用${!#}。当命令行没有任何参数时,${!#}变量会返回命令行用到的脚本名。
  • 4)抓取所有参数数据
    • $* 变量会将命令行上的所有参数当成一个单词存储,视为一个整体
    • [email protected] 变量会将命令行上的所有参数当成同一个字符串中的多个独立的单词(可通过for命令得到每个参数)

14.输入与输出

Linux标准文件描述符

文件描述符 缩写 描述
STDIN 标准输入
1 STDOUT 标准输出
2 STDERR 标准错误

1)重定向错误

  • 只重定向错误,将该文件描述符放在重定向符号前,此方法shell只会重定向错误信息,而非普通数据
$ ls tests badtest test2 2> test5
tests
$ cat test5
ls: badtest: No such file or directory
ls: test2: No such file or directory
           
  • 重定向错误和数据,必须使用两个重定向符号,在符号前放上待重定向数据所对应的文件描述符,然后指向用于保存数据的输出文件
$ ls tests badtest test2 2> test5 1> test6
$ cat test5
ls: badtest: No such file or directory
ls: test2: No such file or directory
$ cat test6
tests
           

2)临时重定向

  • 在重定向到文件描述符时,必须在文件描述符之前,加上 &符号
$ echo "This is an error" >&2 
           

3)永久重定向

  • 用 exec命令 告知shell在脚本执行期间重定向某个特定的文件描述符。
$ cat test7.sh
#!/bin/bash
exec 2> testerror
echo the line 1
echo the line 2 >&2
exec 1> testout
echo the line 3
echo the line 4
$
$ ./test7.sh
the line 1
$ cat testerror
the line 2
$cat testout
the line 3
the line 4
           

4)创建自己的文件描述符

  • 在 shell中最多可以有9个打开的文件描述符,其中6个从3~8的文件描述符可以用作输入或输出重定向。
  • 关闭创建的文件描述符:将它重定向到特殊符号 &- ,如 exec 3>&-(即可关闭文件描述符3)

5)在脚本中重定向输入

  • exec命令允许将STDIN重定向到Linux系统的文件中: exec 0 < testfile,这条命令,告诉shell应该从文件testfile中获取输入,而不是STDIN。
$ cat test12.sh
#!/bin/bash
exec 0 < testfile
count=1
while read line:
do 
	echo "Line #$count : $value"
	count=$[ $count+1 ]
done
$./test12.sh
Line #1 : This is the first line
Line #2 : This is the second line
           

15.获取用户输入

1)读取(read命令)

  • read命令,加【-p选项】允许直接在read命令行指定变量。当在read命令行中不指定变量时,则read命令会将它收到的任何数据都放进特殊环境【变量REPLY】中;
  • echo命令,加【-n选项】,不会在字符串末尾输出换行符,允许用户紧跟其后输入数据。
#!/bin/bash
echo -n "Enter your age:"
read age
echo "Your age is $age"
           

指定变量(一个参数):

#!/bin/bash
read -p "Enter your age:" age
echo "Your age is $age"
           

指定变量(多个变量,用空格分开):

#!/bin/bash
read -p "Enter your name and age :" name age
echo "Your name is $name , age is $age"
           

不指定变量:

#!/bin/bash
read -p "Enter your name :"
echo "Hello $REPLY,welcome to China"
           

2)输入超时(-t选项)

  • 【-t选项】指定了read命令等待输入的秒数,当计时器过期后,read命令会返回一个非零的退出状态码
#!/bin/bash
if read -t 5 -p "Enter your name :" name
then
	echo "Your name is $name"
else 
	echo "Sorry ,to slow"
fi
           

3)限制输入字符数(-n加字符个数)

  • 【-n选项】结合数字一起使用,告诉 shell 会在接受指定个数字符后推出。
#!/bin/bash
read -n1 -p "Do you want to continue [Y/N] :" answer
case $answer in                        
Y | y)
	echo "fine ,continue on ...";;
N | n)
	echo "OK goodbye"
	exit;;
esac
           

4) 隐藏方式读取(-s选项)

  • 【-s选项】可以避免在read命令中输入的数据出现在显示器上(实际上,只是read命令将文本颜色设置成背景色一样)

5)从文件中读取

  • 每次调用read命令,都会从文件中读取一行,当文件中没有内容时,read命令会退出并返回非零状态码
#!/bin/bash
count=1
cat tests | while read line
do
	echo "Line $count :$line"
	count=$[ $count+1 ]
done
           

16.创建临时目录,临时文件

  • 创建临时文件(当前目录):mktemp 文件名称.XXXXXX (此命令返回:文件名)
  • 创建临时文件(在系统临时目录): mktemp -t 文件名称.XXXXXX (此命令返回:用来创建临时文件的全路径)
  • 创建临时目录:mktemp -d 目录名.XXXXXX
$ cat test21
#!/bin/bash

#创建临时目录tempdir
tempdir=$(mktemp -d dir.XXXXXX)		

#创建临时文件tempfile1
cd $tempdir
tempfile1=$(mktemp temp.XXXXXX)			

#创建临时文件tempfile2
tempfile2=$(mktemp temp.XXXXXX)			

exec 7>$tempfile1   #自定义输出重定向文件描述符7
exec 8>$tempfile2	#自定义输出重定向文件描述符8

echo "Sending data to directory $tempdir"
echo "This is a test line of data for $tempfile1" >&7   #临时输出重定向到文件描述符7
echo "This is a test line of data for $tempfile2" >&8   #临时输出重定向到文件描述符8
           

注:此脚本在当前目录创建了一个临时目录,然后cd命令切换进此目录,并创建两个临时文件,之后这两个文件被分配给文件描述符,用来存储脚本的输出。

17.链接文件

  • 只能对处于同一存储媒体的文件创建硬链接
  • 在不同存储媒体的文件之间创建链接,只可以创建符号链接

18.readlink命令

$ readlink -f /usr/bin/vi
           
-f选项:能够查看链接文件的最终目标
           

19.用户变量

  • 使用等号(=)将值赋给用户变量,在变量、等号和值之间不能出现空格

20.wc命令

  • wc命令可以对数据中的文本进行计数,默认情况下会输出三个值:
    • 文本的行数
    • 文本的词数
    • 文本的字节数

21.在脚本中使用bc

  • 格式一:variable=$(echo “options;expression” | bc)
    • options:可以设置变量
    • expression: 定义通过bc执行的数学表达式

    例:var1=$(echo “scale=4;3.44/5” | bc)

    scale=4指保留四位小数,3.44除以5,保留四位小数

  • 格式二:EOF文本字符串标识了内联重定向数据的起止
variable=$(bc << EOF
>options
>statements
>expressions
>EOF)
           
var1=10.33
var2=45.67
var3=33.2
var4=67

var5=$(bc << EOF
>scale=4
>a1=$( $var1 * $var2 )
>a2=$( $var3 * $var4 )
>a1 + a2
>EOF)
echo The final answer for this mess is $var5
           

22.Linux退出状态码

状态码 描述
命令成功结束
1 一般性未知错误
2 不适合的shell命令
126 命令不可执行
127 没找到命令
128 无效的退出参数
128+x 与Linux信号x相关的严重错误
130 通过Ctrl+C终止的命令
255 正常范围之外的退出状态码

继续阅读