当前位置 博文首页 > 开发者常用及实用Linux Shell命令备忘录(小结)

    开发者常用及实用Linux Shell命令备忘录(小结)

    作者:lds_include 时间:2021-02-08 06:23

    最近都需要在 Linux 系统下开发,所以经常需要在终端中进行操作。Linux 有很多 shell 命令可以帮助我们完成任务,但不常使用的话就会忘记掉。

    本篇作为命令备忘录,我会将实际工作当中用到的命令记录下来,并长期保持更新。

    1.which

    which 用于查找一个文件,并返回绝对路径,查找的目录范围由系统的 PATH 指定。

    由于 Linux 中一切皆文件,所以 which 指定更多的是查找系统中有没有这个命令。

    比如,查找 ls 命令,我们可知它的可执行文件的位置

    which ls
    /bin/ls

    2.ln

    ln 是一个简单但却非常实用的命令,它的作用是为某个文件或者文件夹建立链接。

    命令语法

    ln [参数][源文件或目录][目标文件或目录]

    链接有软链接和硬链接两种,我们一般用软链接。

    ln -s test.txt  ../test1.txt

    将当前目录中的 test.txt 文件链接称为上一级目录的 test1.txt 文件。这样,其他程序访问 test1.txt 就如访问 test.txt 一样。

    3.tee

    tee 命令是我个人非常喜爱的一个命令。

    之前做 Android 开发,特别是源码编译的时候,经常在终端一瞬间就会打印无数条 log 信息,光靠肉眼是不行的,一个比较好的方法就是用命令保存起来。

    另外,用 find 命令查找文件时,如果文件过多,也可以用 tee 来帮忙。

    tee 命令可以接受标准输入,并输出到标准输出,同时保存到对应的文件。

    标准输入值得是终端的键盘输入,比如 c++ 的 cin,标准输出就是终端的输出,比如 c++ 的 cout。

    语法

    tee [-ai][--help][--version][文件...]

    参数 a 代表在后面添加内容而不是覆盖。

    tee tmp
    hello
    hello
    world
    world

    我在终端输入 tee tmp

    接着我输入 hello,终端响应 hello

    我输入 world,终端响应 world。

    然后,我通过 cat tmp

    查看 tmp 文件,它的结果如下:

    hello
    world

    这说明 tee 命令准确将标准输入保存到指定的 tmp 文件了。

    4.locate

    locate我也非常喜欢用,用它来快速查找。它是查数据库,而不是一个个文件真实查,所以,速度比较快。

    比如,我想查找系统有没有 libpng.so.

    我只需要这样

    locate libpng.so
    
    /home/frank/anaconda3/lib/libpng.so
    /home/frank/anaconda3/pkgs/libpng-1.6.34-hb9fc6fc_0/lib/libpng.so
    /home/frank/anaconda3/pkgs/libpng-1.6.37-hbc83047_0/lib/libpng.so
    /usr/lib/x86_64-linux-gnu/libpng.so

    Linux的常用的shell命令

    1.目录命令:

    ll /:查看根文件下的所有文件目录

    2.帮助命令:

    man ls与ls --help与info ls:(man ls:分屏显示;--help:全部加载,不完整;info ls:无用信息比较多)

    3.基本操作和命令:

    Ctrl+R和方向键中的上键:查找历时输入过的命令 
    Ctrl+C Ctrl+Z: 终止或者退出当前操作
    字母键i:进入文本编辑模式(可以修改Linux操作系统的init相关设置)
    编辑完成后按Esc键退出,然后如果确定保存修改并返回命令行界面输入命令-----:wq
    如果不保存用命令并退出编辑界面----:q  
    保存并强制退出----:q! 
    Shift+G 到文件末位 o:换行

    4.Table键的使用

     自动补全命令目录
     在某个目录下只有一个目录饿时候可以不用输入首字母直接敲table计划科自动补全目录
     双击table时一般为显示所有名或者列出某个目录下的所有目录和文件

    5.系统级别命令

     更改主机名命令:vi /etc/sysconfig/network
     查看当前Linux系统信息
     uname -a 显示系统及版本的所有信息
     uname -r 显示内核版本
     uname -m 显示计算机是多少位系统
     cat /proc/version Linux查看当前操作系统版本信息
     cat /etc/issue或cat /etc/redhat-release Linux查看版本当前操作系统发行版本
     查看系统小版本
     cat /etc/redhat-release
     查看当前主机名
     hostname
     查看第一个网卡
     ifconfig eth0
     查看和设置系统时间
     date
     显示当前在运行的进程包括对CPU内存使用量
     top -s
     管道:|
     cmd1|cmd2将cmd1输出结果交给cmd2命令来执行
     比如:查看进程:ps-fe|grep redis(这里表示查看redis的进程)
     grep:过滤
     #grep //输出包含指定字符串的行
      -i //忽略大小写
      -r //递归
      -v //取反
      --color //突出显示查找字符串
     重新启动Linux操作系统
     reboot
     init 6
     关闭Linux操作系统
     shutdown -h now
     init 0
     图形和命令行转换
     vi /etc/inittab
     init 3 命令行模式
     init 5 图形化
     查看虚拟机运行的运行级别(一般状态以5启动)
      cat /etc/inittab 
      1:单用户模式
      2和3一样的功能:多用户模式
      4:功能还没有定义(未使用)
      6:重启
     显示守护进程目录树
     pstree 或者 pstree -p(显示pid)
     查看正在运行的进程
     ps -aux
     显示所有的Java进程
     jps(如果没有安装JDK,就会显示没有该命令)
     结束正在运行的指定进程
     kill -9 pid(指的是进程的id)
     不进去系统更改root密码
     1.在grub选项菜单按e进入编辑模式
     2.编辑kernel那行 输入"1"(空格+1),然后按enter键
     3.按b重启
     4.进入后执行下列命令
      root@#passwd root(配置root的密码)
      Enter new unix password:输入新密码
      root@#init 6

    6.磁盘操作

     显示系统的磁盘空间用量
     df -h  //显示磁盘分区信息
     mkfs.ext3 /dev/sdb1 fs format //格式化硬盘分区
     fdisk -l  //查看磁盘分区
     du -h -s //查看目录或者磁盘分区的使用空间  
      比如:du -h /var/log/(表示查看var/log目录下的各文件所占空间大小) 
       du -h -s /var/log/(表示查看整个log目录的使用空间)
     挂载
     mount -t vfat/dev/sdb1/media/umnt  //挂载
     mount -o remount rw/  //重新挂载,或者将根目录以读写方式重新加载
     umount /media/umnt  //卸载
     文件系统修复
     fsck -y /dev/sda1 (修复的可以是分区也可以是目录,最好在单用户模式下使用)
     //linux文件格式
     ext4 ext3 ext2 vfat(fat32)
     //windows文件格式
     ntfs fat32

    7.用户和组的操作

     超级账户 root uid=0
     普通账户 uid>=500
     系统账户 uid=1~499
     /etc/passwd //保存账户的信息
     /etc/shadow //保存账户密码信息
     /root //root用户家目录
     /home/xxx  //普通用户xxx的家目录
     添加用户和删除用户 useradd
     #useradd  //创建用户 比如:useradd admin 另外一种方式:useradd -G manager tom(附加到组manager)
     -u 指定uid
     -d 指定宿主目录
     -s 指定使用shell
     -e 指定用户过期时间
     -g 指定基本组
     -G 指定附加组
     #useradd openlab
     #gpasswd -a openlab gropenlab //将用户加入到组中 比如:#gpasswd -a tom admin(将tom用户加入admin用户的组中)
     #gpasswd -d openlab gropenlab //将用户从组中删除
     #echo"123456"|passwd--stdin feige //不通过交互信息,直接修改密码
     #userdel -r //连主目录一起删除
     #userdel //删除用户 不删除用户文件
     #id openlab //显示用户信息
     vipw //查看用户
     创建用户组
     groupadd manager
     vigr 查看组
     groups manager 查看用户在哪些组中
     更改密码: 
     方式1:passwd tom 方式二:etho "root" |passwd --stdin root//不通过交互信息,直接修改密码
     锁定账户tom禁止其登录
     usermod -L tom
     切换当前账户为caimin
     su -caimin
     显示当前登录用户账户
     whoami
     查看系统文件判断添加用户组和添加用户操作是否正确
     cat /etc/passwd  或者使用 vipw
     cat /etc/group  或者使用 vigr

    8.文件操作

     cd 进入操作
     pwd 查看当前目录
     mkdir 新建文件夹
     mkdir -p //递归创建文件夹 比如:mkdir -p ./test1/caimin/test2
     (./是指用户所在的当前目录,/是指根目录,Linux的根目录是/,root超级用户的家目录是/root)
     touch /tmp/test1/file 创建空文件
     vi file //创建空文件并进入编辑界面,按e键进入编辑模式,按Esc键退出编辑
     :wq 保存编辑信息并退回命令行界面  :q 不保存并退回命令行界面 :q! 强制退出(不保存)
     列出文件和目录列表:
     ll -h /home/
     ls -s -h /home/  (ll相当于 ls -l)
     vi 和 vim 文本编辑
     文件内容查看
     cat -n //查看内容时显示行号
     cat /etc/rehat-release //不显示行号
     cat -n /etc/passwd //查看内容时显示行号
     显示文件的头10行或者尾10行
     tail //默认查看文件尾10行
     head  //默认查看文件头10行
      -n 数字 //查看指定头几行
     cat  cat -n  head tail
     tail -f 动态监控文件数据 (按Ctrl+C退出)
     more 百分比查看,不能回滚看
     less  能往回滚看
     复制文件
     cp ./tmp/file.txt /test
     复制目录
     cp -r ./tmp/test01 ./test02(递归复制文件)
     移动、剪切、重命名、删除
     mv -rf
     rename  批量重命名
     >  >>  覆盖和追加
     rm xxx/ 删除文件   rm -rf xxx/ 删除目录

    9.文件权限

     pwd 查看当前位置
     ls -l /data0 显示当前目录的文件

    10.打包tar原理

     -z 压缩 -c 打包  -x 解包
     -f 必须要 -C 指定解压位置 -v 输出信息
     /usr/bin/unzip  /bin/gzip /bin/gunzip
     打包案例(tar命令平常就替代了gz命令)
     //将一个文件打包
     tar -zcvf ./test.tar ./test(将test文件夹打包成test压缩包)
     //将多个文件打包成一个包
     tar -zcvf folder.tar file1.txt file2.txt 
     //将一个文件解压
     tar -zxvf ./test.tar
     //将一个文件解压到指定目录
     tar -zxvf ./test.tar -C /home/test/
     //将多个文件打包并压缩
     tar -zcvf ./test.tar.gz folder1 folder2
     //将多个文件解包并解压缩
     tar -zxvf ./test.tar.gz
     使用tar备份指定目录/data0/内容包括子目录中内容备份至/data3/data0.tar.gz
     tar -zcvf /data3/data0.tar.gz /data0
     恢复tar文件中的内容/data3/data0.tar.gz至/data2/
     tar -zxvf /data3/data0.tar.gz -C /data2
     which cmd 查找cmd命令所在路径 whereis
     which reboot
     locate 文件查找-效率很快(用的是数据库)
     locate unzip(一个索引名) //查找文件按所在
     updatedb //更新数据库使之生效
     find文件查找-效率很慢
     find 路径 条件    find / -name unzip(在根目录下找名字为unzip的文件)
     给shell命令取别名
     alias (此操作只针对当前session<连接>有效,另外再开启一个连接还是没有这个别名)
     eg:alias cle=clear(为清屏命令clear取别名cle)
     unalias 取消别名设置 eg:unalias cle
     永久设置:进入vi ~/.bashrc(家用户目录下的环境配置文件,这个文件只针对当前用户)
     进入编辑模式后,加入alias cle='clear' 保存退回命令行
     输入命令source ~/.bashrc就完成了
    js