日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

JNI线程、Linux常用命令、权限、防火墙配置

發(fā)布時(shí)間:2025/4/16 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JNI线程、Linux常用命令、权限、防火墙配置 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JNI_OnLoad:

調(diào)用System.loadLibrary()函數(shù)時(shí), 內(nèi)部就會(huì)去查找so中的 JNI_OnLoad 函數(shù),如果存在此函數(shù)則調(diào)用。

JNI_OnLoad會(huì):

告訴 VM 此 native 組件使用的 JNI 版本。

? 對(duì)應(yīng)了Java版本,android中只支持JNI_VERSION_1_2 、JNI_VERSION_1_4、JNI_VERSION_1_6,其中JNI_VERSION_1_1這個(gè)不能用,用它會(huì)報(bào)錯(cuò)的。

? 在JDK1.8有 JNI_VERSION_1_8。

下面咱們來寫一個(gè)該函數(shù):

編譯運(yùn)行:

那要這說這個(gè)函數(shù)有啥用呢?大有用處,咱們先來看一下該函數(shù)的第一個(gè)參數(shù):

動(dòng)態(tài)注冊(cè)就其中的一個(gè)用處,所以接下來看一下學(xué)習(xí)一下動(dòng)態(tài)注冊(cè)。

動(dòng)態(tài)注冊(cè):

在此之前我們一直在jni中使用的 Java_PACKAGENAME_CLASSNAME_METHODNAME 來進(jìn)行與java方法的匹配,這種方式我們稱之為靜態(tài)注冊(cè)。如這個(gè):

其native方法就是按照?Java_PACKAGENAME_CLASSNAME_METHODNAME 規(guī)則來進(jìn)行定義的,如下:

而動(dòng)態(tài)注冊(cè)則意味著方法名可以不用這么長(zhǎng)了,也就是我們可以拋開?Java_PACKAGENAME_CLASSNAME_METHODNAME 這個(gè)規(guī)則動(dòng)態(tài)DIV,在android aosp源碼中就大量的使用了動(dòng)態(tài)注冊(cè)的形式。下面就來實(shí)現(xiàn)咱們的動(dòng)態(tài)注冊(cè),先在Java層聲明一個(gè)native方法:

然后咱們?cè)贑PP中定義一個(gè)函數(shù),不按照?Java_PACKAGENAME_CLASSNAME_METHODNAME ,如下:

接下來則就需要?jiǎng)討B(tài)注冊(cè)將這兩個(gè)進(jìn)行對(duì)應(yīng)上,首先咱們將JNI_OnLoad這個(gè)函數(shù)的第一個(gè)參數(shù)用全局變量保存一下,因?yàn)樵谖磥砥渌瘮?shù)實(shí)現(xiàn)中都有可能用到它,所以:

然后關(guān)鍵的對(duì)應(yīng)代碼來了:需要在cpp中定義一個(gè)JNINativeMethod數(shù)組,里面則會(huì)存放各映射關(guān)系,如下:

其實(shí)它是一個(gè)結(jié)構(gòu)體,咱們來看一下它的定義:

所以根據(jù)結(jié)構(gòu)體的定義,咱們就來動(dòng)態(tài)注冊(cè)一下:

動(dòng)態(tài)注冊(cè)好之后,咱們?cè)赾pp的函數(shù)中打印一句話用來看輸出效果:

接下來來要聲明哪一個(gè)Java類需要?jiǎng)討B(tài)注冊(cè),需要寫全類名,如下:

然后此時(shí)就需要利用JNI_OnLoad函數(shù)中的JavaVM對(duì)其進(jìn)行動(dòng)態(tài)注冊(cè),具體如何搞呢?對(duì)于JNI方法實(shí)現(xiàn)中最重要的參數(shù)則是JNIEnv啦:

,所以首先咱們也得利用它,但是在JNI_OnLoad函數(shù)中只有JavaVM參數(shù),木有JNIEnv,怎么弄呢?當(dāng)然是可以通過JavaVM這個(gè)參數(shù)獲得JNIEnv嘍,具體寫法如下:

