《Linux学习笔记》:Linux操作系统

linux内有7种文件 -、d、c、b、l、p、s(socket)

一、shell命令、shell和shell脚本的本质区别

 Shell 用户与内核沟通的工具

1.简单介绍

        Shell命令:用户向内核发出的控制请求,与之交互的文本流。

        shell:是一个命令行解释器,将用户的命令解析为操作系统所能理解的指令,实现用户与操作系统的交互。

        shell脚本:一堆命令的集合

2.输入语句read、输出语句echo、简单计算expr以及位置参数(运行下列程序输入按照注释进行输入,帮助理解)

#!/bin/bash    #声明我们所用的shell版本给计算机

#==========read&==========
read N2				#不带提示的输入
echo "read N2->$N2"		#echo自带换行

read -p "请输入一个数字:" N1	#带提示的输入
echo -n "read -p "请输入一个数字:" N1->$N1" # -p 去掉echo自带的换行
echo "^_^!:上面老铁没换行,所以我在这行了"

echo "令s1=233 666 s2=886" 
read s1
read s2
echo $s1 $s2

read -p "换行输入个字符串helle
" str				#注意!!! "空格str 才行
echo $str
			
		
echo date			#不带``识别为字符串
echo `date`			#带``识别为命令

#==========expr===========
expr 1 + 1 - 1 \* 2		#exper自带输出,进行简单运算+ - \* /(取整),数字与运算符之间都要用空格隔开

Calculate= expr 5 / 2		#这么赋值达咩达咩
echo $Calculate			#输出为空格因为上面=后紧接着的是空格
#Calculate=expr 5 / 2 		#这么写也是达咩达咩 直接报错

Calculate=`expr 5 / 2`  	#这么赋值是ok的,expr自带的输出被取消了
echo $Calculate

#==========位置参数==========

echo "0->$0"			#注意$后超过2位置要用()括起来,即$()
echo "1->$1"
echo "2->$2"
echo "3->$3"
echo "4->$4"
echo "5->$5"
echo "¥#->$#"			#执行命令行后给的参数有几个		
echo "¥*->$*"			#执行命令行后给的参数有谁	
echo "¥@->$@"			#执行命令行后给的参数有谁
echo "¥¥->$$"			#执行本命令行的进程号
echo "¥?->$?"			#上一条命令是否正常执行完毕,正常执行完毕输出0,反之输出非0

二、常用命令

格式:命令 [选项] [参数]

说明:

        1.[]:可以省略

        2.选项:功能

        3.参数:操作对象

注意:
       1.三者之间必须有空格

        2.若有多个命令写在一行用;隔开

          3.如果一条命令不能在一行写完,使用 \ 标志该命令未结束

三、用户系统相关命令

su - 用户名//切换用户,系统当前工作路径环境变量均会改变

su -//su - root
su root//当前目录变为 root用户,其他不变

若出现:su:Authentication failure的问题,说明你没有设置root的密码(与你当前普通用户密码不一样,但可以设置成一样的)

这时输入如下,再输入你的密码

sudo passwd root

就可以顺利切换了

sudo adduser username//添加用户

四、系统管理命令 

--help查看帮助文档

ps -ef    //查看所有进程的 PID(进程号 ,PPID副进程号 ) 、系统时间、命令详细目录、执行者
ps -aux    //查看所有进程的 PID(进程号 ,PPID副进程号 ) 、系统时间、命令详细目录、执行者、CPU、GPU占用率
ps axj    //查看进程多了PPID PPID是父进程
pstree    //进程进行树状图显示

top    //动态显示进程

kill -l    //列出所有可用的信号名称
kill -指令序号 进程号
kill -9 PID    //中止程序
kill -18 PID    //暂停程序
kill -19 PID    //继续程序

fdisk -l    //列出文件系统的分区情况 需要管理员权限
fdisk //查看硬盘分区情况,对硬盘分区情况进行管理

free    //查看当前系统的内存使用情况
df    //查看文件系统的磁盘空间占用情况
du //统计目录、文件所占磁盘大小

五、文件目录常常见命令(以文件Test.txt为例)

1.chmod(不一定需要root权限)

ls -l #查看 当前目录文件权限情况

(1)作用:更改文件权限

 

以Text.txt来介绍一下

-rw-rw-r-- 1 teoeking teoeking     0  7月 26 09:31 Test.txt
-当前用户权限(u)组权限(g)其他权限(o)
1 用户名 组别

 再新建一个用户用来测试命令:

sudo adduser dfmaster #新建一个用户,名字为dfmaster

(1).修改权限(这里这对用户权限进行了演示)

chmod u+x Test.txt    #给当前用户权限开启可执行权限,其他位不变
chmod u-w Test.txt    #给当前用户权限关闭可写的权限,其他位不变

