携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情
若看到相同文章,为本人其他平台
================== shell ==============
一、shell命令
1.shell是一种命令解释器
2.shell的种类:
1.bash
2.sh
3.ksh
4.csh
5....
3.查看当前的shell类型 echo $SHELL
4.查看系统能支持的shell vi /etc/shells
5.command [-options] arg1 arg2 arg3
6.自动补齐:tab tab:写入一个命令的时候,可以用tab键来补全命令
二、命令
1.基本操作命令
1.1 pwd ==> 查看当前目录的绝对路径
1.2 ls ==> 查看当前目录下的可见文件
ls -a ==> 查看当前目录下所有文件(包含隐藏文件)
ls -l ==> 查看可见文件的详细信息
linux下一切皆是文件 (7种)
b: 块设备文件 block:存储设备文件
c: 字符设备文件 character:操作系统识别的字符设备
d: 目录文件 directory:目录文件
-: 普通文件
l: 连接文件 link:*软连接:ln -s 源文件 链接文件
硬连接:ln 链接文件 源文件
s: 套接字文件 socket:进行网络传输的文件
p: 管道文件 pipe:进行进程间通信
fifo:
文件==》用户==》组用户
421 421 421
rwx rwx rwx r:代表可读 w:代表可写 x:代表可执行
7 7 7
第一组:表示文件所属用户可读可写可执行权限
第二组:表示文件所属用户同组的其它用户可读可写可执行权限
第三组:表示其他用户对文件拥有可读可写可执行的权限
1.3 chmod ==>chmod 777 文件名
将文件的权限规定为所有人对此文件都能执行读写执行的操作
chmod +x 文件名
规定所有人对此文件都有对此文件执行的权限
1.4 mkdir ==>mkdir 文件名
创建一个目录文件
1.5 rmdir ==>rmdir 文件名
删除一个空目录文件
rm -r 文件名
1.6 touch ==>touch 文件名
创建一个普通文件
vi 文件名
- 文件操作命令
4.1 cat ==> cat 文件名
在shell下查看文件
more ==> more 文件名
less ==> less 文件名
head ==> head 文件名 head -n 行数 文件名
tail ==> tail 文件名 tail -n 行数 文件名
2.2文件拷贝和移动 拷贝:cp
格式:cp 源文件 目标文件
移动:mv
格式:mv 源文件 目标文件
2.3.文件检索命令:
find ==> find -name 文件名
在当前目录及子目录下查找文件
==> find / -name 文件名
在系统中查找文件
==> find /home/linux -name 文件名
在/home/linux目录及子目录下查找文件
2.4.历史查询命令
history ==> history
查看shell下命令的历史记录
==> echo $HISTSIZE
打印history缓冲区的大小
==> HISTSIZE=2000
设置history缓存区大小
==> history -c
清空history缓存区
2.5.命令别名
alias ==> alias chakan='ls -l'
chakan将能实现ls -l的命令
alias 新命令='原始命令'
新建一个命令别名
unalias 新命令
删除一个命令别名
三、特殊:
1.通配符
- 匹配满足字符串的任意长度任意字符的文件
? 匹配满足字符串的一个任意字符的文件
[] 匹配满足字符串的中括号内制定的文件
[-] 匹配满足字符串的中括号内从X-X的文件
[^] 匹配满足字符串的中括号内除了X的文件
2.管道
| 连接两个shell命令
将前面命令的输出作为后面命令的输入
ps -ef | grep XXX 查看某个进程状态
3.输出定向
echo helloworld > 1.txt
将本来应该打印在终端上的helloworld打印到1.txt文件中(覆盖源文件信息)
echo helloworld >> 1.txt
将北来应该打印在中断上的helloworld追击到1.txt文件中(不覆盖源文件信息,只是追加在文件末尾)
四、不常用
判断文件是否一致
diff file1 file2
判断文件类型
file 1.txt
中断显示
echo helloworld
echo $HISTSIZE
echo $SHELL
当前系统日期命令
date
查看当前登录用户
whoami
用户身份切换
su root
su linux
五、打包命令
1.打包 tar tar -cvf XXX.tar XXX
2.解包 tar tar -xvf XXX.tar
3.压缩 gzip gzip -c XXX.tar > XXX.tar.gz
4.解压 gunzip gunzip XXX.tar.gz
5.压缩 bzip2 bzip2 -K XXX.tar
6.解压 bunzip2 bunzip2 XXX.tar.bz2
7.组合键 tar -zcvf XXX.tar.gz XXX
tar -zxvf XXX.tar.gz
tar -jcvf XXX.tar.bz2 XXX
tar -jxvf XXX.tar.bz2
六、用户管理命令
ubuntu 1. 新建用户:sudo adduser XXX
-
修改密码:passwd XXX
-
删除用户:deluser XXX
-
切换用户:su XXX
/etc/passwd 保存与用户相关的信息
/etc/shadow 保存用户密码
/etc/group 保存用户组信息
/home/james 家目录
七、进程管理命令 1.程序:程序是一系列代码的集合 进程:程序执行的过程
ps -ef ==>查看当前操作系统中进程信息
ps aux ==>查看当前操作系统中进程信息
kill -9 进程号(pid) 杀死进程号对应的进程
killall -9 进程名 杀死所有进程名进程
top ==>根据CPU占用率去查看进程
————————————————
静态库:
第一步:
完成功能函数的编写,例如:hello.c
#include <stdio.h>
void hello(const char *name) { printf("hello %s !\n",name); }
第二步:
完成主调用函数的编写,例如:main.c
#include <stdio.h>
int main() { hello("everyone"); return 0;
}
第三步:
制作静态库:
1、gcc -c hello.c =》 hello.o
2、ar crs libmyhello.a hello.o =》libmyhello.a ====>必须以lib 开头 .a 结尾
第四步:
在住调用函数编译过程中链接静态库:
1、gcc -o hello main.c -L. -l myhello
2、执行效果查看,不论是否删除libmyhello.a 程序中已经编译进静态库
./hello
Hello everyone!
###############################################################################
动态库:
1、第一步,同制作静态库一样产生hello.o 文件
gcc -c hello.c =》 hello.o
2、第二步:制作动态库
gcc -shared -fPIC -o libmyhello.so hello.o ///注意:.o文件可以是多个
3、第三步:在主调函数中使用动态库
gcc -o hello main.c -L. -l myhello
小写字母L
4、第四步:将文件libmyhello.so复制到目录/usr/lib中
mv libmyhello.so /usr/lib
5、第五步:执行效果验证:
#./hello
hello everyone !
6、ldd命令可以查看一个可执行程序依赖的共享库,
ldd hello
linux-gate.so.1 => (0x00110000)
libmyhello.so => /usr/lib/libmyhello.so (0x00111000)
libc.so.6 => /lib/libc.so.6 (0x00965000)
/lib/ld-linux.so.2 (0x00940000)
###############################################################################
注意:
1、当静态库和动态库同名时, gcc命令将优先使用动态库
2、gcc -shared 参数使其生成是动态库而不是普通执行程序
3、功能函数可以没有头文件,但是在工程应用中最好加上头文件并声明功能函数
4、无论静态库,动态库,都是由.o文件创建 源程序hello.c通过gcc先编译成.o文件
5、在linux下,库文件一般放在/usr/lib和/lib下,
6、静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称
7、动态库的名字一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号,minor是副版本号