网站上传页面,网站分享图标素材,网站进入特效,企业网站必须实名认证文章目录
管道
概念
要点
举例
环境变量
查看
修改
常用环境变量
常用命令
系统状况
文件权限
文件检索
查看文件内容
用户相关
其他工具
安装软件
附录
Linux权限 本节课讲解的是管道#xff0c;环境变量#xff0c;以及常用命令
管道
概念
管道类似文…文章目录
管道
概念
要点
举例
环境变量
查看
修改
常用环境变量
常用命令
系统状况
文件权限
文件检索
查看文件内容
用户相关
其他工具
安装软件
附录
Linux权限 本节课讲解的是管道环境变量以及常用命令
管道
概念
管道类似文件重定向可以将前一个命令的stdout重定向到下一个命令的stdin 要点
管道命令仅处理stdout会忽略stderr
管道右边的命令必须能接受stdin
多个管道命令可以串联
与文件重定向的区别 文件重定向左边是命令右边是文件
管道左右两边都是命令左边的命令要有stdout右边的命令要有stdin
举例
find . -name *.py | xargs cat | wc -l
统计当前目录所有python文件的总行数
对上面的命令进行解释 首先我们单独运行find . -name *.py 会查找出当前目录下所有以py结尾的文件如下 而我们的cat命令其作用是给定一堆文件将文件的内容输出到stdout中Concatenate FILE(s) to standard output所以cat命令它接收参数参数指定了文件名比如cat console.log表示将console.log这个文件中的内容输出到stdout。 而xargs的作用就是将前一个命令的stdout转变为行参数用空格隔开传递给下一个命令。 假设find . -name *.py 的结果是
./client.py
./server.py
则find . -name *.py | xargs cat 就相当于cat ./client.py ./server.py 而cat会将多个文件的内容输出到stdout此时再通过管道命令将stdout传递给下一个命令wc -l-l for lines就会从stdout中统计出行数。所以 find . -name *.py | xargs cat | wc -l
这个命令实现的效果就是统计当前目录下所有python文件的代码总行数。结果如下 如果上面的命令不加xargs会是什么效果呢 find . -name *.py | cat | wc -l 此时实际统计的就是当前目录下python文件的个数。cat命令也接受stdin的数据接收stdin时就仅仅是将stdin输出到stdout 查看某个命令的用法可以通过cmd --help或者man cmd进行。比如查看wc命令的用法执行wc --help
Usage: wc [OPTION]... [FILE]...or: wc [OPTION]... --files0-fromFPrint newline, word, and byte counts for each FILE, and a total line ifmore than one FILE is specified. A word is a non-zero-length sequence ofcharacters delimited by white space.With no FILE, or when FILE is -, read standard input.The options below may be used to select which counts are printed, always inthe following order: newline, word, character, byte, maximum line length.-c, --bytes print the byte counts-m, --chars print the character counts-l, --lines print the newline counts--files0-fromF read input from the files specified byNUL-terminated names in file F;If F is - then read names from standard input-L, --max-line-length print the maximum display width-w, --words print the word counts--help display this help and exit--version output version information and exit 环境变量
Linux系统中有很多配置信息。其中有一些配置信息是记录在文件中的比如系统的cpu信息记录在/proc/cpuinfo这个文件中 cat /proc/cpuinfo 但是Linux也有一些配置信息是放在环境变量里的。环境变量是一种全局变量可以被各个进程访问到我们可以通过修改环境变量来修改系统的一些配置很方便。 查看
查看当前环境下的全部环境变量 env # 显示当前用户的变量set # 显示当前shell的变量包括当前用户的变量export # 显示当前导出为用户变量的shell变量 查看某个环境变量比如查看PATH这个环境变量 echo $PATH 修改
可以参考shell语法章节 - 变量 小节。 比如修改HOME变量 export HOME/
随后我们执行cd命令当cd命令没有参数时会回到用户的家目录也就是回到环境变量HOME指定的目录此时我们可以看到回到了根目录/ 但是export命令修改的环境变量只对当前这个bash生效当我们关闭bash并重新打开一个会发现之前的修改已失效。 那么如何将环境变量的修改进行持久化呢也就是说修改完后我们希望之后打开的所有bash都能够应用到此修改 可以将修改命令放到~/.bashrc放到这个文件的末尾因为如果存在相同命令后面的会覆盖前面的修改完~/.bashrc后记得source ~/.bashrc来将修改应用到当前的bash环境 为何将修改命令放到~/.bashrc后就可以确保修改会影响未来的所有bash环境呢因为 每次启动bash都会先执行~/.bashrc
每次ssh登录远程服务器都会启动一个bash命令行给我们
每次tmux新开一个pane都会启动一个bash命令行给我们
由于每次启动bash都会加载一遍~\.bashrc所以未来所有新开的bash环境都会加载我们修改的内容。 其实Linux下执行的命令都是单独开一个进程去执行的比如执行一个不会立即结束的命令top,可以看到最下面的那个进程就是执行top命令的进程。 常用环境变量
HOME用户的家目录
PATH可执行文件命令的存储路径。路径之间用:分隔。在bash命令行中执行一个命令Linux系统是怎么找到这个命令的呢是通过遍历PATH变量下的目录从这些目录中找到第一个匹配的命令或可执行文件。当某个可执行文件同时出现在多个路径中时会选择从左到右数第一个路径中的执行。下列所有存储路径的环境变量均采用从左到右的优先顺序。
LD_LIBRARY_PATH用于指定动态链接库(.so文件)的路径其内容是以冒号分隔的路径列表。
C_INCLUDE_PATHC语言的头文件路径内容是以冒号分隔的路径列表。
CPLUS_INCLUDE_PATHCPP的头文件路径内容是以冒号分隔的路径列表。
PYTHONPATHPython导入包的路径内容是以冒号分隔的路径列表。
JAVA_HOMEjdk的安装目录。
CLASSPATH存放Java导入类的路径内容是以冒号分隔
常用命令
系统状况
top查看所有进程的信息Linux的任务管理器
打开后输入M按使用内存排序
打开后输入P按使用CPU排序
打开后输入q退出
df -h查看硬盘使用情况
free -h查看内存使用情况
du -sh查看当前目录占用的硬盘空间
du -h --max-depth1
ps aux查看所有进程
kill -9 pid杀死编号为pid的进程
传递某个具体的信号kill -s SIGTERM pid
netstat -nt查看所有网络连接
w列出当前登陆的用户
ping www.baidu.com检查是否连网
文件权限
chmod修改文件权限
chmod x xxx给xxx文件添加可执行权限
chmod -x xxx给xxx文件去掉可执行权限
chmod 777 xxx将xxx的权限改成777
chmod 777 xxx -R递归修改整个文件夹的权限
其余关于Linux的权限见附录 文件检索
find /path/to/directory/ -name *.py搜索某个文件路径下的所有*.py文件 grep xxx从stdin中读入若干行数据如果某行中包含xxx则输出该行。也可以添加文件名作为参数则就是查找某个文件中的某一行是否出现xxx若出现则将那一行输出到stdout wc统计行数单词数字节数 既可以从stdin中直接读取内容也可以传入文件名作为参数
wc -l统计行数
wc -w统计单词数
wc -c统计字节数
wc --help查看帮助文档
tree展示当前目录的文件结构 tree /path/to/directory/展示某个目录的文件结构
tree -a展示所有文件包括隐藏文件
ag xxx搜索当前目录下的所有文件检索xxx字符串会列出xxx在哪个文件中的哪一行 cut分割一行内容 从stdin中读入多行数据
echo $PATH | cut -d : -f 3,5输出PATH用:分割后第35列的数据
echo $PATH | cut -d : -f 3-5输出PATH用:分割后第3-5列的数据
echo $PATH | cut -c 3,5输出PATH的第35个字符
echo $PATH | cut -c 3-5输出PATH的第3-5个字符
sort将每行内容按照字典序排序 可以从stdin中读取多行数据
也可以从将文件名作为命令行参数
xargs将stdin中的数据用空格或回车分割成命令行参数 例find . -name *.py | xargs cat | wc -l统计当前目录下所有python文件的总行数 查看文件内容
more浏览文件内容
回车下一行
空格下一页
b上一页
q退出
less与more类似功能更全
回车下一行
y上一行
Page Down下一页
Page Up上一页
q退出
head -3 xxx展示xxx的前三行
tail -3 xxx展示xxx的末尾三行
用户相关
history展示当前用户的历史操作。内容会持久化到~/.bash_history 其他工具
md5sum计算md5值
可以从stdin读取数据stdin输入数据后敲回车再按Ctrl D结束输入
也可以将文件名作为参数传入
time cmd统计cmd命令的执行时间
ipython3交互式python3环境。可以做计算器或批量管理文件
tar压缩文件
tar -zcvf xxx.tar.gz /path/to/file/*压缩指定目录下所有文件
tar -zxvf xxx.tar.gz解压缩
diff xxx yyy查找文件xxx与yyy的不同点
sz file在Xshell等工具中发送服务器的文件到本地s for send
rz在Xshell等工具中发送本地的文件到服务器r for read
需要运行apt-get install lrzsz先进行安装
安装软件
sudo cmd以root身份执行cmd命令udo cmd
apt-get install xxx安装某个软件ubuntu
pip install xxx --user --upgrade安装python包
附录
Linux权限
用ls -l 查看当前目录的文件 最左一列的是文件的权限相关信息一共有10位最左侧的第1位表示文件类型如上图 d表示文件夹directory
l表示链接link
f表示普通文件file
后面的9位代表权限前3位表示文件所有者的权限中间3位表示文件所属用户组的权限后3位表示其他用户的权限。 左边第二列的数字表示这个文件的连接数 左边第三列表示这个文件的拥有者owner 左边第四列表示这个文件所属的用户组 左边第五列表示这个文件的大小 左边第六列表示这个文件的修改时间 比如 dr-xr-x---. 22 root root 4096 10月 20 15:01 root 这个root是个文件夹并且其owner是root用户其属于root用户组大小位4096字节。 左边第一列后9位是文件权限前3位是owner权限r-x表示这个root文件夹对于root用户是可读可执行的中间3位是用户组权限r-x表示这个root文件夹对于root用户组里的用户是可读可执行的最后3位是其他用户的权限---表示其他用户对这个文件夹不可读不可写不可执行。 可以为某个文件修改权限使用chmod chmod ux run.sh 给run.sh这个文件的owner添加执行权限 chmod gr run.sh 给run.sh这个文件所属的用户组添加读权限 chmod o-w run.sh 给run.sh这个文件的其他用户删除写权限 chmod ax run.sh 给run.sh这个文件的所有用户添加执行权限 权限就3种rwx读写执行也用3个二进制位来表示比如111表示三个权限都有十进制就是7110表示只有读写权限十进制就是6一般我们会用chmod 777 run.sh 给全部用户添加全部权限 chmod 751 run.sh 给run.sh的owner添加全部全写给其所属的用户组添加读执行权限101给其他用户添加执行权限001 chmod urwx,grx,ox run.sh 效果跟上面的命令一样 chmod r run.sh 给所有用户分配读权限augo不写的话默认是a chmod 444 run.sh 效果同上 chmod -R ur dir 递归地给 dir这个目录下所有文件及其子目录的owner分配读权限 若想要改变某个文件的owner可以用chown命令有时某个目录或文件没有执行权限可以通过修改文件或目录的owner来解决 如递归的给dir目录下的所有文件及子目录修改其owner为yogurt chown -R yogurt:yogurt dir/ 第一个yogurt是用户第二个yogurt是所属用户组 如何查看系统都有哪些用户 cat /etc/passwd 只看用户名称 cat /etc/passwd | cut -f1 -d : 查看某个用户的所属组 groups 查看当前用户所属的用户组 groups yogurt 查看用户yogurt所属的用户组 切换用户su root 切换到root用户 su yogurt 切换到yogurt用户su for switch useror shift user 不带参数的su 表示切换到root用户 注意su 只是切换了用户而没有切换用户所使用的shell即如果当前用户是yogurt 然后我使用su root切换到root用户则只是换了用户身份但是shell环境仍然是yogurt的shell所以在root的PATH变量中的一些命令是调用不到的 可以看到只是切换用户的话当前工作目录都没有发生变化。用su -会同时切换shell环境。用su只切换用户身份 sudo表示以root权限来运行某个命令。默认情况下只有root用户才能执行sudo命令但可以让普通用户以root权限执行某条命令只要将该用户配置在/etc/sudoers里面即可 比如sudo su表示以root权限来运行su命令这样可以不用输入密码root的密码前提是在/etc/sudoers配置文件中配置当前用户 比如当前用户是yogurt若没进行配置 则会要求输入yogurt的密码 用root用户修改/etc/sudoers配置文件 然后再在yogurt用户下用sudo su 就能直接切换到root 当然用su来切换到root仍然需要输入root密码