写在前面——学习linux这么久了,是时候做个学习总结了。总结linux常用基本命令总览
clear: 清屏,清除界面内容
pwd: 显示当前目录
mkdir :创建一个目录 参数:-p 用于级联创建没有的目录
rmdir: 用于删除空目录,但不能删除文件 ,-p 用于级联删除空目录
rm: -r参数用于删除目录,-f参数用于强制删除不询问 如rm –rf /tmp/test/123
whoami : 当前用户(简略) who:当前用户(详细) w:当前用户(最详细)
cd: 切换到某个目录
date:时间 cal:日期 uptime:时间和登陆时长
hostname:主机名
touch:创建一个文件、
echo:展开,把一个文件或字段的内容作为输出,默认输出到控制台
uname:显示电脑以及操作系统的相关信息 –a 显示全部信息
ls:显示一个文件或目录的信息 -l 显示详细信息-d显示目录信息 ll=ls –l
file:辨识文件类型
cat: 连接文件并打印到标准输出设备上。
-n 或 --number:由1 开始对所有输出的行数编号。
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
head:显示前10行
-n显示前n行
tail: 查看文件的内容
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
-n:显示行数
tail notes.log:显示最后10行
tail -f notes.log:显示并不断更新
tail +20 notes.log:显示从第 20 行至文件末尾
tail -c 10 notes.log:显示最后 10 个字符
jobs;查看当前作业
-l,列出进程的PID和作业号
-p,只列出作业的PID
-s,只列出停止的作业
-r,只列出运行的作业
fg: 把程序调回前台运行 , 如fg 1
bg: 把程序调度到后台执行 ,如bg 1 , 1为作业号,可以用jobs查看
zip: 压缩文件或目录
-q 不显示指令执行过程。
-r 递归处理,将指定目录下的所有文件和子目录一并处理
如zip-q -r html.zip /home/html ,将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip
如zip-q -r html.zip * 将当前目录下的所有文件和子目录打包为当前目录下的html.zip
-d 从压缩文件内删除指定的文件。
-v 显示指令执行过程或显示版本信息。
如zip-dv cp.zip a.c ,从压缩文件cp.zip 中删除文件a.c
unzip: 解压缩zip文件
-l 如,unzip-l abc.zip 查看压缩文件中包含的文件
-v 执行是时显示详细的信息,但不解压
gzip: 用于压缩文件
gzip * 压缩目录下的所有文件,不能压缩目录
-d 解压缩
-v 显示详细信息
more: 类似 cat ,不过会以一页一页的形式显示,空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似)
V 调用vi编辑器
q 退出more
空格键 向下滚动一屏
b返回上一屏
less: 与 more 类似
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
su: 切换用户,默认切换到root用户
su-: 切换目录,家目录也会改变
sudo: 以其他身份来执行命令,预设的身份为root
tar: 用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
tar -czvf test.tar.gz a.c //压缩 a.c文件为test.tar.gz
tar -xzvf test.tar.gz a.c //解压文件
-c 建立新的备份文件。
-x从备份文件中还原文件。
-z 通过gzip指令处理备份文件。
-v 显示指令执行过程。
-f<备份文件>指定备份文件。
lspci: 显示所有的pci设备信息
lsusb: 显示系统中以及连接到系统的USB总线信息的工具。
lsmod: 显示已载入系统的模块
id: 显示用户的ID,以及所属群组的ID
cp: 用于复制文件或目录
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
如:cp –r test/ newtest
rm: 删除一个文件
-r,可删除目录
-f, 强制删除
shutdown: -h关机
-r 重启
now 立刻关机
passwd: 更改密码
man: 查看Linux中的指令帮助
info: 查看命令的帮助文档
-h: 关机
--help: 显示shell内部的帮助信息
poweroff: 关机
reboot: 重新启动计算机
------------------------------------------------------------------
知识点回顾总结:
一、常用快捷件和命令:
命令历史:上下箭头显示历史命令
自动补全:tab键
清空屏幕内容:clear命令
退出命令行界面:exit命令
date:查看日期
cal:查看月历
free:显示内存使用信息
df:显示文件系统的磁盘使用情况
ps:显示进程信息
二、linux文件系统
1.基本命令:
pwd | 打印当前工作目录名 - Print name of current working directory |
cd | 更改目录 - Change directory |
ls | 列出目录内容 - List directory contents |
file | 确定文件类型 - Determine file type |
less | 浏览文件内容 - View file contents |
cp | 复制文件和目录 - Copy files and directories |
mv | 移动/重命名文件和目录 - Move/rename files and directories |
mkdir | 创建目录 - Create directories |
rm | 删除文件和目录 - Remove files and directories |
ln | 创建硬链接和符号链接 - Create hard and symbolic links |
type | 显示命令类型 |
which | 显示命令对应的可执行程序 |
whatis,info,man | 命令相关信息和帮助文档 |
alias | 创建命令别名 |
2.Linux文件系统是一个典型的单根、分层、树形结构
3.权限字符串的第一个字符表示的文件类型:
如 -rw------
字段 | 含义 |
d | 目录 |
- | 文件 |
l | 链接文件 |
b | 面向块的设备文件,一般是供储存的接口设备 |
c | 面向字符的设备文件,即串行设备,例如键盘、鼠标 |
4.linux常用目录结构
/ | 根目录 |
/bin | 系统启动和运行所必需的二进制程序(可执行程序) |
/boot | Linux内核、安装磁盘映像、启动加载程序 |
/dev | 设备目录 |
/etc | 所有系统层面的配置文件和一系列的脚本文件。 |
/home | 普通用户的家目录的父目录 |
/lib | 系统程序所需的库文件 |
/lost+found | 文件系统分区的备份区 |
/media | 媒体存储设备挂载点 |
/mnt | 可移动存储设备挂载点 |
/opt | 可选软件的安装目录 |
/proc | 内核的虚拟文件系统 |
/root | root用户的家目录 |
/sbin | 系统的二进制可执行文件,root用户操作 |
/tmp | 系统和各程序创建的临时文件的存储目录 |
/usr | 普通用户所需的程序和文件 |
/usr/bin | 系统安装的二进制可执行文件 |
/usr/lib | /usr/bin里的程序所需的库文件 |
/usr/local | 用户开发的程序的编译结果目录 |
/usr/sbin | 系统管理程序目录 |
/usr/share | /usr/bin里的程序运行所需的一些共享数据 |
/usr/share/doc | 共享的文档 |
/var | 内容动态改变的目录,数据库、邮件等数据文件存放该目录 |
/var/log | 日志文件 |
5.常用通配符
* | 匹配零个或多个任意字符 |
? | 匹配任意一个字符 |
[字符集] | 匹配任意一个字符集中的字符 |
[!字符集] | 匹配任意一个不是字符集中的字符 |
[[:字符类:]] | 匹配任意一个属于字符类中的字符 |
[:alnum:] | 匹配任意一个字母或数字 |
[:alpha:] | 匹配任意一个字母 |
[:digit:] | 匹配任意一个数字 |
[:lower:] | 匹配任意一个小写字母 |
[:upper:] | 匹配任意一个大写字母 |
使用通配符的例子:
* | 所有文件 |
g* | 文件名以g开头的文件 |
b*.txt | 以b开头,中间零个或任意多个字符,并以.txt结尾的文件 |
Data??? | 以Data开头,其后有三个字符的文件 |
[abc]* | 以a、b或c开头的文件 |
backup.[0-9][0-9] | 以backup.开头,紧跟两个数字的文件 |
[[:upper:]]* | 以大写字母开头的文件 |
[![:digit:]]* | 不以数字开头的文件 |
*[[:lower:]123] | 以小写字母结尾,或以1、2、3结尾的文件 |
6.硬链接与软(符号symbolic)链接
硬链接:新建立一个inode(索引节点)链接到文件放置的块区域。限制:(1)不能跨文件系统,因为不同文件系统有不同的inode table; (2)不能链接目录。
软链接:建立一个独立的文件,把读取行为转发到该文件所链接的文件上。当删除原文件时,链接文件不会受影响,但打不开原文件了。
创建方法:
ln -s 源文件 目的文件 (加-s为建软链接,不加为建硬链接)
如:ln /etc/passwd passwd-hard 则建立了一个名为passwd-hard的硬链接
通俗地讲,硬链接安全,为新建一个后门,把前门(原文件)删了,你还是能访问到数据所在的块区域。软链接为建一个快捷方式,把原文件删了,你这个链接就访问不到数据了。
三、重定向、权限和进程
1.基本命令
cat | 连接文件并显示 - Concatenate files |
sort -k3nr 按第三列数值逆序排 | 排序文本行 - Sort lines of text |
uniq 对排序后的结果去重 | 去重 - Report or omit repeated lines |
grep | 显示匹配内容 - Print lines matching a pattern |
wc | 显示行、字符数、字节数 - Print newline, word, and byte counts |
head、tail 默认10行 | 显示前或后部分内容 - Output the first/last part of a file |
tee | 双向重定向 |
id | 显示用户身份信息 - Display user identity |
chmod | 修改文件权限 - Change a file's mode |
umask | 设置文件默认权限- Set the default file permissions |
su | 切换用户身份运行shell- Run a shell as another user |
sudo | 切换用户身份执行命令 - Execute a command as another user |
chown | 改变文件所有者 - Change a file's owner |
chgrp | 改变文件的所属用户组 - Change a file's group ownership |
passwd | 更改用户密码 - Change a user's password |
ps | 显示当前进程 - Report a snapshot of current processes |
top | 显示动态进程列表 - Display tasks |
jobs | 显示作业列表 - List active jobs |
bg、fg | 指定作业后台、前台运行 - Place a job in the background/foreground |
kill | 向进程发送信号 - Send a signal to a process |
killall | 通过进程名终止进程 - Kill processes by name |
shutdown | 关机或重启系统 - Shutdown or reboot the system |
补充find命令:
-atime +n/-n 表示访问或执行时间大于或小于n天的文件
-ctime +n/-n 表示写入、更改inode属性(如更改所有者、权限、或链接)的时间大于或小于n天的文件
-mtime +n/-n 表示写入时间大于或小于n天的文件,该参数使用最多
可以用min代替time表示分钟
-name filename 直接查找文件名 如:find ./ -name test2 表示在当前目录下查找test2文件
-type filetype 通过文件类型查找文件 有f、b、c、d、l、s等类型
2.数据流重定向
> 覆盖重定向
>> 追加重定向
2> 将错误信息覆盖重定向
2>> 将错误信息追加重定向
2> /dev/null 将错误信息忽略,及输出到黑洞
<标准输入流默认从键盘输入
<<用于设定结束输入的关键字
如:cat >test < ~/test1 将输入流重定向到文件输入
如:cat >test <<"eof" 设定输入eof才结束输入
3.管道命令:
| 将“|”前面的输出作为“|”后面的输入
选取命令 cut : 从一行中取出部分信息
cut -d '分隔符' -f field 以d分割-f表示选取哪一段 如 : echo $PATH | cut -d ':' -f 5
cut -c 5-10 表示取第5到第10个字符
选取命令grep :按条件取出某行 如 last | grep 'Nov 26'
3.用户管理
基本命令:
命令 | 作用 |
id | 查看当前用户的信息 |
passwd | 修改当前用户密码 |
whoami | 显示当前用户 |
who | 显示当前登录的所有用户 |
w | 显示所有登录用户和正在进行的操作 |
useradd | 创建新用户,常用选项-d,-s,-u,-g |
usermod | 修改用户相关信息,常用选项-l,-u,-d,-g,-L,-U |
userdel | 删除用户,常用选项-r |
su | 切换用户 |
sudo | 切换用户执行命令 |
4、权限管理
文件权限的意义:
目录文件的意义:
文件默认权限
set uid: 使文件在执行阶段具有文件所有者的权限
set gid: 目录设置这个权限后,任何用户在此目录下创建的文件都具有该目录所属组相同的组
sticky bit: 防删除位 ,设置该权限后,就算用户对目录具有写权限,也不能删除其他用户的文件
5、Linux进程
ps查看进程信息
top实时监控进程活动状态
处于后台的进程被称为作业,可通过fg和bg进行前后台转换
jobs命令显示所有作业
ctl+z:挂起
ctl+c:终止一个进程或作业
kill:杀死进程或作业,作业id必须以%开始
在命令后添加符号(&),使命令在后台进行
fg %2 表示把2号作业调到前台
fg %"find / -inum" 把匹配到进程调到前台
四、软件安装、存储管理
(插播)
1.linux c编程基本概念(确保已安装gcc)
第一个linux c程序
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("Hello World\n");
exit(0);
}
编译执行:
$ gcc -o helloworld helloworld.c
$ ./helloworld
(-o指定编译后的文件名,如不指定默认为a.out)
gcc的-I选项可以引入不在默认路径中的头文件。
如:$gcc -I /usr/openwin/include hello.c
一个简单的makefile文件实例:
编译:
$ make -f Makefile1
3.YUM管理器的使用
yum install *** 安装软件
yum update *** 更新软件
yum list 列出所有已安装的软件
yum info *** 查询每个或某类软件的详细信息
4.linux系统中的磁盘
Linux系统中所有设备都被抽象成文件,存储在/dev目录下
设备名称一般为hd[a-z]或sd[a-z],如hda、sda等。
Step 1:使用fdisk命令进行磁盘管理。
Step 2:对分区指定文件系统(mke2fs命令)。
Step 3:挂载文件系统(mount命令)。
fdisk用法:
需要超级用户权限
fdisk -l:列出所有安装的磁盘和分区信息
fdisk 设备名:对该设备进行分区操作,如fdisk /dev/sda
partprobe:手动更新分区信息到内核
查看分区信息还可以通过文件/proc/partitions
mke2fs用法:
mke2fs命令用于在指定分区上创建文件系统
基本语法为:mke2fs -t 文件系统名 分区名
如:mke2fs -t ext3 /dev/sdb5
mkfs是简化的mke2fs命令
基本语法为:mkfs 分区名
如 : mount /dev/sdb5 /mnt
umount命令用于卸载已挂载的分区
基本语法为:umount 分区名或挂载点名
如:umount /dev/sdb5 或 umount /mnt
Linux系统通过读取/etc目录下的fstab文件来决定哪些分区或设备需要自动挂载
fstab文件中的每一行就代表一个自动挂载的配置
6.VIM编辑器
有两种操作模式分别是:
命令模式、插入模式(允许输入文本) ,在任意模式按esc回到命令模式
命令模式常用的命令:
i:在当前光标处插入文本
o:在当前行下面插入新行
dd:删除整行
yy:复制当前行(将当前行放入缓冲区)
n+yy:复制n行
p:将缓冲区中的文本插入到当前光标处
u:撤销上一操作
r:替换当前字符
/:查找字符
命令模式下按“:”进入ex模式,光标移到vi的底部
常用的ex命令:
:w 保存当前修改
:q! 不保存退出
:x 保存并退出,相当于:wq
:! 执行系统命令
:set number 显示行号
:sh 切换到命令行,ctrl+d切换回vim
五、Shell程序设计基础
1.两种执行方式:
①输入路径即可,需rx权限②sh 1.sh只需要读权限
2.基本知识
echo : 展开、显示
printf : 格式化输出
shell变量常用命令:
变量的显示与设置:echo、unset
环境变量的相关操作:env、export
变量的输入:read
数组:declare/typeset
设置: 如a=6
显示: 如echo $a 或echo ${a}
取消: unset a
env: 查看环境变量
set: 查看所有变量,包括自定义的和环境变量
export: 将自定义变量转化为环境变量 如 export a
read: 变量输入 , 如 read -p "please input" -t 10 a ,-p为提示,-t为等待时间
declare或typeset声明变量的类型:
如:declare -i sum=1+2+3
如:declare -a array
array[1]="a" array[2]="b"
echo ${array[2]}
echo -e "the two element are :" ${array[1]} ${array[2]}
3.从终端接收用户输入作为文件名创建新文件:
$() 等同于 ` ` ,为执行一段命令所得的结果
4.在脚本中进行数值运算:
注意: echo -e 参数表示对要显示的内容进行转义,
如echo -e "a\n" 为a换行,而不是直接打印 “a\n”
echo -e "input two numbers"
read -p "first number: " first
read -p "last number: " last
total=$(($first+$last))
declare -i total =$first*$last
shell脚本中的数值运算只支持整数的运算;
shell脚本中变量都默认为字符串,所以如果希望变量进行数值运算有如下两种办法
第一种是使用$((数值表达式)),如$(($first+$last))
第二种将变量声明为整型:declare –i total=数值表达式
如:
test -e /demo && echo "exist" || echo "not exist"
test -f /demo && echo "exist" || echo "not exist"
常用参数:
字符串测试
参数 说明
= 等于则为真 , 注意 , "=" 左右要有空格
!= 不相等则为真
-z 字符串 字符串的长度为零则为真
-n 字符串 字符串的长度不为零则为真
数值测试
参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真
6、在shell脚本中使用参数传值
7. shell脚本中使用if语句
if [表达式] ; then
语句
elif[]
语句
else[]
语句
fi
if运用:
read -p "input your choice:" select
case $select in
"1" )
echo "you select 1"
; ;
"2")
echo "you select 2"
; ;
*)
echo "you select others"
;;
esac
9、在shell中使用while循环
第一种:
while [ "$flag" != "yes" -a "$flag" != "YES" ] # -a 表示并且 -o表示或
do
read "input your choice :" flag
done
echo "input yes , loop done"
第二种:
until [ 条件表达式 ]
do
语句
done
计算1+2+3+...+100:
10、shell脚本中使用for循环,两种方法
第一种
for 变量名 in value1 value2 value3 ...
do
语句
done
第二种:
for (( 初始值 ;终止条件 ;执行步长))
do
语句
done
10、shell中使用函数function
function 函数名()
{
程序段
}
输入函数名直接调用,或在函数名后面加参数
如:计算阶乘:
11、shell编程一些例子
添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30
在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行
12.正则表达式
①grep -in "匹配字段" 文件名
如: grep -in "the" 1.txt
-i表示不区分大小写, -n为显示行号
②使用[] ,如 grep -n '[^a-z]oo' 1.txt
^表示行的开始,$表示行的结尾
③ ‘.’ 表示任意一个字符 '*'表示0个或多个字符 ,如“oo*”表示一个或多个o, "o."表示一个o加一个其他字符