其中r的返回值小于0則是失敗,等于0則是成功,接下來則用反射來獲取咱們之前聲明的className變量的class對(duì)象,如下:

接著就開始注冊(cè)啦,具體做法如下:

下面來運(yùn)行一下看能否對(duì)應(yīng)上動(dòng)態(tài)注冊(cè)的函數(shù):

嗯~~確實(shí)達(dá)到了動(dòng)態(tài)映射,不過咱們?cè)賮矶x另外一個(gè)帶參數(shù)的native方法會(huì)發(fā)現(xiàn)一個(gè)問題,如下:

然后在cpp中定義對(duì)應(yīng)的實(shí)現(xiàn):

然后再運(yùn)行看效果:

當(dāng)有參數(shù)的時(shí)候這里就得特別的注意啦,在平常咱們靜態(tài)注冊(cè)時(shí)每個(gè)函數(shù)都會(huì)有這兩個(gè)參數(shù),如下:

所以是不是在動(dòng)態(tài)注冊(cè)有帶參數(shù)的情況下也得要加上這兩個(gè)參數(shù)呢?咱們?cè)囋?#xff1a;

一切正常了,所以。。在動(dòng)態(tài)注冊(cè)時(shí)得特別注意帶參數(shù)的情況~~

native線程調(diào)用Java:

native調(diào)用java需要使用JNIEnv這個(gè)結(jié)構(gòu)體,而JNIEnv是由Jvm傳入與線程相關(guān)的變量。

但是可以通過JavaVM的AttachCurrentThread方法來獲取到當(dāng)前線程中的JNIEnv指針。

咱們先來聲明一個(gè)ndk方法:

而要用到線程其實(shí)是有兩種方式:一是用到posix線程方式,還有一種是用C++ 11的方式,這里用標(biāo)準(zhǔn)的posix線程方式,先引入頭文件:

然后創(chuàng)建一個(gè)線程:

假如說我們?cè)趎ative層開個(gè)線程去下載東東,然后下載完成之后會(huì)通知應(yīng)用Java層,那么肯定就存在Native線程會(huì)要去調(diào)用Java方法的場(chǎng)景,所以下面就來模擬一下:

咱們?cè)贛ainActivity中定義一個(gè)通知結(jié)果的方法,如下:

然后咱們?cè)诰€程中來反射這個(gè)方法,而根據(jù)經(jīng)驗(yàn)咱們需要在線程執(zhí)行函數(shù)中來獲取如下兩個(gè)參數(shù):

而執(zhí)行函數(shù)只能接收一個(gè)參數(shù),所以咱們聲明一個(gè)結(jié)構(gòu)體來對(duì)這兩個(gè)參數(shù)進(jìn)行包裝一下,如下:

然后咱們將參數(shù)傳到threadTask參數(shù)中,如下:

然咱們來在執(zhí)行方法中來反射調(diào)用Java中的updateUI方法,由于之前都學(xué)過了,直接上代碼:

編譯運(yùn)行:

拋異常崩掉了,這是為啥呢,此時(shí)的日志報(bào)得有些模糊,可以將Logcat的TAG過濾去掉,就可以看到堆棧信息了,如下:

