Linux基础 装饰你的Shell

发布于 2022-07-02  97 次阅读


前言

上回刚刚学完Linux 简单地使用Vim编辑器,有没有发现自己变强了 :stuck_out_tongue_winking_eye:

那么,本回会继续在Shell中,再学多几条命令,顺便装饰一下自己的Shell吧!

如果你还是用root用户也没关系;如果你用了普通用户,那么有些命令前面需要用sudo并输入密码以获取root权限。

测试环境

uname -a  # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

我们可以先进入自己的home目录(虽然好像没什么用):

cd ~

apt和apt-get

现在,你可以尝试一下这个命令:

sudo apt-get update

我的主机输出结果是:

Hit:1 http://mirrors.tencentyun.com/ubuntu focal InRelease
Hit:2 http://mirrors.tencentyun.com/ubuntu focal-security InRelease
Hit:3 http://mirrors.tencentyun.com/ubuntu focal-updates InRelease
Hit:4 https://download.docker.com/linux/ubuntu focal InRelease
Reading package lists... Done

我用的是一个腾讯云VPS,所以上面用的是http://mirrors.tencentyun.com/XX之类的地址。如果你是自己装系统,一般是国外的地址,还需要特别地改变一个国内的镜像(比如阿里云、清华大学的镜像等待),这样可以大大增加访问的速度。如果你用VPS,一般都是内置好的。这里我也不改了。

sudo apt-get update大致就是获得一个清单,以了解镜像源中有哪些软件信息和本机相比发生了变化。如果要更新全部内容,只需要:

sudo apt-get upgrade

一般而言,更新是比较安全的,不会过度地影响系统的稳定性。如果偶然有一些Error报错,但只要不影响使用,我觉得也没有关系。

另外,将软件更新至最新版本也有利于降低软件漏洞本身所带来的安全隐患。不过对个人用户而言重不重要,就见仁见智了,哈哈!我只是单纯地觉得更新到latest是比较爽的,每次看着很多信息输出,就觉得蛮帅的。当然,你也可以用Ctrl+L或者clear清一下屏。

下面,我们来装一些酷酷的软件:

sudo apt-get install -y ncdu htop zsh ranger neofetch

随便一提,-y参数是表明自己要安装,就不要再在安装的过程询问YesorNo了。

我的输出如下:

Reading package lists... Done
Building dependency tree
Reading state information... Done
htop is already the newest version (2.2.0-2build1).
ncdu is already the newest version (1.14.1-1).
neofetch is already the newest version (7.0.0-1).
ranger is already the newest version (1.9.3-1build1).
vim is already the newest version (2:8.1.2269-1ubuntu5.7).
vim set to manually installed.
zsh is already the newest version (5.8-3ubuntu1.1).
0 upgraded, 0 newly installed, 0 to remove and 12 not upgraded.

因为我已经安装过了,所以是0 upgraded, 0 newly installed。如果你第一次装,应该会下载一堆东西。等它结束就好。

从这里,你应该可以感觉到,apt-get(或者apt)有点类似于360软件库之类的,可以下载软件。确实,通过apt-get可以安装很多比较常用或者基础的软件,我觉得这也是Linux发行版与Windows相比的一个特别之处。当然,并不是所有的软件都可以通过apt-get这样安装的。比如,安装docker应用的时候,docker应用也会有一个自己的镜像源和命令docker pull。还有很多奇奇怪怪的源,不过其实并不太常用。如果你曾经给IOS设备越狱,那个软件源和这里的源就是类似的。

这个时候,细心的同学可能会发现一些特别的东西。比如上面这几个命令,可以归纳成这种形式:

sudo apt-get [参数] # 参数=update/upgrade/install等

实际上,这也是许多Shell命令的基本形式了。我们尝试看看apt-get的help文档:

apt-get -h

或者:

apt-get --help

输出结果类似于:

apt 2.0.6 (amd64)
Usage: apt-get [options] command
       apt-get [options] install|remove pkg1 [pkg2 ...]
       apt-get [options] source pkg1 [pkg2 ...]

apt-get is a command line interface for retrieval of packages
and information about them from authenticated sources and
for installation, upgrade and removal of packages together
with their dependencies.

