这段时间想要了解一些关于Linux的基础命令知识,以下是通过在牛客网刷题整理的碎片化知识点以及菜鸟教程的总结
1.各命令及含义
- touch:创建文件
- cp:复制文件
- mv:删除文件
- rename :修改文件名
- more:查看文件内容
- file:查看文件类型
- dd:指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换—磁盘维护
- df:查看磁盘使用情况
- top:是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况
- netstat:显示网络情况
- crontab:Unix和Linux用于设置周期性被执行的指令(时间顺序:分 时 日 月 星期)
- history n:查看最近执行的命令(该history命令也算入最近执行的命令)
- 挂载设备使用mount,卸载设备使用umount,有三种方式,通过设备名,挂载点或者设备名和挂载点
- dev 设备信息
- home 用户家目录
- bin/sbin 可执行文件
- etc 用于存放配置信息
- lib/lib64 动态库/静态库
- lost+found 丢失文件
- opt 第三方文件(相对于操作系统)
- root 管理员的家目录,用于存放用户信息
- usr 第三方头文件和库
- var 系统日志文件/缓存文件
- /bin 二进制执行文件,也就是命令文件
- /etc 下存放的是配置文件
- /dev 存放是时外部设备文件,硬盘,usb等
- /lib 存放的是库文件
- ps -aux为查看所有进程
- netstat -apn :Linux下查看服务程序占用的端口命令
- watch 可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行
- isof 是一个列出当前系统打开文件的工具
2.Unix
UNIX系统由内核、shell、文件系统和应用程序等4部分组成。 UNIX是一个通用、交互型分时操作系统3.fork函数
使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。 子进程与父进程的区别在于: 1、父进程设置的锁,子进程不继承(因为如果是排它锁,被继承的话,矛盾了) 2、各自的进程ID和父进程ID不同 3、子进程的未决告警被清除; 4、子进程的未决信号集设置为空集。4.用户及文件权限管理
4.1 用户 - 创建用户 $ sudo adduser xxx【passwd:设置密码】
- 创建用户 $ sudo deluser xxx
- 切换用户登录 $su -l xxx
- 查看用户 who am i
- 查看属于哪个组别 $ groups xxxx【查询结果为:冒号前为用户名,冒号后面为用户所属组别】
- $ cat /etc/group |sort
cat 命令用于读取指定文件的内容并打印到终端输出。 | sort 表示将读取的文本进行一个字典排序再输出,
4.2 文件
文件操作
新建文件 $ touch 文件名
使用较长格式列出文件:$ ls -l
变更文件所有者 $ sudo chown shiyanlou iphone6
$ cat 文件名
读权限,表示你可以使用 cat 之类的命令来读取某个文件的内容;写权限,表示你可以编辑和修改某个文件; 执行权限,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 exe 后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。
5.Shell基础
定义变量: temp='www.xxx.com' #定义变量不用$符号,而在php中则需要
使用变量: $temp【显示变量:echo $temp】
设置变量为只读: readonly temp
删除变量:unset temp【unset 命令不能删除只读变量。】
Shell字符串
str='this is name'【单引号引用的字符串不可存放变量,若要存放变量,需拼接字符串,注:拼接不用+,例子:str='this is '$name'!'】
str="this is \"$name\"!" 等同于str="this is ${name}!"
获取字符串长度:echo ${#name}--输出变量name的长度
提取字符串:echo ${#name 1:4}
查找字符串:echo `expr index "$name" o`【查找字符o的位置;脚本中` `是反引号,而不是单引号 ' 】
Shell数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开
读取数组:valuen=${array_name[n]}
使用 @ 符号可以获取数组中的所有元素,例如:echo ${array_name[@]}
获取数组长度:【取得数组元素的个数】length=${#array_name[@]}或者length=${#array_name[*]}或者【取得数组单个元素的长度】lengthn=${#array_name[n]}
Shell注释
单行注释:#
多行注释::!<<.........!【其中!可由其他符号代替】
注: 只有使用变量的时候才加美元符($)
shell传递参数
$0 为执行的文件名,后面才是参数
参数个数为: $#
传递的参数作为一个字符串显示:$*
shell字符串输出命令
echo string
shell函数
myfunction(){
echo "第一个参数 $1"
echo "第十个参数 ${10}" #参数个数大于10时,必须加括号
return `expr 1 + 1`
}
调用函数
myfunction 1 2 3 4 6
echo $? #返回计算结果用$?表示
计算执行命令行数:$ wc -l
包含外部脚本: 引用. /filename【.和/之间有个空格不可省略】
test2.sh中引用test1.sh: . ./test1.sh
运行shell脚本:(两种方式)
$ chmod +x test2.sh #为 test2.sh 添加可执行权限并执行:
$ ./test2.sh #执行test2.sh
菜鸟教程官网地址:http://www.runoob.com
$ /bin/sh test2.sh #直接运行解释器
整数运算
1. let "x=$x+1"
2. x=`expr $x+1`
流程控制
if语句
then
...
fi #if倒过来
-------------------------------------------------------
case $var in
condition 1)
...;;
condition 2)
...;;
*)
default...;;
esac
-------------------------------------------------------
for $var in [list]
do...
done;
6.Linux命令
6.1 awk命令
awk是Linux系统用于分析文本的工具,通过逐行分域进行匹配语法:
1.awk ‘{[pattern] action}’ #pattern可以是/re/,re就是正则表达式
2.awk -F #-F相当于内置变量FS, 指定分割字符
3.# 或者使用内建变量
$ awk 'BEGIN{FS=","} {print $1,$2}' log.txt
4. awk -v # 设置变量 eg: awk -va=1'{print$1+a}' log.txt【定义变量a】
5. awk -f awk脚本 {文件名} # eg: $ awk -f cal.awk log.txt
6.2 sed命令
sed是用于编辑文件的命令sed -e 4a[添加]/c[取代]/d[删除]/i[插入]/p[打印]/s[取代]
eg:$ sed -e 4a\newline testfile #使用sed 在第四行后添加新字符串
或$ sed '4a\newline testfile' #使用sed 在第四行后添加新字符串
$ sed '2,5d' #删除2~5行
$ sed -n '5,7p' #显示行号-n,输出5~7行