ctrl+alt+t --->打开终端快捷方式
gec@ubuntu64:~$ ---》shell命令行,命令行提示符
gec -->主机用户名
@ -->作为分隔符
ubuntu64 -->主机名
: -->作为分隔符
~ -->表示用户当前路径 ~ 表示家目录 ~ == /home/gec
$ -->表示普通用户
# -->表示管理员用户
----
sudo -s --》切换管理员用户
exit --》退出管理员用户
sudo vi /etc/vim/vimrc -->临时切换管理员权限
----
ls -->查看当前目录下的目录和文件
ls -l -->查看当前目录下的目录和文件的详细信息
ls -a -->查看当前目录下的目录和文件,包括隐藏文件
ls -la -->查看当前目录下的目录和文件,包括隐藏文件详细信息
ls filename -->查看当前目录下的是否有filename这个文件
ls -l filename -->
-----
ls -l -->查看当前目录下的目录和文件的详细信息
-rw-rw-r-- 3 gec gec 12 3月 20 15:28 1
Linux下一切皆文件
第一个字符:表示文件类型
Linux文件种类:7种
- --->普通文件(.txt 、.c、.doc、二进制文件、.png)
d --->目录文件(文件夹)
l --->链接文件(快捷方式)
b --->块设备文件(内存)
c --->字符设备文件
s --->套接字文件(用于网络传输)
p --->管道文件(先进先进)
第二个字符至第十个字符:分别表示三种用户对该文件的操作权限
r --->read 可读
w --->write 可写
x --->excute 可执行
- ---》 表示没有该权限
第一种用户:文件拥有者
第二种用户:同组用户
第三种用户:其它用户
第十一个字符:表示硬链接的个数
第十二个: 文件拥有者的用户名
第十三个:文件拥有者的所属组名,如果没有分组,指的就是自己的用户名
第十四个:文件的大小
第十五个:文件最后的修改时间
----
cd -->切换路径
cd dirname -->进入该目录/路径
cd / -->进入根目录
cd .. -->返回上一级目录
cd ../.. -->返回上一级目录的上一级目录
cd ~ -->进入家目录
cd -->进入家目录
cd - -->返回原本所在的路径
cd . -->进入当前目录
~ 《==》 /home/gec -->家目录
. 当前目录
.. 上一级目录
cd dev <==> cd ./dev <==> cd ./dev/ <==>cd dev/
都是一样的写法
/home/gec 对于路径来说 最前面的/才有意义,表示根目录
/写到中间或者最后面表示分隔符没有实际作用
绝对路径:从根目录开始写的路径
eg: cd /home/lcy
相对路径:不是从根目录开始写的路径
eg: cd ./../../home/lcy
---------
Linux目录结构:
参考链接:
https://www.cnblogs.com/ajianbeyourself/p/4187535.html
---------
mkdir/rmdir 创建空目录/删除空目录
mkdir dirname --->创建一个新的目录dirname
mkdir dirname/dirname1 在已存在的dirname创建一个目录dirname1
mkdir dirname/dirname1 -p 在不存在的dirname创建一个目录dirname1
rmdir dirname --->只能删除空目录
-------
rm 删除文件或目录
rm filename -->删除一个文件
rm dirname -r --->删除一个目录(不管里面是否有文件)
rm dirname -rf --->强制删除一个目录(不管里面是否有文件)
-r --->递归
-f --->强制删除
删库跑路---->不要尝试
sudo rm /* -rf
* -->通配符
------
touch 创建文件以后不进入编辑模式
touch filename -->创建文件以后不进入编辑模式
如果文件已存在,表示更新文件最后修改时间
vi filename -->创建文件以后进入编辑模式
vim filename --->创建文件以后进入编辑模式
gedit filename -->创建文件以后进入编辑模式
-------
cp 复制文件或目录
cp filename filename1 -->复制一个内容一样文件
cp filename dirname -->把filename复制到dirname
cp dirname dirname1 -r -->把目录dirname复制到dirname1
-------
mv 剪切文件或目录/更改文件或目录的名字
mv filename dirname -->把filename剪切到dirname
mv dirname dirname1(存在) -->把目录dirname剪切到dirname1
mv filename filename1 --> 把filename改名为filename1
mv dirname dirname1(不存在) --> -->把目录dirname改名dirname1
-------
cat/more/less 查看文件里面的信息
cat filename --> 查看filename文件里面的信息
cat filename -n -->查看filename文件里面的信息,并打印它的行号
more -->分页查看文件里面的内容-->按回车切换下一行和空格可以翻页
less -->分页查看文件里面的内容-->按回车切换下一行和空格可以翻页-->输入q退出查看
方向键上下也可以切换
--------
head 查看文件开头的信息
head filename --> 默认查看文件开头的十行信息
head filename -n 20 -->默认查看文件开头的二十行信息
tail 查看文件结尾的信息
head filename --> 默认查看文件结尾的十行信息
head filename -n 20 -->默认查看文件结尾的二十行信息
--------
sort 给文件里面的内容排序
sort filename -->给文件里面的内容排序(正序)
sort filename -r -->给文件里面的内容排序(反序)
-----
uniq 去除相邻行的重复内容
uniq filename -->去除相邻行的重复内容
sort filename | uniq --->把filename文件里面的内容排序,然后给uniq作为输入的,然后输出我们所要的内容
| --->管道文件
-------
find 在目录中查找文件
find dirname -name "1.c" -->在目录dirname里面查找1.c文件
find dirname -name "*.c" -->在目录dirname里面查找以.c为后缀的文件
find dirname -type d -->在目录dirname里面查找某种类型的文件
------
grep 在文件中查找字符串
grep 'hello' filename -->在文件filename 里面查找是否有字符"hello"
grep 'hello' filename -n -->在文件filename 里面查找是否有字符"hello",并把它所在行号打印
grep 'hello' dirname -rnH -->-->在目录dirname 里面查找是否有字符"hello",并把它所在路径、文件名和行号打印
-------
chmod -->更改文件的权限 -->在共享文件夹上不一定可以修改文件的权限
eg:
gec@ubuntu64:~$ ls -l 4.c
-rw-rw-r-- 1 gec gec 15 3月 4 10:31 4.c
rw- rw- r--
rw- rw- r-- 用户对文件的操作权限
110 110 100 --->二进制
6 6 4 --->八进制
7 7 7 --->八进制
111 111 111 --->二进制
rwx rwx rwx 用户对文件的操作权限
eg:
gec@ubuntu64:~$ chmod 777 4.c
gec@ubuntu64:~$ ls -l 4.c
-rwxrwxrwx 1 gec gec 15 3月 4 10:31 4.c
rwx rw- r-x
111 110 101
7 6 5
-------
ln 创建快捷方式 (软连接不能在共享目录新建,目录不能创建硬链接文件)
创建软链接:
ln -s filename newname -->给filename文件创建一个快捷方式叫做newname
创建硬链接:
ln filename newname -->给filename文件创建一个硬链接叫做newname
硬链接文件的类型是: 普通文件
软连接文件的类型是: 链接文件
硬链接文件在源文件删除的情况,文件内容依然可以通过硬链接文件找到
软连接文件在源文件删除的情况,文件内容不能通过软链接文件找到
-------
diff 比较两个文件内容是否一样
diff filename filename1 -->比较两个文件内容是否一样
-------
tar 压缩和解压
c ---》表示归档
v ---》把过程打印输出
f ---》指代文件
x ---》释放
xz、gz、bz2压缩算法不同
tar -cvf 1.tar *.c 把所有的.c归档,生成1.tar
tar -xvf 1.tar 释放1.tar文件里面的文件
xz 1.tar 把1.tar文件压缩生成1.tar.xz
xz --decompress 1.tar.xz 把1.tar.xz文件压解压生成1.tar
tar -Jcvf 1.tar.xz *.c 把所有的.c文件压缩生成1.tar.xz
tar -Jxvf 1.tar.xz 把1.tar.xz文件压解压
tar -zcvf 1.tar.gz *.c 把所有的.c文件压缩生成1.tar.gz
tar -zxvf 1.tar.gz 把1.tar.gz文件压解压
tar -jcvf 1.tar.bz2 *.c 把所有的.c文件压缩生成1.tar.bz2
tar -jxvf 1.tar.bz2 把1.tar.bz2文件压解压
------
echo -->在屏幕输出指定字符
echo "hello" 在屏幕输出hello
echo "hello" > 6.c 把字符串hello导入文件6.c , ">"表示重定向
echo $PATH 打印环境变量中的PATH的值 $ -->表示调用环境变量
------
env 查看整个系统的环境变量
环境变量是整系统都能使用的变量 ---》操作系统中用来指定操作系统运行环境的一些参数
PATH --->它是系统环境变量中的一个,表示系统执行可执行文件的时候,
如果没有写路径,就会在当前设置的PATH环境变量设置的路径里面去找这个执行文件
执行可执行文件时:./hello 敲回车 ---> ./ 表示hello文件的路径
ls 敲回车--> ls它也是一个可执行文件,但是它不用输入路径就可执行
环境变量的作用:
https://www.jianshu.com/p/3faacdf979e5
------
export 临时设置环境变量的参数
export PATH=$PATH:/home/gec -->把环境变量中的PATH增加一个路径
永久设置:
1、打开 ~/.bashrc ,把export PATH=$PATH:/home/gec加入配置文件
sudo gedit ~/.bashrc
2、该配置文件是在终端打开的时候加载了一次,不能立刻生效
3、立刻生效还需加载一次配置文件:
source ~/.bashrc
-----------------------------
把一个可执行文件设置成,不需要加路径名也可以运行---》类似于Linux命令的效果
例子:
把家目录里面的可执行文件hello,设置为不需要加路径名也可以运行
1、可以直接把该文件复制到/bin
cp hello /bin
2、可以把家目录的路径设置到环境变量PATH里面
(1)临时设置环境变量PATH ---->新开的窗口里面是没有改路径
export PATH=$PATH:/home/gec
(2)永久设置环境变量PATH
1》打开配置文件
sudo vi ~/.bashrc
2》把设置命令:export PATH=$PATH:/home/gec加到配置文件最后一行
3》使配置文件生效
source ~/.bashrc
------------------------------
练习:
1、把一个可执行文件,设置为不输入路径也可以执行,可以永久设置
------------------------------
ubuntu16.04:
ctrl+alt+F2 -->切换成纯终端界面
ctrl+alt+F7 -->切换成图形界面
------------------------------
pwd --》打印当前路径
----
who --> 显示已经登录的用户
环境变量HOME:当前用户的主目录(也称家目录)
sudo -s -->临时切换管理员用户 ---》表示原本用户还是普通用户
sudo su -->完全切换为管理员用户 ---》表示现在的用户是管理员用户
exit 退出管理员用户
which --->查找Linux命令或可执行所在路径
--------------
clear 表示清屏
---
alias 临时给命令取别名 --->如果要永久设置,必须加入到配置文件
alias c='clear' --->给clear取别名为c
alias ll='ls -l'
-------------
man --->查找帮助手册
man man ---->自己查找自己
1
可执行程序或 shell 命令
2
系统调用(内核提供的函数)---》Linux操作系统自带的函数
3
库调用(程序库中的函数)---》标准C语言库函数
man 1 ls --->查找Linux命令
man 2 open --->查找系统函数
man 3 printf --->查找标准C语言库函数
man -f printf --->查找所有关于printf函数的用法
man ascii --->查找ascii码表
========================动态库静态库的生成========================
函数库:
1、便于移植,方便使用
2、保密, 保护知识产权
动态库静态库编译之前一定要先函数模块化,主函数不要弄成动态库静态库
静态库:
编译生成静态库:
1、把.c文件编译生成.o文件(二选一)
gcc -c add.c
gcc add.c -c -o add.o
2、把.o文件编译生成静态库
ar -rc libadd.a add.o
3、静态库的使用(二选一):
gcc main.c libadd.a -o project
gcc main.c -o project libadd.a
4、执行文件
./project
动态库:
1、把.c文件编译生成.o动态库
gcc -fpic -shared add.c -o libadd.so
2、动态库的使用(三选一):
gcc main.c libadd.so -o project
gcc main.c -o project libadd.so
gcc main.c -o project -L . -ladd
3、执行二进制文件时:
./project
如果出现以下错误:
./main: error while loading shared libraries: libadd.so: cannot open shared object file: No such file or directory
解决方法:
(1)永久设置需要把libadd.so拷贝到/lib
sudo cp libadd.so /lib
(2)临时设置环境变量LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/hgfs/GZ2019期嵌入式直播10班/02Linux基础/02/code/test_动态库
永久设置:
把export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/hgfs/GZ2019期嵌入式直播10班/02Linux基础/02/code/test_动态库加入配置文件 ~/.bashrc
LD_LIBRARY_PATH的作用:执行可执行文件时,使用到动态库,系统会在 LD_LIBRARY_PATH设置的路径下去查找动态库,进行调用
4、执行
./project
注意:LD_LIBRARY_PATH告诉编译器去哪个路径下找动态库
-----------------------------------
动态库和静态库的名称问题:
(1)
libadd.so
lib add .so.8.3.0
前缀+库名+后缀+版本号
(2)
lib add .a
前缀+库名+后缀
----------------------------------
动态库和静态库的区别:
静态库是把静态库函数放到一起编译生成二进制文件(比较大)
动态库是把动态库函数没有放到一起编译生成二进制文件(相对比较小),执行文件的时候是需要去/lib去调用
---------------------
动态库的库名:
libadd.so.9.0
前缀+库名+后缀+版本号
把动态库和main.c编译的命令:
gcc main.c -o project -L . -ladd
-L 告诉编译器去哪里找动态库
-l 告诉编译器要连接的动态库的库名(不需要写前缀、后缀、版本号)
-I 告诉编译器去哪里找头文件
-----------------------
练习:
1、编译生成动态库,并执行程序