ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Ubuntu入门与shell脚本

2022-05-19 15:02:03  阅读:184  来源: 互联网

标签:文件 gcc shell 入门 sudo value echo Ubuntu main


Ubuntu入门与shell脚本

摘要:笔记内容主要是,正点原子Linux驱动开发教程的第一部分——Ubuntu入门,自己写的笔记。

目录

Ubuntu入门

  1. CPU 越强越好,内存最小16G, 硬盘最好200G以上,显卡没有要求。
  2. 嵌入式Linux开发需要Linux环境,如果双系统的话,一次只能运行一个系统,不好用。而Ubuntu只做为编译使用,大部分还是采用windows下进行。所以需要双系统同时运行,所以需要虚拟机。
    1. 虚拟机软件有VMware,virtualbox;VMware是收费的,virtualbox是免费的
    2. 使用15.5.0以上的版本
  3. 配置虚拟机
    1. 核心分配,一般五五分
    2. 内存也是五五分
    3. 单独分一个盘给Ubuntu,300G
  4. 做开发选择Ubuntu的时候,选择LTS版本,是长期支持的
  5. Ubuntu默认不开启数字键盘
  6. Ubuntu右上角可以关机

Ubuntu终端命令与shell操作

  1. 终端打开命令,桌面右击,打开终端,Ctrl+Alt+T
  2. 常见命令
    1. ls命令,ls命令是浏览文件,ls命令是list的缩写,就是列举,默认打开的是用户的
      1. ls -a,有个空格,显示目录所有文件以及文件夹包括隐藏文件
      2. ls -l,详细列表
      3. ls -al,显示所有,并详细信息
      4. 没必要一定要进入,给路径就行
    2. cd命令进入某个文件路径
      1. /是根目录
      2. cd 路径
      3. cd ~
      4. cd ../返回上一级
      5. cd直接输入文件夹,就是相对路径,如果加上/就是绝对路径
    3. pwd命令,当前文件路径,print working directory
    4. uname,uname -a,系统信息查看命令,unix name
    5. clear,清屏,假的清屏,把内容搞到上面去 ,滚动鼠标可以查看到的
    6. cat命令查看文件内容,concatenate的缩写锁链的意思
    7. sudo,superuser do,超级用户权限,采用root用户权限
    8. sudo su,长期切换到超级用户,不建议
      1. 切换回来,sudo su mss
      2. 删库跑路,rm /*
    9. touch,创建文件
    10. cp拷贝,cp a.c b.c 拷贝a.c重命名为b,c
    11. rm命令删除
      1. rm 文件夹名 -rf,删除文件夹
      2. rm *.o,删除所有的.o文件
    12. mkdir创建文件夹,文件夹是蓝色的字体
    13. rmdir删除目录
      1. 目录非空会报错
    14. mv重命名或者移动
    15. ifconfig命令查看ip信息
      1. ifconfig 网卡 down/up 关闭/打开
    16. 命令 —-help,帮助命令
    17. reboot重启
    18. poweroff关机
    19. man系统帮助命令
    20. sysn数据同步到磁盘
    21. find找文件
      1. find -name name
      2. find -iname name,忽略大小写
    22. Ctrl+c打断
    23. grep查找内容
      1. grep -ir
    24. du 文件夹 -sh,查看文件大小
    25. gedit 问加减你,打开文件
    26. ps, 当前系统进行查看
    27. top 查看系统进行实时状态,类似于window任务管理器,退出按Q
    28. file,文档类型查看
    29. cat 查看文件内容

软件安装

  1. 安装方法
    1. 软件商店
    2. sudo apt-get install
    3. deb软件包安装
    4. 自己下载源码安装编译
      1. 下载完之后,进入
      2. make
      3. sudo make install
    5. 其他安装方法
  2. Ubuntu下面对应windows的.exe文件的是.deb
    1. 下载安装包,点击Linux类型的安装包
    2. 安装方式
      1. 双击安装
      2. sudo dpkg -i 软件名称
        1. dpkg是debian package
        2. usr -share-applications
        3. 或者搜索

文件

  1. bin是可执行二进制文件

  2. dev文件是驱动开发,cd /dev

  3. etc是配置文件,密码等

  4. home用户

  5. media是可插拔文件

  6. proc 是虚拟文件,内存的

  7. usr是unix software resources

  8. ./是相对路径,../返回上一级,.表示当前路径

    1. ./表示当前文件夹
  9. Linux开发选择FAT32格式的U盘

磁盘

  1. 磁盘文件是sd,ls sd
  2. 如何判定那个文件是U盘呢,重新插拔即可
    1. 一个是U盘,sdb
    2. 一个U盘的第一个分区,sdb1
  3. df与du查看容量
    1. df,整体,disk free
    2. du,单个,disk usage,du 磁盘名称 -h --max-depth=1
  4. mount和umount,挂载与卸载,路径是media的路径
    1. mount 设备 挂载路径
    2. 设备就是dev那的不能操作只能指示一下
    3. 当前路径是U盘中时候,不能卸载成功
    4. sudo mount -o iocharset=utf8 /dev/sdb1 /media/mss/msspansion
      1. 防止中文乱码问题
  5. fdisk 磁盘管理
    1. fdisk -l列出所有的磁盘
    2. fdisk操作的是dev
    3. sudo fdisk /dev/sdb
    4. 必须输入w保存命令,另外,删除的时候得卸载磁盘才可以
    5. 1G=1024$$1024$$1024字节,一个扇区是512个字节
      1. 一个G是2097152个扇区
  6. 做U盘系统
    1. sudo mkfs -t fat /dev/sdb1

压缩与解压缩

  1. Linux下的压缩文件格式
    1. .tar
    2. .tar.bz2
    3. .tar.gz
    4. 后两者常用
  2. gzip,bzip2,Ubuntu下的压缩软件与命令
    1. gzip只能压缩文件,不能打包
  3. tar打包,就是新建一个归档,重点
    1. -c,创建压缩文件
    2. -x,解压缩
    3. -j 使用bzip2进行压缩
    4. -z 使用gzip进行压缩
    5. -v 显示过程
    6. tar -vcf bzip2test.tar bzip2test,新建的文件写前面
    7. tar -vcjf bzip2testtar.bz2 test
    8. tar -vxjf test.tar.bz2
  4. rar
    1. 帮助,rar
    2. rar a test.rar test
    3. rar x test.rar
  5. zip,unzip
    1. zip test.zip test
  6. 也可以通过图形化界面进行压缩与解压缩,但是这样比较偷懒

用户与用户组

  1. 用户分为初次用户、root用户和普通用户。初次用户比普通用户权限大
  2. sudo vi /etc/password
  3. sudo gedit /etc/passwd,是用户信息
  4. sudo gedit /etc/shadow是密码,加密的
  5. 用户组id,用户组这些说白了就是控制文件的访问权限
  6. 图形化界面创建用户组
    1. sudo apt-get install gnome-system-tools
  7. 代码创建用户和用户组
    1. adduser 用户名
    2. finger 用户名
    3. passwd 用户名
    4. addgroup 用户组名
    5. groups 用户组名
    6. delgroup 用户组名

文件权限

  1. 文件的三个属性
    1. 读,r
    2. 写,w
    3. 执行,x
  2. 九个字符
    1. ---|---|--|,用户|用户组内成员|其他用户
  3. 修改文件权限命令
  4. R W X,三位二进制表示为 4 2 1
    1. chmod 数字 文件名,change the permission mode of the file
    2. chmod 664 hello
  5. 编译的话,用gcc hello.c -o hello
  6. 查看权限,ls 文件 -l
  7. sudo chown root hello
  8. sudo chown .root hello
  9. sudo chown mss.mss hello,同时更改用户和用户组
  10. sudo chown -r mss.mss 路径,路径下所有的用户和用户组更改

文件连接

  1. 分为软连接和硬连接,软连接又叫符号连接,

  2. inode记录文件属性,一个文件一个inode,类似于文件的ID,查找文件的时候要先找到inode,才能读出文件的内容

  3. In命令,是LN,是link的缩写,如果创建符号连接,需要加关键字s,如果是硬连接的话,就不需要s

    1. In hello.c hello1
  4. gcc后面必须紧跟着源文件名字,后缀在源文件名字后面

  5. ll -i hello*打印inode

  6. 硬连接,通过inode连接产生新的文件名,而不是产生新文件

    1. 硬连接是多个文件指向一个inode,具备相同inode的多个文件互为硬连接文件
    2. 对于硬连接文件,只有删除了源文件和对应的所有硬连接的文件,文件实体才会被删除
    3. 硬连接可以防止文件被误删除,不是复制了一份,因为一旦修改其中的一个,其余的都会修改
    4. 硬连接不能跨文件系统
    5. 硬连接不常用
  7. 软连接用的多

    1. 软连接相当于windows下的快捷方式

    2. 符号连接最好使用绝对路径,否则会出问题

    3. 直接cp软连接 相对路径到新的路径的时候,就会变成拷贝新的一份文件

      1. cp -d hello test/,加上-d就会保持软连接属性
    4. ln -s 绝对路径 软连接名称

VIM编辑器

  1. rm指令
    1. rm hello*
  2. 安装VIM之后,使用vi打开,
    1. vi test.txt直接新建并打开
  3. vim打开有三种模式
    1. 指令模式/一般模式,默认,不能文本编辑
      1. dd,删除光标所在的行
        1. 删除n行,4dd,从光标开始删除4行
      2. u,撤销操作
      3. .操作类似F4,重复上一个操作
      4. yy复制这一行
        1. 复制多行就是nyy
      5. p粘贴到光标xiayihang
      6. P粘贴到光标上一行
    2. 编辑模式,按a即可,退出使用Esc
      1. 如果不正常退出的话,删除.*swap即可
    3. 命令行模式,一般模式下,输入:即可
      1. :x,保存退出
      2. :q,退出
      3. :w,保存
      4. :q!退出不保存
  4. 设置vim编辑器进行编程
    1. sudo vim /etc/vim/vimrc
    2. 在文本最后,输入set ts =4
    3. set nu,显示行号

make和Makefile

  1. make工具是一个软件,使用gcc编译器,可以自动化编译,只编译修改过的文件

  2. Makefile是make使用的文件,决定了编译规则

  3. gcc编译多个文件

    1. gcc 文件1名 文件2名 -o main
      1. 没有先后顺序
    2. 第二种语法
      1. gcc -o main main.c
        1. gcc -o 新文件名字 旧的文件
  4. 编译花费时间,但是没修改的编译的话就浪费了时间

    1. 先编译为.o文件,在连接,如果改了那个就重新.o,再连接

    2. .o命令

      1. gcc -c main,c
    3. 连接命令

      1. gcc .o .o .o -o main
        1. gcc .o文件名 -o 新文件名
    4. 上述原理就是Makefile的原理,Makefile就是这样写的Makefile和makefile都可以

      main:main.o input.o calcu.o
      	gcc -o main main.o input.o calcu.o
      main.o:main.c
      	gcc -c main.c
      input.o:input.c
      	gcc -c input.c
      calcu.o:calcu.c
      	gcc -c calcu.c
      clean:
      	rm *.o
      	rm main
      
    5. 编写玩Makefile文件之后,直接执行make命令,它会自动执行Makefile文件的

    6. make clean输入这个清除编译出来的文件

    7. make重新编译的时候会检查最后的修改日期如果修改了,就会重新编译,否则不编译的

    8. Makefile的printf是echo,echo前面加上@表示不输出具体过程

      #规则格式:必须使用tab键,不能使用空格,第一条为默认对象,也就是终极目标
      
      目标:依赖项
      	命令1
      	命令2
      #gcc的时候,为了减少变量的重复输入,可以将变量进行定义
      #gcc中只有一种变量类型,就是字符串
      object=main.o input.o calcu.o
      
      #引用变量的时候采用$(),美元符号加括号的形式
      main:$(object)
      	gcc -o main $(object)
      	
      #赋值符号=
      #变量先定义,最终数值,取决于最新定义的数值
      
      #赋值符号:=
      #数值取决于最开始定义的,以后再=赋值不起作用
      
      #赋值符号?=
      #如果前面没有定义就采用后面的数值,如果定义了,就采用前面的数值
      
      #追加+=
      #在前面的基础上进行追加
      
      
      #通配符%,避免相同规则重复书写
      #自动化变量,采用$<等等,命令必须采用具体的文件名
      	#最常用的是:
      		#$@,表示目标集合
      		#$<,依赖文件,如果是通配符,则代表全部的符合要求的依赖文件
      		#$^,依赖文件的集合,会去除重复文件 
      	
      %.o:%.c
      	gcc -c $<
      # 注意$<已经表示文件全部了,不需要再加后缀名
      
      #伪目标,就是clean那种
      #但是存在问题,如果存在clean文件,就不会执行指令了
      #所以需要声明为伪目标,
      .PHONY : clean
      clean:
      
      #这两步之后,不管有没有重名文件,都会执行伪目标
      
      

shell脚本

  1. shell脚本就是命令行输入命令,shell脚本类似于windows下的批处理 命令
  2. 后缀名为.sh,第一行为;第一行必须输入#!/bin/bash
#!/bin/bash
echo "please enter your name"
read name
echo "your name:" $name


read -p "please your age and height" age height
echo "your age is $age,you height is $height"


echo "please enter two int num:"
read -p "first num:" first_num
read -p "second num:" second_num
total=$(($first_num+$second_num))
# 运算符是美元符号,两对括号,其中赋值符号两边不能放空格,否则报错
echo "$first_num+$second_num=$total"

#test命令对数值、字符、文件三方面进行测试
# cmd1 && cmd2,cmd1正确执行才会执行cmd2
# cmd1 ||cmd2,cmd1正确执行就不执行cmd2,否则执行cmd2

echo "please enter filename"
read -p "filename:" filename
test -e $filename && echo "$filename exist" || echo "$filename does not exist"

echo "please enter two string:"
read -p "first string" first_str
read -p "second string" second_str
test $first_str == $second_str && echo "==" || echo "!="
# ==前后必须有空格,否则结果运行不正确

# [] 用来判断字符串是否相等,相当于 test 
[ "$first_str" == "second_str" ]
# 首先括号附近得空格;其次字符串必须引号引起来,!=是!和=的组合
[ "$first_str" != "second_str" ]

# $0文件第一个参数 $1 $@参数内容 $#最后一个参数标号,文件本身是$0
./my.sh a b c
#此时 $0 为./my.sh $1为a,$2为b,$3为c,$#表示参数个数3,$@打印所有参数也就是a b c


read -p "please enter(Y/N):" value
if[ "$value" == "y" ] ||[ "$value" == "Y" ];then
	echo "your option is Y"
	exit 0
fi

if[ "$value" == "N" ] ||[ "$value"== "n" ];then
	echo "your option is N"
	exit 0
fi
#if 开头fi结束;if 条件 :then;exit 0是结束退出
#双等号前后必须有空格,否则结果运行不正确
#shell 中then前面的是分号


read -p "please enter(Y/N):" value
if[ "$value" == "y" ] ||[ "$value" == "Y" ];then
	echo "your option is Y"
	exit 0
else
	echo "your option is $value"
	exit 0
fi
#if else语句中,else后面没有任何符号;但是两个分支都要exit 0


read -p "please enter(Y/N):" value
if[ "$value" == "y" ] ||[ "$value" == "Y" ];then
	echo "your option is Y"
	exit 0
elif [ "$value" == "N" ] ||[ "$value"== "n" ];then
	echo "your option is $value"
	exit 0
else
	echo "your option can not identify!"
	exit 0
fi
#是elif 是elif


#shell case语句
case $变量 in:
	"变量1")
		语句1
      ;;
     "变量2")
      	语句2
      ;;
esac
#末尾以case反过来写结束,每一个语句结束带两个分号,选项只有右边的括号,左上角是esc,他多一个字母a,是esac

  1 #!/bin/bash
  2 case $1 in 			#首先$1表示第一个输入的参数,其次in后面没有冒号
  3     "a")
  4         echo    "parameter is a"
  5         ;;
  6     "b")
  7         echo    "parameter is b"
  8         ;;
  9     *)				#这直接是*,不能是“*”,这样表示*字符,而不是通配符了
 10         echo    "cannot identify"
 11         ;;			#这记得加上两个分号
 12 esac
          
          
#shell函数
function help(){
  	echo "this is help cmd!"
}

function close(){
	echo "this is close cmd!"
}

case $1 in
	"-h")
		help		#调用函数的时候直接写函数名即可,不需要写参数
		;;
    "-c")
    	close		#调用函数的时候直接写函数名即可,不需要写参数
    	;;
esac


#shell函数传参

print(){
	echo "parameter 1 is : $1"
	echo "parameter 1 is : $2"
}
  
print a b 		#传参就是函数名 后面直接加参数,不需要括号


#shell 的while循环
while  [ 条件成立  ]
do
	循环体
done

while[ "$value" != "close" ]
do
	read -p "please enter para:" value
done
echo "while stopped!"


#shell for循环,for循环与while循环一样都是do done循环
for name is mss mss1 mss2 mss3
do
	echo "your name is : $name"
done

#shell 类似c语言的for循环
read -p "please enter count:" count
total=0
for ((i=0;i<=count;i=i+1))
do 
	total=$(($total+$i))
done
echo "1+……+ $count = $total"

标签:文件,gcc,shell,入门,sudo,value,echo,Ubuntu,main
来源: https://www.cnblogs.com/msspansion/p/16288486.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有