11-09 09:29:01.581 2018-2032/? E/dalvikvm: JNI ERROR: non-VM thread making JNI call (GetObjectClass)VM aborting 11-09 09:29:01.581 2018-2032/com.jni.test A/libc: Fatal signal 6 (SIGABRT) at 0x000007e2 (code=-6), thread 2032 (com.jni.test) 11-09 09:29:01.605 680-686/? I/jdwp: Ignoring second debugger -- accepting and dropping 11-09 09:29:01.625 877-883/? I/jdwp: Ignoring second debugger -- accepting and dropping 11-09 09:29:01.669 1390-1396/? I/jdwp: Ignoring second debugger -- accepting and dropping 11-09 09:29:01.685 222-222/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***Build fingerprint: 'generic/vbox86p/vbox86p:4.4.4/KTU84P/14:userdebug/test-keys'Revision: '0'pid: 2018, tid: 2032, name: com.jni.test >>> com.jni.test <<< 11-09 09:29:01.689 222-222/? I/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr -------- 11-09 09:29:01.701 817-823/? I/jdwp: Ignoring second debugger -- accepting and dropping 11-09 09:29:01.713 756-762/? I/jdwp: Ignoring second debugger -- accepting and dropping 11-09 09:29:01.729 572-578/? I/jdwp: Ignoring second debugger -- accepting and dropping 11-09 09:29:01.741 1469-1475/? I/jdwp: Ignoring second debugger -- accepting and dropping 11-09 09:29:01.905 226-559/? W/genymotion_audio: out_write() limiting sleep time 1845522210 to 39909 11-09 09:29:01.957 222-222/? I/DEBUG: eax 00000000 ebx 000007e2 ecx 000007f0 edx 00000006esi 000007f0 edi 00000000xcs 00000073 xds 0000007b xes 0000007b xfs 00000000 xss 0000007beip b76b2df6 ebp b7717ce0 esp 952c99a0 flags 00200207backtrace:#00 pc 0003bdf6 /system/lib/libc.so (tgkill+22)#01 pc 00000005 <unknown>stack: 11-09 09:29:01.961 222-222/? I/DEBUG: 952c9960 00000000 952c9964 b7713268 /system/lib/libc.so952c9968 00000000 952c996c b7684f79 /system/lib/libc.so (pthread_mutex_unlock+25)952c9970 b771318c /system/lib/libc.so952c9974 b7921568 [heap]952c9978 00000015 952c997c 00000000 952c9980 00000000 952c9984 b76d1846 /system/lib/libc.so (funlockfile+6)952c9988 b7712fcc /system/lib/libc.so952c998c b76bce96 /system/lib/libc.so (__sflush_locked+150)952c9990 00000000 952c9994 00000000 952c9998 b7684da9 /system/lib/libc.so (pthread_mutex_lock+9)952c999c b7712fcc /system/lib/libc.so#00 952c99a0 00000006 952c99a4 000007f0 952c99a8 b7712fcc /system/lib/libc.so952c99ac b768f556 /system/lib/libc.so (pthread_kill+102)952c99b0 000007e2 952c99b4 000007f0 952c99b8 00000006 952c99bc 00000000 952c99c0 b7713268 /system/lib/libc.so952c99c4 00000000 952c99c8 b768f4f9 /system/lib/libc.so (pthread_kill+9)952c99cc b7712fcc /system/lib/libc.so952c99d0 952c9a1c [stack:2032]952c99d4 952c9c5c [stack:2032]952c99d8 37900019 952c99dc b768f91c /system/lib/libc.so (raise+44)

不過報(bào)得也不是太明顯,但是從標(biāo)紅的地方來看肯定是線程那塊出問題了,那具體是哪句代碼造成呢,可以用debug進(jìn)行進(jìn)一步定位跟蹤,如下:

往下走:

也就是說問題代碼出在:

這是為何呢?從理解上來看貌似代碼沒啥問題的呀,其原則在于JNIEnv是不能跨線程使用的,也就是說:

此時(shí)怎么解決呢?還記得之前我們的JavaVM已經(jīng)存為全局變量了么,如下:

它就有用武之地啦,具體如何弄呢?

然后此時(shí)再編譯運(yùn)行:

發(fā)現(xiàn)還是報(bào)錯(cuò)。。經(jīng)過查看更加詳細(xì)的日志可以發(fā)現(xiàn)原因如下:

這是因?yàn)檫@個(gè)參數(shù)需要用全局共享的辦法來在子線程中用,所以修改程序如下:

編譯運(yùn)行:

Linux 文件權(quán)限、VIM、防火墻:

