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

最近都需要在 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就完成了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Linux shell ftp命令根据文件日期下载文件的方法

    需求:ftp获取远程数据的文件,根据文件的创建时间点下载文件. 可以自行扩展根据文件的大小等其他需求. 知识点总结: 1.获取文件的时间: ls -lrt|awk '{print $6" "$7" "$8}' 时间内容: Sep  8 16:03 2.时间格式转换 date -d "Sep 8 16:03" +%Y%m%d%H%M 转换结果: 201709081603 3.指定文件名,正则匹配 pattern="${month}.*.d

  • linux shell命令行选项与参数用法详解

    问题描述:在linux shell中如何处理tail -n 10 access.log这样的命令行选项?在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景.1,直接处理,依次对$1,$2,...,$n进行解析,分别手工处理:2,getopts来处理,单个字符选项的情况(如:-n 10 -f file.txt等选项):3,getopt,可以处理单个字符选项,也可以处理长选项long-option(如:--prefix=/home等).总结:小脚本手工处理即可,getopt

  • 一天一个shell命令 linux文本操作系列-touch命令用法

    之前我们学过dd创建测试文件,如果不需要考虑文件大小,创建一个空白文件的话,不妨试试 touch: 将每个文件的访问时间和修改时间改为当前时间. 不存在的文件将会被创建为空文件,除非使用-c 或-h 选项. 入门例子: 1. 如果想生成100个空文件 for name in {1..100}.txt do touch $name done 2. 改进一下 touch test{1..20}.c 查看 --help 用法:touch [选项]... 文件... 将每个文件的访问时间和修改时间改为当

  • Linux Shell脚本系列教程(二):终端打印命令详解

    终端打印 终端是交互式工具,用户可以通过它与shell环境进行交互.在终端中打印文本是大多数shell脚本和工具日常需要执行的基本任务.通过终端打印,人们可以知道系统的运行状态,这对用户来说是至关重要的. echo终端打印 复制代码 代码如下: echo "Welcome to Bash" echo 'Welcome to Bash' echo  Welcome to Bash 以上三种方法的效果是一样的,输出内容都是"Welcome to Bash",并在末尾添加

  • linux中 shell 历史命令记录功能

    在 Linux 下面可以使用 history 命令查看用户的所有历史操作,同时 shell 命令操作记录默认保存在用户目录的 .bash_history 文件中.通过这个文件可以查询 shell 命令的执行历史,有助于运维人员进行系统审计和问题排查,同时在服务器遭受黑客攻击后,也可以查询黑客登录服务器的历史命令操作.但是黑客在入侵后,为了抹除痕迹,会删除 .bash_history 文件,这个就需要合理备份这个文件了. 默认的 history 命令只能查看用户的历史操作记录,但是不能区分每个用户

  • Linux通过Shell脚本命令修改密码的两种方式

    交互方式修改密码 1. ssh 远程到主机: 2. 切换到root账号: [一般都是切换到root进行密码修改,如果普通用户修改自己的密码,要输入原密码,然后新密码要满足复杂度才OK]: 3. passwd username 使用passwd username 修改 username 的密码: 使用该命令会有提示,即进入了交互界面,输入密码即可. 使用脚本修改密码 很多时候我们可能需要远程执行服务器上的脚本来修改账号密码,此时就没有办法进行交互了. 此时可以使用如下两种方式修改密码: 方式1:

  • Linux命令行和shell脚本编程宝典 Richard Blum

    第一个脚本文件 复制代码 代码如下: #!/bin/bashecho "This is my first bash code!"exit 0 重定向符号和数学计算 复制代码 代码如下: #!/bin/bashecho -n "The time and date are: "datevalue1=100  #等号前后不允许出现空格value2=$value1echo -n "value1="echo $value1echo -n "val

  • 一天一个shell命令 linux文本内容操作系列-cut命令详解

    说明: cut 按列切分文件,你可以指定分隔每列的定界符.在cut的术语中,每列都是一个字段,就是有时候说第一列,可能表述称第一个字段. 实战: 假设有文件data.txt,格式如下 NO    Name    Mark    Percent  1    Sarath    45    90  2    Alex    49    98  3    Anu    45    90 分隔符(定界符)为Tab 制表符 如果我要取得第二列,所有人的名称,有什么好的办法吗?此时cut该大显身手了. 1.

  • Ruby中执行Linux shell命令的六种方法详解

    在Ruby中,执行shell命令是一件不奇怪的事情,Ruby提供了大概6种方法供开发者进行实现.这些方法都很简单,本文将具体介绍一下如何在Ruby脚本中进行调用终端命令. exec exec会将指定的命令替换掉当前进程中的操作,指定命令结束后,进程结束. 复制代码 代码如下: exec 'echo "hello world"' print 'abc' 执行上述的命令,结果如下,我们可以看到没有abc的输出,可以看出来,在执行echo "hello world"命令后

  • linux shell命令执行顺序的控制方法

    &&命令1 && 命令2:如果这个命令执行成功&&那么执行这个命令.[jb]/usr/xxxx/ytcclb>ls -l test.sql-rwxr--r-- 1 xxxx group 225 Nov 15 14:12 test.sql[jb]/usr/xxxx/ytcclb>cp test.sql test.bak && echo "coping file ok!"coping file ok![jb]/us

随机推荐