chmod a=r Test.txt    #Test.txt文件的三种权限的可执行位置被给予,其他位置关闭

注意:=号只能用户,组和其他的一位进行更改  +可以连着+

chmod u=r=w=x Test.txt   #最后只有u的x被复制为x
chmod u+r+w+x Test.txt   #u的全部权限位置均被给予
chmod u-r-w-x Test.txt   #u的全部权限位置全部关闭
chmod a+r+w+x Test.txt   #u、g、o三种权限的全部权限位置均被给予

对于-rw-rw-r--

        可以将其转换成8进制(111 111 111)表示,对应位置给权限置1,关闭权限给0。

chmod 777 文件名    #用户权限,组权限,其他权限全给 等同于 chmod a+r+w+x 文件名

2.chown

作用:更改文件所属用户

sudo chown 所需换成的用户名 Test.txt

 

这时在teoeking用户的终端下的权限变成了组权限

3.chgrp

作用:更改文件所属的组别

sudo chgrp 所需换成的组名 Test.txt

4.grep

作用:查找 字符串 在某个文件中

grep money Test.txt    #在Test.txt中寻找money
grep -n money Test.txt    #在Test.txt中寻找money,并显示money所在的行号

5.alias

作用:为命令建立一次性别名,即只可在当前开启的终端下进行调用

alias fm="./a.out"    #在./a.out同目录,为a.out建立别名
alias fm="~/TeoekingProject/CProject/CH/D04_Project/a.out"    #这样从家目录开始,就可以在家目录下,任意目录用别名进行调用

6.wc

作用:计算大小

wc -l Test.c    #输出Test.c有多少行
wc -c Test.c    #输出Test.c里面有多少字符串

7.test 

作用:测试文件属性,字符串和整数也行

test s1=s2     #测试两个字符串内容是否完全相同 test->[...]
[ s1 != s2 ]     #测试两个字符串是否完全相同,[]内侧注意空格

test -z s1     #测试字符串长度是否为0
test -n s2     #测试字符串长度是不为0

[ a -aq b ]    #测试a==b
[ a -ne b ]    #测试a!=b
[ a -gt b ]    #测试a>b
[ a -ge b ]    #测试a>=b
[ a -lt b ]    #测试a<b
[ a -le b ]    #测试a<=b

-d name        #测试name->
-e name        #name->exist
-f name        #name->putpng
-L name        #name->link
-r name        #name->read
-w name        #name->write
-c name        #name->char

 六、三大结构

(一)条件结构

1.if

#=====单分支选择=====
if [ $S -ne 1 ] 
then
    echo "X!"
    exit
fi

if [ -f $1 ]
    then
        echo "$1是一个文件"
fi  

#=====双分支选择=====
if [ ]
then
    语句1
else 
    居于2
fi
#=====多分支选择=====
if [ ]
then
    语句1
elif [ ]
then
    2
elif [ ]
then
    3
else
    4
fi

 2.case

case xx in
    m1)        #"" '' 不加也行 ``当成命令
        o1
        ;;    #类似break,不可省略
    m2|m3)    #可以并发
        o1
        ;;
    ...
    mn)
        on
        ;;
    *)
        o*
        ;;    #可以省略
esac

(二)、循环结构

1.for

#=====for循环=====
for i in x x x
do
    echo $1
done

for i in {1..10}
do
    echo $1
done

for i in {10..1..2}
do
    echo $1
done

for ((i=1;i<5;i++))
do
    echo $1
done

 2.while

#=====while=====

while []    #0为真,1为假
do
    ***
done

 3.break

break      #跳出1次循环
break n    #跳出n层循环

continue    #结束本次循环
continue    #结束两次循环

(三)函数(不属于三大结构,先写在这吧)

**()
{

}

function **()
{
    return * 
}

*=`**(*)`

**(*)
echo $?

七、特殊字符

1.字符选择

(1)*:匹配任意长度字符

(2)?:匹配长度为一的一个字符

(3)[***]:匹配其中指定的一个字符

(4)[*-*]:匹配*到*范围内的一个字符

(5)[^***]:(取反)匹配出了***之外的一个字符

2.查看文件内容命令

cat Test.c    #适合查看短的文件
more Test.c    #适合查看长的文件 回车下一行 空格下一页
less Test.c    #适合查看长的文件 回车下一行 空格下一页 支持上下键

3.管道

形式:

程序1 | 程序 2

作用:将上一个运行的程序的结果输入后面的函数

案例:

首先创建两个.c文件,文件名以及文件内容如下

//名为 bullet.c,gcc bullet -o bullet 编译后生成bullet
#include <stdio.h>

int main()
{
	printf("->");
	return 0;
}


//名为target.c,gcc traget -o target 编译后生成target
#include <stdio.h>
#include <string.h>

