Linux命令笔记


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、编译生成动态库,并执行程序

上一篇:JVM快速入门


下一篇:信号(三)【信号保存】-2. 信号的保存