整理 google doc:Basics: Linux Basic

重定向/管道

比如标准输出重定向 java -jar **.jar > log.txt

2>&1 标准错误输出重定向到标准输出

首先$()主要则是command substitution,比如 rm $(where connect.sh)

echo $(cmd) 和 echo “$(cmd)”,结果差不多,但是仍然有区别。注意观察,双引号转义完成的结果会自动增加单引号,而前者不会, 如果 $ 读取出的参数字符串包含空格,应该用双引号括起来,否则就会出错。

管道:

ps -aef | grep -v grep | grep “java -server -jar” | awk ‘{print $2}’ $(2)获取管道前面等输出结果第二列,此时可以用$2替代;

标准输入重定向符:

<<< String 比如脚本中读取第一个参数并取分隔’'的第一个值 IFS='/' read -ra target_arr <<< "$1"

${}主要是作为positional parameter,

${2}还可以表示获取脚本输入参数等第二个,此时也可以用$2替代,$#是输入参数个数;

$ animal=cat
$ echo $animals
# No such variable as “animals”.
$ echo ${animal}s
cats

{}https://askubuntu.com/questions/339015/what-does-mean-in-the-find-command

https://labuladong.gitbook.io/algo/di-wu-zhang-ji-suan-ji-ji-shu/linux-jin-cheng https://labuladong.gitbook.io/algo/di-wu-zhang-ji-suan-ji-ji-shu/linuxshell

difference between ${} and $() in shell script https://superuser.com/questions/935374/difference-between-and-in-shell-script

cd /proc/\(/fd\)代表当前解释程序

命令默认都接受参数 -argument,有些命令还接受标准输入(可以使用管道符|和重定向符< «<), 简单判别方式:命令是否可以阻塞终端(如cat不加任何命令会阻塞终端) 如 echo”trade:trade”|chpasswd

命令执行本质

一个命令行终端是一个shell进程,在这个终端里执行的程序都是作为该shell进程的子进程。 如果子进程命令阻塞终端shell进程,shell进程就会等待子进程退出才能接收其他命令; 如果关掉了shell终端,,依附的所有子进程都会退出; 加上&号可以避免这种情况,原理是将命令挂在systemd系统守护进程名下,其他办法还有nohup或者开tmux或者screen,并且加&可以让shell进程不再阻塞,从而继续响应新命令;

set -x 可以显示shell在执行什么程序

当使用 sudo 时,系统会使用 /etc/sudoers 这个文件中规定的该用户的权限和环境变量

包管理

不同发行版

Ubuntu based on debian,

Centos for bigdata

Redhat for databases(because those database companies use redhat, it’s tested)

amd64, i386,x64 https://askubuntu.com/questions/32402/amd64-i386-32bit-64bit-which-version-to-choose

dpkg(Ubuntu) , rpm(centos)

http://linuxintro.org/index.php?title=Dpkg-rpm_equivalent_commands&redirect=no

安装

Download or install:

1) add to apt/yum repository, and then apt-get/yum install ***

Normally will be put in /usr/bin/

2) download tar file, and extract, then set env variable or persist it in bashrc bash_profile

Cons: if there is dependencies, you have to manually install them

3) download deb for ubuntu or rpm for centos, and install it, it will help you install all related dependencies

Know the version before installing:

apt policy <packagename>

yum info/search <packagename>

rpm -ivh -uvh VS yum install vs yum localinstall

https://serverfault.com/questions/825320/difference-between-rpm-ivh-package-and-yum-install-package#:~:text=there%20is%20no%20difference%20if,works%20with%20file(s).

Additionally, you can use yum localinstall to intelligently install dependencies as needed.

1、rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 **rpm -qa grep “软件或者包的名字**“。
2、以deb包安装的,可以用dpkg -l能看到。如果是查找指定软件包,用dpkg -l grep “软件或者包的名字”;
3、yum方法安装的,可以用yum list installed查找,如果是查找指定包,命令后加 grep “软件名或者包名”;

4、如果是以源码包自己编译安装的,例如.tar.gz或者tar.bz2形式的,这个只能看可执行文件是否存在了,

上面两种方法都看不到这种源码形式安装的包。如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下。