int main()
{
	char str[20]="";
	scanf("%s",str);
	if(strcmp(str,"->")==0)
	{
		printf("-GG>!\n");
	}
	else
	{
		printf("^_^!\n");
	}

}

最后,在终端中输入如下命令

./bullet | ./target 

 输出如下表示管道搭建成功

 4.输出重定向

作用:将原本打印在屏幕上的内容,塞进文件里

(1)覆盖重定向:如果不存在覆写的文件则新建一个,存入;若存在则清空内容后再进行写入

ls > log.txt

(2)追加重定向:如果不存在覆写的文件则新建一个,存入;若存在则在前面文本后进行写入

ls >> log.txt

(3)输入重定向

wc -l <log.txt

 (4)输出错误重定向

mv Test99.c OTest99.c 2>log.txt #"mv Test99.c OTest99.c"是故意写出的错误,"2>"是错误重定向的标识符

5.ln(Linux的快捷方式)

(1)软链:就跟windows的快捷方式一样,只是一个链接,存储占用很少

ln -s /home/../xx 快捷方式名

 (2)硬链:相当于复制了一份同样大小的,内容镜像更改

ln /home/../xx 快捷方式名

八、打包、压缩相关指令

gzip Test.c    #压缩文件 后缀为.gz
bzip2 Test.c    #后缀为.bz2

gunzip *.gz    #解压
gzip -d *.gz

bunzip2 *.bz2   #解压
bzip2 -d *.bz2

tar -c    #打包
tar -x    #解包
tar -v    #显示详细的处理过程
tar -f    #指定包的名字,-f参数必须放在最后 tar -cf,生成后缀为。tar的文件
tar -z    #调用gzip来进行压缩和解压缩
tar -j    #调用bzip2来进行压缩和解压缩
tar -Z    #调用compress来进行压缩和解压缩

tar -cf *.tar 所需要的打包的文件名  #生成一个*.tar,先打包后压缩
gzip *.tar

tar -czf *.tar 所需要的打包的文件名空格隔开 #一步骤生成*.tar.fz


bunzip  *.tar.bz    #先解压再解包,解压生成*.tar
tar -xf *.tar 

tar -xzf *.tar.bz    #一步解压

九、环境变量配置相关

(1)临时环境变量配置

export PATH=$PATH:/home/../ #只要配置到所需要添加到环境变量的程序程序的目录级别即可

(2)永久环境变量配置

sudo vim /etc/profile    #打开该文件,在其文件最后加入如上,临时环境变量配置即可

之后重新启动,或者调用命令 source /etc/profile代码如下

reboot
#or
source /etc/profile
#or
shutdown -h -now

evc    #查看所有的环境变量
whereis 查找的文件名    #用与查找该文件在哪

十、软件的安装与卸载

其安装依赖于网络首先确定是否有网

ping www.hqyj.com    #测试网络是否连接,这里的连接是华清远见官网,欢迎各位同学来系统学习嵌入式

 出现如下则说明有网(测试方式有很多,直接打开浏览器开个网页也是一样的,这里提供了一种办法,顺便打个广告)

 下面是一些相关命令的说明

etc/apt/sources.list    #源文件,若觉得下载速度慢,可以搜索一些国内的源文件,更改到此文件中

sudo apt-get update    #刷新软件源
sudo apt-get install **    #安装

sudo apt-get remove **    #卸载

十一、虚拟机与主机文件的传输

有很多种方法,VM的拖拽,VM的共享文件夹、其他局域网文件传输软件、QQ、微信、各种云盘等等。

但就笔者实验来看,但VM提供的方式配置比较复杂,不成功的原因也多种多样,目前没有检索到一套完全可以正确安装且可以全部功能全部使用的方案(若有该方案,请大佬在评论区指导一下QAQ),为此耗费了大量时间。但在华清远见嵌入式培训的课程中教学老师提供了一种使用第三方软件通过局部网络的方式实现虚拟机与主机的数据传输,该软件名为WinSCP,下载官网提供如下

WinSCP官网

在Ubuntu虚拟机上

ifcongfig #查看当前ip地址

若在ifconfig 报错,可能是由于依赖文件没有安装,执行下列代码进行安装即可

sudo apt install net-tools

 根据获取到的ip地址进行配置即可,然后输入你的Ubuntu的用户名(该操作,登陆不上请耐心往下看)

 然后主机与虚拟机就可进行文件互传了,如果不喜欢单/双栏,可此处可以个更改主界面样式

 若出现连接不上的情况可能是你的Ubuntu虚拟机缺少ssh依赖文件,这里官方文档写的比较清晰

 所以我们安装 SSH,之后就可以正常连接了,若仍不行请在评论区留言。

​sudo apt-get install openssh-server 
​
sudo apt install ssh

sudo service ssh start

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小囧豆豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值