關(guān)于NDK這塊還涉及到Linux的一些基礎(chǔ)使用,這個(gè)東東其實(shí)就是熟能生巧,其實(shí)在之前已經(jīng)對(duì)其基本的用法進(jìn)行了專門的學(xué)習(xí),但是為了在將來NDK學(xué)習(xí)打下更扎實(shí)的基礎(chǔ)所以這里也整體做一個(gè)了解回顧。?

SSH連接:

無論是mac還是windows的都可以選擇下載自己喜歡的遠(yuǎn)程登陸客戶端工具,通過ssh協(xié)議連接到遠(yuǎn)程主機(jī)。

客戶端的使用非常方便。但也有喜歡使用命令行的方式來進(jìn)行連接,所以下面來看一下命令如何連:

使用root登陸1.1.1.1:(默認(rèn)端口為22)

ssh root@1.1.1.1

也可以使用-p指定 ssh主機(jī)配置的端口

ssh -p 222 root@1.1.1.1

環(huán)境變量:

和Windows不同,Linux環(huán)境變量配置需要使用?export?聲明。如:

export PATH=${PATH}:java/bin:android/platform-tools

如果直接在終端中輸入命令,則設(shè)置PATH環(huán)境變量的值,但其作用范圍僅限于當(dāng)前會(huì)話。即臨時(shí)環(huán)境變量。

如果說要設(shè)置永久的環(huán)境變量,涉及但不限于“profile【推薦用它】、bashrc、bash_profile?”這三個(gè)文件,其用其它一種就成,

profile:位于這個(gè)目靈:/etc/profile,如下:

然后在這個(gè)文件里面用export進(jìn)行環(huán)境變量配置,這是對(duì)所有用戶都生效,也就是如果電腦中有多個(gè)用戶,全局生效。

bash_profile:它位于~/.bash_profile,如下:

但是跟/etc/prifile不同的時(shí),這個(gè)設(shè)置只針對(duì)當(dāng)前用戶有效,如果切換其它用戶則設(shè)置的環(huán)境變量是不生效的。

bashrc:它位于~/.bashrc,如下:

它也是跟某個(gè)用戶相關(guān)的配置。

對(duì)于這三個(gè)環(huán)境變量相關(guān)的配置文件而言:首先讀入/etc/profile,讀取當(dāng)前用戶目錄內(nèi)的~/.bash_profile;最后,根據(jù)用戶帳號(hào)讀取~/.bashrc。

/etc/?是系統(tǒng)全局環(huán)境變量設(shè)定;~/是用戶私有環(huán)境變量設(shè)定。

在修改配置文件后,可使用source /etc/profile刷新。

權(quán)限:

Linux系統(tǒng)從誕生就被設(shè)計(jì)為多用戶系統(tǒng),不同的用戶處于不同的地位,擁有不同的權(quán)限。為了保護(hù)系統(tǒng)安全,Linux系統(tǒng)對(duì)不同的用戶訪問同一文件的權(quán)限做了不同而規(guī)定。

在Linux中可以通過 `ls -l`? 顯示文件的屬性以及文件所屬的用戶和組,如下:

其中:

其中具體的信息如下圖:

在Linux中第一個(gè)字符代表這個(gè)文件是目錄、文件或者鏈接等等,如下:

,其涉及到類型的有如下:

然后是三個(gè)為一組的rwx, 其中r表示可讀,w?表示可寫,?x表示可執(zhí)行。對(duì)于每個(gè)文件來說,它都有一個(gè)特定的所有者,也就是對(duì)該文件具有所有權(quán)的用戶。同時(shí)在Linux中用戶都是按組來進(jìn)行分類的,一個(gè)用戶屬于一個(gè)或多個(gè)組。文件所有者之外的用戶又分為文件所有者的同組用戶和其他用戶。可以使用以下命令查看當(dāng)前使用的用戶信息:

如下:

  • 更改文件所屬:
    這里先介紹命令用法:

    咱們來試驗(yàn)一下,先新建一個(gè)目錄:

    接下來咱們來修改該文件的所屬用戶,先查看一下當(dāng)前系統(tǒng)存在的用戶,可以使用如下命令:

    xiongweideMacBook-Pro:linux xiongwei$ cat /etc/passwd ## # User Database # # Note that this file is consulted directly only when the system is running # in single-user mode. At other times this information is provided by # Open Directory. # # See the opendirectoryd(8) man page for additional information about # Open Directory. ## nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false root:*:0:0:System Administrator:/var/root:/bin/sh daemon:*:1:1:System Services:/var/root:/usr/bin/false _uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico _taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false _networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false _installassistant:*:25:25:Install Assistant:/var/empty:/usr/bin/false _lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false _postfix:*:27:27:Postfix Mail Server:/var/spool/postfix:/usr/bin/false _scsd:*:31:31:Service Configuration Service:/var/empty:/usr/bin/false _ces:*:32:32:Certificate Enrollment Service:/var/empty:/usr/bin/false _appstore:*:33:33:Mac App Store Service:/var/empty:/usr/bin/false _mcxalr:*:54:54:MCX AppLaunch:/var/empty:/usr/bin/false _appleevents:*:55:55:AppleEvents Daemon:/var/empty:/usr/bin/false _geod:*:56:56:Geo Services Daemon:/var/db/geod:/usr/bin/false _serialnumberd:*:58:58:Serial Number Daemon:/var/empty:/usr/bin/false _devdocs:*:59:59:Developer Documentation:/var/empty:/usr/bin/false _sandbox:*:60:60:Seatbelt:/var/empty:/usr/bin/false _mdnsresponder:*:65:65:mDNSResponder:/var/empty:/usr/bin/false _ard:*:67:67:Apple Remote Desktop:/var/empty:/usr/bin/false _www:*:70:70:World Wide Web Server:/Library/WebServer:/usr/bin/false _eppc:*:71:71:Apple Events User:/var/empty:/usr/bin/false _cvs:*:72:72:CVS Server:/var/empty:/usr/bin/false _svn:*:73:73:SVN Server:/var/empty:/usr/bin/false _mysql:*:74:74:MySQL Server:/var/empty:/usr/bin/false _sshd:*:75:75:sshd Privilege separation:/var/empty:/usr/bin/false _qtss:*:76:76:QuickTime Streaming Server:/var/empty:/usr/bin/false _cyrus:*:77:6:Cyrus Administrator:/var/imap:/usr/bin/false _mailman:*:78:78:Mailman List Server:/var/empty:/usr/bin/false _appserver:*:79:79:Application Server:/var/empty:/usr/bin/false _clamav:*:82:82:ClamAV Daemon:/var/virusmails:/usr/bin/false _amavisd:*:83:83:AMaViS Daemon:/var/virusmails:/usr/bin/false _jabber:*:84:84:Jabber XMPP Server:/var/empty:/usr/bin/false _appowner:*:87:87:Application Owner:/var/empty:/usr/bin/false _windowserver:*:88:88:WindowServer:/var/empty:/usr/bin/false _spotlight:*:89:89:Spotlight:/var/empty:/usr/bin/false _tokend:*:91:91:Token Daemon:/var/empty:/usr/bin/false _securityagent:*:92:92:SecurityAgent:/var/db/securityagent:/usr/bin/false _calendar:*:93:93:Calendar:/var/empty:/usr/bin/false _teamsserver:*:94:94:TeamsServer:/var/teamsserver:/usr/bin/false _update_sharing:*:95:-2:Update Sharing:/var/empty:/usr/bin/false _installer:*:96:-2:Installer:/var/empty:/usr/bin/false _atsserver:*:97:97:ATS Server:/var/empty:/usr/bin/false _ftp:*:98:-2:FTP Daemon:/var/empty:/usr/bin/false _unknown:*:99:99:Unknown User:/var/empty:/usr/bin/false _softwareupdate:*:200:200:Software Update Service:/var/db/softwareupdate:/usr/bin/false _coreaudiod:*:202:202:Core Audio Daemon:/var/empty:/usr/bin/false _screensaver:*:203:203:Screensaver:/var/empty:/usr/bin/false _locationd:*:205:205:Location Daemon:/var/db/locationd:/usr/bin/false _trustevaluationagent:*:208:208:Trust Evaluation Agent:/var/empty:/usr/bin/false _timezone:*:210:210:AutoTimeZoneDaemon:/var/empty:/usr/bin/false _lda:*:211:211:Local Delivery Agent:/var/empty:/usr/bin/false _cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false _usbmuxd:*:213:213:iPhone OS Device Helper:/var/db/lockdown:/usr/bin/false _dovecot:*:214:6:Dovecot Administrator:/var/empty:/usr/bin/false _dpaudio:*:215:215:DP Audio:/var/empty:/usr/bin/false _postgres:*:216:216:PostgreSQL Server:/var/empty:/usr/bin/false _krbtgt:*:217:-2:Kerberos Ticket Granting Ticket:/var/empty:/usr/bin/false _kadmin_admin:*:218:-2:Kerberos Admin Service:/var/empty:/usr/bin/false _kadmin_changepw:*:219:-2:Kerberos Change Password Service:/var/empty:/usr/bin/false _devicemgr:*:220:220:Device Management Server:/var/empty:/usr/bin/false _webauthserver:*:221:221:Web Auth Server:/var/empty:/usr/bin/false _netbios:*:222:222:NetBIOS:/var/empty:/usr/bin/false _warmd:*:224:224:Warm Daemon:/var/empty:/usr/bin/false _dovenull:*:227:227:Dovecot Authentication:/var/empty:/usr/bin/false _netstatistics:*:228:228:Network Statistics Daemon:/var/empty:/usr/bin/false _avbdeviced:*:229:-2:Ethernet AVB Device Daemon:/var/empty:/usr/bin/false _krb_krbtgt:*:230:-2:Open Directory Kerberos Ticket Granting Ticket:/var/empty:/usr/bin/false _krb_kadmin:*:231:-2:Open Directory Kerberos Admin Service:/var/empty:/usr/bin/false _krb_changepw:*:232:-2:Open Directory Kerberos Change Password Service:/var/empty:/usr/bin/false _krb_kerberos:*:233:-2:Open Directory Kerberos:/var/empty:/usr/bin/false _krb_anonymous:*:234:-2:Open Directory Kerberos Anonymous:/var/empty:/usr/bin/false _assetcache:*:235:235:Asset Cache Service:/var/empty:/usr/bin/false _coremediaiod:*:236:236:Core Media IO Daemon:/var/empty:/usr/bin/false _launchservicesd:*:239:239:_launchservicesd:/var/empty:/usr/bin/false _iconservices:*:240:240:IconServices:/var/empty:/usr/bin/false _distnote:*:241:241:DistNote:/var/empty:/usr/bin/false _nsurlsessiond:*:242:242:NSURLSession Daemon:/var/db/nsurlsessiond:/usr/bin/false _nsurlstoraged:*:243:243:NSURLStorage Daemon:/var/db/nsurlstoraged:/usr/bin/false _displaypolicyd:*:244:244:Display Policy Daemon:/var/empty:/usr/bin/false _astris:*:245:245:Astris Services:/var/db/astris:/usr/bin/false _krbfast:*:246:-2:Kerberos FAST Account:/var/empty:/usr/bin/false _gamecontrollerd:*:247:247:Game Controller Daemon:/var/empty:/usr/bin/false _mbsetupuser:*:248:248:Setup User:/var/setup:/bin/bash _ondemand:*:249:249:On Demand Resource Daemon:/var/db/ondemand:/usr/bin/false _xserverdocs:*:251:251:macOS Server Documents Service:/var/empty:/usr/bin/false _wwwproxy:*:252:252:WWW Proxy:/var/empty:/usr/bin/false _mobileasset:*:253:253:MobileAsset User:/var/ma:/usr/bin/false _findmydevice:*:254:254:Find My Device Daemon:/var/db/findmydevice:/usr/bin/false _datadetectors:*:257:257:DataDetectors:/var/db/datadetectors:/usr/bin/false _captiveagent:*:258:258:captiveagent:/var/empty:/usr/bin/false _ctkd:*:259:259:ctkd Account:/var/empty:/usr/bin/false _applepay:*:260:260:applepay Account:/var/db/applepay:/usr/bin/false _hidd:*:261:261:HID Service User:/var/db/hidd:/usr/bin/false _cmiodalassistants:*:262:262:CoreMedia IO Assistants User:/var/db/cmiodalassistants:/usr/bin/false _analyticsd:*:263:263:Analytics Daemon:/var/db/analyticsd:/usr/bin/false _fpsd:*:265:265:FPS Daemon:/var/db/fpsd:/usr/bin/false _timed:*:266:266:Time Sync Daemon:/var/db/timed:/usr/bin/false xiongweideMacBook-Pro:linux xiongwei$

    查看將該文件的所屬者改為root用戶,如下:

    先看一下該用戶的所屬組:

  • 更改文件權(quán)限:

    三組rwx分別代表:所屬用戶(user)、所屬分組(group)、其他(other)。Linux文件權(quán)限使用chmod能夠修改這三組權(quán)限。有兩種設(shè)置方法。一種是數(shù)字,一種是符號(hào)。

    ①、使用數(shù)字修改權(quán)限:

    咱們來試一下改一下剛才新建的a.txt的權(quán)限,先看一下它目前的權(quán)限:

    咱們可以將其改為不可讀不可寫:
    ?
    其中177分別代表user、group、other的權(quán)限對(duì)應(yīng)值,對(duì)于這個(gè)文件而言root權(quán)限只有執(zhí)行權(quán)限,但由于root是一個(gè)最高權(quán)限,所以這個(gè)例子舉得有點(diǎn)不太恰當(dāng),得切成其它用戶那就可以體現(xiàn)出這個(gè)權(quán)限的效果了,反正了解怎么修復(fù)權(quán)限是重點(diǎn)。

    ②、使用符號(hào)改變權(quán)限:
    ?
    對(duì)于修改文件的權(quán)限還有用這種符號(hào),咱們還是基于新建的a.txt的user權(quán)限進(jìn)行操作,目前它只有一個(gè)可執(zhí)行權(quán)限:

    咱們用符號(hào)方式去掉其執(zhí)行權(quán)限,如下:

    但是發(fā)現(xiàn)貌似group和other的可執(zhí)行權(quán)限也木有了:

    可見該方法是會(huì)修改user、group、other三個(gè)權(quán)限的。

    然后再給它加回來執(zhí)行權(quán)限:

    然后再給它加一個(gè)可讀權(quán)限:

    這個(gè)方法目前是對(duì)user、group、other進(jìn)行統(tǒng)一更改的,那如果只想對(duì)其中一個(gè)進(jìn)行更改呢,就可以使用下面的方法:

    咱們?cè)囈幌轮唤ouser去掉可讀權(quán)限,如下:

    這塊比較簡(jiǎn)單,到時(shí)需要的時(shí)候照著改就成。

  • su和sudo:

    su : 在已登陸的終端(命令行)會(huì)話中登陸到另一個(gè)用戶。即 切換用戶。

    su [切換的用戶名] 未輸入用戶名,默認(rèn)切換到root用戶


    咱們來試一下:

    su 和 su -是存在區(qū)別的,兩者的區(qū)別是,前者只切換了身份,而后者相當(dāng)于重新登陸。su - 重新登陸后目錄切換到用戶配置的工作目錄。什么意思,咱們用“su -”來試一下就明白了:

    sudo:? 用戶普通用戶使用root權(quán)限來執(zhí)行命令(不切換用戶)。即臨時(shí)提升用戶權(quán)限為root權(quán)限,比較簡(jiǎn)單,在MAC上謹(jǐn)慎用su來提權(quán),因?yàn)槿绻胹u之后的任何修改系統(tǒng)是不涉防的,所以比較危險(xiǎn),遇到?jīng)]權(quán)限的文件就用sudo來臨時(shí)提下權(quán)既可。