Most used commands:
  update - Retrieve new lists of packages
  upgrade - Perform an upgrade
  install - Install new packages (pkg is libc6 not libc6.deb)
  reinstall - Reinstall packages (pkg is libc6 not libc6.deb)
  remove - Remove packages
  purge - Remove packages and config files
  autoremove - Remove automatically all unused packages
  dist-upgrade - Distribution upgrade, see apt-get(8)
  dselect-upgrade - Follow dselect selections
  build-dep - Configure build-dependencies for source packages
  satisfy - Satisfy dependency strings
  clean - Erase downloaded archive files
  autoclean - Erase old downloaded archive files
  check - Verify that there are no broken dependencies
  source - Download source archives
  download - Download the binary package into the current directory
  changelog - Download and display the changelog for the given package

See apt-get(8) for more information about the available commands.
Configuration options and syntax is detailed in apt.conf(5).
Information about how to configure sources can be found in sources.list(5).
Package and version choices can be expressed via apt_preferences(5).
Security details are available in apt-secure(8).
                                        This APT has Super Cow Powers.

-h或者--help对于多数linux软件来说,就是查看帮助文档。

原来apt-get有这么多小功能!不过多数我也没怎么用过,哈哈 :stuck_out_tongue:

同样,你也可以试试:

ls --help

ls -h中,-h却不会展示帮助文档。所以还是有少数例外的。

还有一些软件,有很多个参数。我随便举个例子哈:

nohup stringtie ${id} -e -v \
        -A ${path_res}/${name}/gene_abund.tab \
        -C ${path_res}/${name}/cov_refs.gtf \
        -B -p 10 \
        -G ${path_gtf} \
        -o ${path_res}/${name}/merged.gtf --fr \
        > ${path_log}/${name}.log 2>&1 &

看,stringtie这个函数有一堆参数。如果你以前有一些编程基础,估计已经是司空见惯了。

好了,apt-get的介绍到这里就结束了,还夹杂了一个其它命令的使用。

基本上apt-get我们用得到的就是updateupgrade

下面,我们来简单地介绍一下刚刚安装的软件怎么用。这些软件,我觉得将有效地帮助管理和美化我们的Linux系统。

安装软件

下面我们会尝试装一些比较酷的软件。它们在linux日常管理中将大有用途。

oh-my-zsh

不知你有没有觉得Shell有点丑?其实我很早就有这种感觉。不过,我也是最近才知道,Shell可以穿上漂亮的衣服,还可以换装!我觉得你可以试一下看看!正好趁这个机会,讲一下怎么不用apt-get安装软件。

我们可以在自己的home目录新建一个目录专门用来放软件,比如:

mkdir -p ~/softwares/omz && cd ~/softwares/omz

然后我们安装ohmyzsh软件:

# 三选一即可

# wget
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# curl
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# fetch
sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

有些人没法正常使用github,那你可以用它在gitee上的镜像:

# 国内个人复制github的镜像
sh -c "$(wget -O- https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)" 

因为我安装过了,所以有这种提示:

--2022-04-18 14:20:45--  https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh
Resolving gitee.com (gitee.com)... 212.64.62.183
Connecting to gitee.com (gitee.com)|212.64.62.183|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13253 (13K) [text/plain]
Saving to: ‘STDOUT’

-                              100%[=================================================>]  12.94K  --.-KB/s    in 0.03s

2022-04-18 14:20:45 (509 KB/s) - written to stdout [13253/13253]

The $ZSH folder already exists (/home/test_user/.oh-my-zsh).

You ran the installer with the $ZSH setting or the $ZSH variable is
exported. You have 3 options:

1. Unset the ZSH variable when calling the installer:
   `ZSH= sh install.sh`
2. Install Oh My Zsh to a directory that doesn't exist yet:
   `ZSH=path/to/new/ohmyzsh/folder sh install.sh`
3. (Caution) If the folder doesn't contain important information,
   you can just remove it with `rm -r /home/test_user/.oh-my-zsh`

这个时候,我们可以用ls -ahl ~命令来看一下home目录中的隐藏文件,里面有一个~/.zshrc文件:

image-20220418142314946

之前我们有提过,-rw-r--r--代表的是文件权限。这里我们再稍微讲一下这个-rw-r--r--是啥意思。它由4个部分组成:

  • -:如果是文件,一般是-(这里表明.zshrc是一个文件)。如果是文件夹,一般是d
  • rw-:代表你自己对这个文件的权限。r代表read,w代表write。所以你自己对它的权限就是read/write,即读和写的权限。你可以阅读它的内容,也可以修改它。
  • r--:和你同一个用户组的其它用户的权限。这里就是只读了。就是和你同一个用户组的其它用户可以阅读这个内容,但是不可以修改它。
  • r--:和你不同用户组的其它用户的权限。这里也是只读。

大致就是这样,可能不一定十分准确哈!

不过,这些规则对root是无效。root可以为所欲为:grinning:

在刚刚开始时,你可能会觉得linux文件修改怎么啰里啰嗦的,各种规则。你姑且认识和接受吧,以后慢慢的,你就会发现它的重要性了。毕竟linux系统的设计核心就是一切都是文件嘛!这也是它的魅力所在了!

反正,我们已经知道我们有修改这个文件的权限。我们修改一些参数:

vim ~/.zshrc

image-20220418143256125

我们要修改的就是ZSH_THEME这个参数。我比较喜欢re5et这个主题。你也可以去github上看看哪些选择,先个好看的就行:https://github.com/ohmyzsh/ohmyzsh/wiki/Themes

还记得怎么用Vim吗?自己再试试看!最后不要忘记用:wq来保存喔!

最后,关闭终端,重新登陆一下,就变成一个漂亮的终端了:

image-20220418143950568

可能你觉得,这算啥呀!好像也没啥变化!

这里我不会说太多omz的功能,以后自己慢慢挖掘吧!这可是一个144k Start的项目!

还有其它类似的项目:

oh-my-zsh二次安装

感谢cye提出问题!

在某个用户里安装oh-my-zsh后,在新用户里再安装会有$ZSH路径的冲突。这时安装特别指定某用户的安装路径即可。比如,我以非root用户test_user为例。

国内小伙伴可以:

ZSH=/home/test_user/ohmyzsh sh -c "$(wget -O- https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)" 

其中,ZSH=/home/test_user/ohmyzsh用于指定该用户的oh-my-zsh安装目录。

国外用户类似,只要:

# 三选一即可

# wget
ZSH=/home/test_user/ohmyzsh sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# curl
ZSH=/home/test_user/ohmyzsh sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# fetch
ZSH=/home/test_user/ohmyzsh sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

有问题请评论区留言喔!

ncdu

这是一个看目录大小(包含子文件)。你可以试试:

cd / && ncdu

耐心等待一下,马上就有一个界面:

image-20220418144340372

你可以Enter一下进去看看。比如我进入/usr文件夹看一下:

image-20220418144452560

用途很简单,可以查看一下有哪些文件。

以后你会发现,查找大文件在linux中不是一件容易的事。然而,因为Linux软件经常会产生一些log文件或者json文件,它们体积很大,除了占据空间也没有什么实质的用途(我觉得除了专业的运维人员,没人会去专门查看日志的吧)。对于VPS这种容量敏感的服务,找出并适当地进行删除等管理就很重要了。

此时,ncdu就有大用场喽!

最后,按q就可以停止。Ctrl+CCtrl+Z应该也可以停止。自己随便玩一下吧!

类似的项目有:

htop

查看系统资源使用状态。无非就是CPU占用和内存占用,以及是哪些进程在工作。如果你想检测自己的电脑没有有被植入挖矿程序之类的,htop就会派上大用途!

当然,有原生的top命令,以后我会专门开博文讨论它。敬请期待吧!

htop的用法也很简单,只要在Shell中输入:

htop

image-20220418144719774

下面还显示某些快捷键,自己试一下吧~我觉得提示得很明显了。实在不懂的话自己Google一下,不要太懒!

ncdu不同的是,它是按F10退出界面并返回Shell

类似的项目还有:

ranger

这是一个动态查看子目录的神器。灵活运用箭头,可以慢慢地找到子目录。我感觉是个很好用的软件,不过它在我这里没有什么特别的应用场景。大家可以看看它有没有用吧!

image-20220418145019999

q可停止并返回Shell。

neofetch

简单地查看主机的硬件信息。

image-20220418145140031

VPS的属性还蛮垃圾的,哈哈!

自己是不是有点眼花,感觉左边的图标和写轮眼好像(~ ̄▽ ̄)~

小结

好了,这回主要是介绍了一些软件的安装和基本使用,顺便也复习了一下以前学过的东西,比如Vim

其实你大可以搜索一下诸如“有哪些好用的Linux软件”之类的问题,应该可以有很多好的建议。你也可以在B站找一下。不过呢,还是建议你对Linux比较熟悉再慢慢地花式玩Linux。

细心的同学可能发现了,我推荐软件好像用法简单,但输出特效很花里胡哨。哈哈!因为这些软件主要作用给你装B用的呀!更重要的是,我希望可以打破一般所认为的“Shell是冷冰冰的”的刻板印象,给Linux的学习过程中多一点点色彩和味道。

看着这些花里胡哨的输出,是不是感觉自己很强,哈哈:grinning: 下一回,我将讲述一些可以让你真正变强的技能!

欲知后事如何,且听下回分解了!