包管理器:

就是用來裝軟件用的,記錄一下就成:

Mac: brew

Ubuntu: apt

Centos: yum

VI/VIM:

關(guān)于它基本也是熟能生巧,據(jù)說大神都是用它來編程的。。對(duì)于我來說知道基本的使用就成了,下面簡(jiǎn)單回顧一下,反正也記不住,下圖已經(jīng)詳細(xì)進(jìn)行了介紹:

總的來說是分為三種模式,分別是命令模式輸入模式底線命令模式,如下:

命令模式

用戶剛剛啟動(dòng) vi/vim,便進(jìn)入了命令模式。

此狀態(tài)下敲擊鍵盤動(dòng)作會(huì)被Vim識(shí)別為命令,而非輸入字符。比如我們此時(shí)按下i,并不會(huì)輸入一個(gè)字符,i被當(dāng)作了一個(gè)命令。

常用的命令:

  • i?切換到輸入模式,以輸入字符。

  • x?刪除當(dāng)前光標(biāo)所在處的字符。

  • :?切換到底線命令模式,以在最底一行輸入命令。

輸入模式

在輸入模式中,可以使用以下按鍵:

  • 字符按鍵以及Shift組合,輸入字符

  • ENTER,回車鍵,換行

  • BACK SPACE,退格鍵,刪除光標(biāo)前一個(gè)字符

  • DEL,刪除鍵,刪除光標(biāo)后一個(gè)字符

  • 方向鍵,在文本中移動(dòng)光標(biāo)

  • HOME/END,移動(dòng)光標(biāo)到行首/行尾

  • Page Up/Page Down,上/下翻頁

  • Insert,切換光標(biāo)為輸入/替換模式,光標(biāo)將變成豎線/下劃線

  • ESC,退出輸入模式,切換到命令模式

底線命令模式

在命令模式下按下:(英文冒號(hào))就進(jìn)入了底線命令模式。

  • q?退出程序
  • w?保存文件
  • wq?保存并退出
  • q! wq!?!:表示強(qiáng)制

iptables防火墻:【了解既可】

1、Ubuntu 默認(rèn)有裝iptables,可通過which iptables確認(rèn)

2、Ubuntu默認(rèn)沒有iptables配置文件,可通過iptables-save > /etc/iptables.up.rules生成

3、讀取配置并生效可以通過 iptables-restore < /etc/iptables.up.rules?

4、vim /etc/network/interfaces 增加

pre-up iptables-restore < /etc/iptables.up.rules #啟動(dòng)時(shí)應(yīng)用防火墻 post-down iptables-save > /etc/iptables.up.rules #關(guān)閉時(shí)保存防火墻設(shè)置,以便下次啟動(dòng)時(shí)使用

iptables-save > /etc/iptables.up.rules?內(nèi)容類似:

# Generated by iptables-save v1.6.0 on Mon Aug 27 12:34:05 2018 *filter # DROP 表示關(guān)閉、ACCPET表示允許 :INPUT DROP [11:722] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [29:2664] #開發(fā) 22和80801 端口 -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT COMMIT # Completed on Mon Aug 27 12:34:05 2018

常用操作:

#查看當(dāng)前防火墻配置并顯示規(guī)則行號(hào) iptables -L --line-numbers #開啟 8080 端口 iptables -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT #關(guān)閉 8888 端口 iptables -A INPUT -p tcp -m tcp --dport 8888 -j DROP #刪除 1 號(hào) 規(guī)則(行號(hào)) iptables -D INPUT 1

?

轉(zhuǎn)載于:https://www.cnblogs.com/webor2006/p/9863734.html

總結(jié)

以上是生活随笔為你收集整理的JNI线程、Linux常用命令、权限、防火墙配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。